zhuyifan

fix

......@@ -56,4 +56,6 @@ public interface CommonConstants {
String LOGIN_SOURCE = "loginSource";
String OPEN_ID = "openId";
}
......
......@@ -37,6 +37,10 @@ public class LoginContextHolder {
return CONTEXT_HOLDER.get().getEnterpriseId();
}
public static String getOpenId() {
return CONTEXT_HOLDER.get().getOpenId();
}
public static void clear() {
CONTEXT_HOLDER.remove();
}
......@@ -54,7 +58,8 @@ public class LoginContextHolder {
private String name;
private String openid;
@Builder.Default
private String openId = "";
}
......
......@@ -65,7 +65,7 @@ public class OrderController {
return orderService.getOrderDetailsByOrderId(orderId);
}
@ApiOperation(value = "创建订单")
@ApiOperation(value = "小程序创建订单")
@PostMapping("/orders")
@ResponseStatus(HttpStatus.OK)
@RepeatSubmit(prefix = "createOrder", isLockByLoginUser = false)
......
package com.infoloop.tianting.enums;
import com.infoloop.tianting.exception.BaseEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum LoginSourceEnum{
CUSTOMER(1, "小程序住院客户"),
MINI_PROGRAM(2, "小程序非住院客户"),
CUSTOMER(1, "住院客户"),
MINI_PROGRAM(2, "阳光厅客户"),
OPERATOR(3, "院区端"),
KDS(4, "KDS"),
;
......
......@@ -12,15 +12,12 @@ import com.infoloop.tianting.enums.LoginSourceEnum;
import com.infoloop.tianting.exception.ClientEndExceptions;
import com.infoloop.tianting.exception.ErrorCodeEnum;
import com.infoloop.tianting.model.common.ResponseResult;
import com.infoloop.tianting.service.ClientCustomerService;
import com.infoloop.tianting.service.client.ClientCustomerServiceRpcClient;
import com.infoloop.tianting.service.client.OperatorServiceRpcClient;
import com.infoloop.tianting.service.client.WOperatorServiceRpcClient;
import com.infoloop.tianting.utils.ResponseUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.jni.Error;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
......@@ -71,6 +68,7 @@ public class LoginInterceptor extends HandlerInterceptorAdapter {
final var enterpriseId = Convert.toInt(StpUtil.getExtra(CommonConstants.ENTERPRISE_ID));
final var loginSource = Convert.toInt(StpUtil.getExtra(CommonConstants.LOGIN_SOURCE));
if (loginSource.equals(LoginSourceEnum.CUSTOMER.getValue())) {
final var openId = Convert.toStr(StpUtil.getExtra(CommonConstants.OPEN_ID));
final var loginId = StpUtil.getLoginIdAsInt();
final var customer = clientCustomerServiceRpcClient.getClientCustomerById(enterpriseId, loginId);
if (customer == null) {
......@@ -78,7 +76,7 @@ public class LoginInterceptor extends HandlerInterceptorAdapter {
ResponseUtil.write(response, ResponseResult.failed(ErrorCodeEnum.VALIDATE_FAILED));
return false;
}
builder.id(loginId).enterpriseId(enterpriseId).name(customer.getResponse().getName());
builder.id(loginId).enterpriseId(enterpriseId).name(customer.getResponse().getName()).openId(openId);
return true;
} else if (loginSource.equals(LoginSourceEnum.OPERATOR.getValue())){
final var loginId = StpUtil.getLoginIdAsInt();
......@@ -101,7 +99,7 @@ public class LoginInterceptor extends HandlerInterceptorAdapter {
return true;
} else {
final var loginId = StpUtil.getLoginIdAsString();
builder.openid(loginId).enterpriseId(enterpriseId);
builder.openId(loginId).enterpriseId(enterpriseId);
return true;
}
}
......
......@@ -545,6 +545,7 @@ public class OrderServiceRpcClient {
.setRoomNo(createOrderDto.getRoomNo())
.setShouldCreateTableCode(createOrderDto.getOrderType().equals(OrderTypeEnum.DINE_IN.getValue()) || !createOrderDto.getTableCode().isEmpty())
.setTableCode(createOrderDto.getTableCode())
.setShouldCreateOnlinePay(true)
.setOnlinePay(createOrderDto.getOnlinePay())
.setShouldCreatePayStatus(createOrderDto.getOnlinePay())
.setPayStatus(PayStatusEnum.TO_PAY)
......@@ -581,7 +582,6 @@ public class OrderServiceRpcClient {
if ((skuSellQuantityRpcResponse.getTodaySellQuantity() + orderDetail.getCount()) > skuSellQuantityRpcResponse.getMaxSellQuantity()) {
log.error("skuSellQuantityRpcResponse stock no enough; stallId:{}, skuId:{}, count:{}", createOrderDto.getStallId(), orderDetail.getSkuId(), orderDetail.getCount());
skuStockMap.put(skuMap.get(orderDetail.getSkuId()).getName(), skuSellQuantityRpcResponse.getMaxSellQuantity() - skuSellQuantityRpcResponse.getTodaySellQuantity());
continue;
}
}
if (!soldOutSkus.isEmpty()) {
......
......@@ -3,6 +3,7 @@ package com.infoloop.tianting.service.impl;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.crypto.SecureUtil;
import com.infoloop.tianting.clientcustomerservice.ClientCustomerHospitalRecordHospitalStatusEnum;
import com.infoloop.tianting.constant.CommonConstants;
import com.infoloop.tianting.exception.ClientEndExceptions;
......@@ -32,70 +33,59 @@ public class LoginServiceImpl implements LoginService {
public SaTokenInfo login(LoginDto loginDto) {
if (loginDto.isShouldLoginWithOpenCode()) {
final var wxUserOpenIdDto = wxMiniProgramHttpClient.getUserOpenIdByCode(loginDto.getOpenCode());
StpUtil.login(
wxUserOpenIdDto.getOpenid(),
SaLoginModel.create()
.setExtra(CommonConstants.ENTERPRISE_ID, loginDto.getEnterpriseId())
.setExtra(CommonConstants.LOGIN_SOURCE, loginDto.getLoginSourceEnum().getValue())
.build());
StpUtil.login(wxUserOpenIdDto.getOpenid(), SaLoginModel.create()
.setExtra(CommonConstants.ENTERPRISE_ID, loginDto.getEnterpriseId())
.setExtra(CommonConstants.LOGIN_SOURCE, loginDto.getLoginSourceEnum().getValue())
.build());
return StpUtil.getTokenInfo();
} else if (loginDto.isShouldLoginWithHisCustomerId()) {
var customer =
clientCustomerServiceRpcClient
.getClientCustomerByHISCustomerId(loginDto.getHisCustomerId())
.getResponse();
var customer = clientCustomerServiceRpcClient.getClientCustomerByHISCustomerId(loginDto.getHisCustomerId()).getResponse();
if (customer.getId() == 0) {
// 根据hisCustomerId拿不到用户的话再去根据合同号去his查一次,即认为是月子中心客户
customer =
clientCustomerServiceRpcClient
.getClientCustomerByContactNo(loginDto.getHisCustomerId())
.getResponse();
customer = clientCustomerServiceRpcClient.getClientCustomerByContactNo(loginDto.getHisCustomerId()).getResponse();
if (customer.getId() == 0) {
throw ClientEndExceptions.IncorrectRequestValue.build(ErrorCodeEnum.VALIDATE_FAILED.name());
} else {
var record =
clientCustomerServiceRpcClient.getClientCustomerHospitalRecordsByCustomerId(
customer.getEnterpriseId(), customer.getId());
if (!record.hasResponse()
|| record.getResponse().getHospitalStatus()
!= ClientCustomerHospitalRecordHospitalStatusEnum.CURRENT) {
throw ClientEndExceptions.IncorrectRequestValue.build(
ErrorCodeEnum.VALIDATE_FAILED.name());
var record = clientCustomerServiceRpcClient.getClientCustomerHospitalRecordsByCustomerId(customer.getEnterpriseId(), customer.getId());
if (!record.hasResponse() || record.getResponse().getHospitalStatus() != ClientCustomerHospitalRecordHospitalStatusEnum.CURRENT) {
throw ClientEndExceptions.IncorrectRequestValue.build(ErrorCodeEnum.VALIDATE_FAILED.name());
}
}
} else {
var record = clientCustomerServiceRpcClient.getClientCustomerHospitalRecordsByCustomerId(customer.getEnterpriseId(), customer.getId());
if (!record.hasResponse() || record.getResponse().getHospitalStatus() != ClientCustomerHospitalRecordHospitalStatusEnum.CURRENT) {
throw ClientEndExceptions.IncorrectRequestValue.build(ErrorCodeEnum.VALIDATE_FAILED.name());
}
}
StpUtil.login(
customer.getId(),
SaLoginModel.create()
.setExtra(CommonConstants.ENTERPRISE_ID, customer.getEnterpriseId())
.setExtra(CommonConstants.LOGIN_SOURCE, loginDto.getLoginSourceEnum().getValue())
.build());
final var wxUserOpenIdDto = wxMiniProgramHttpClient.getUserOpenIdByCode(loginDto.getOpenCode());
StpUtil.login(customer.getId(), SaLoginModel.create()
.setExtra(CommonConstants.ENTERPRISE_ID, customer.getEnterpriseId())
.setExtra(CommonConstants.LOGIN_SOURCE, loginDto.getLoginSourceEnum().getValue())
.setExtra(CommonConstants.OPEN_ID, wxUserOpenIdDto.getOpenid())
.build());
return StpUtil.getTokenInfo();
} else if (loginDto.isShouldLoginWithOperatorPhone()) {
final var operator =
operatorServiceRpcClient.getCOperatorByMobileOrEmail(loginDto.getOperatorPhone());
final var operator = operatorServiceRpcClient.getCOperatorByMobileOrEmail(loginDto.getOperatorPhone());
if (operator.getId() == 0) {
throw ClientEndExceptions.AuthenticationFailure.build(ErrorCodeEnum.UNAUTHORIZED.name());
}
StpUtil.login(
operator.getId(),
SaLoginModel.create()
if (!operator.getPassword().equals(SecureUtil.sha1(loginDto.getPassword()))) {
throw ClientEndExceptions.AuthenticationFailure.build(ErrorCodeEnum.VALIDATE_FAILED.name());
}
StpUtil.login(operator.getId(), SaLoginModel.create()
.setExtra(CommonConstants.ENTERPRISE_ID, operator.getEnterpriseId())
.setExtra(CommonConstants.LOGIN_SOURCE, loginDto.getLoginSourceEnum().getValue())
.build());
return StpUtil.getTokenInfo();
} else {
final var operator =
wOperatorServiceRpcClient.getWOperatorByEmail(loginDto.getEmail()).getResponse();
final var operator = wOperatorServiceRpcClient.getWOperatorByEmail(loginDto.getEmail()).getResponse();
if (operator.getId() == 0) {
throw ClientEndExceptions.AuthenticationFailure.build(ErrorCodeEnum.UNAUTHORIZED.name());
}
// if (!operator.getPassword().equals(loginDto.getPassword())) {
// throw ClientEndExceptions.AuthenticationFailure.build(ErrorCodeEnum.VALIDATE_FAILED.name());
// }
StpUtil.login(
operator.getId(),
SaLoginModel.create()
if (!operator.getPassword().equals(SecureUtil.sha1(loginDto.getPassword()))) {
throw ClientEndExceptions.AuthenticationFailure.build(ErrorCodeEnum.VALIDATE_FAILED.name());
}
StpUtil.login(operator.getId(), SaLoginModel.create()
.setExtra(CommonConstants.ENTERPRISE_ID, operator.getEnterpriseId())
.setExtra(CommonConstants.LOGIN_SOURCE, loginDto.getLoginSourceEnum().getValue())
.build());
......
......@@ -92,8 +92,8 @@ public class OrderServiceImpl implements OrderService {
final var record = clientCustomerServiceRpcClient.getClientCustomerHospitalRecordsByCustomerId(customer.getEnterpriseId(), customer.getId()).getResponse();
CreateOrderDto createOrderDto = new CreateOrderDto();
createOrderDto.setShouldCreateCustomerId(true);
createOrderDto.setShouldCreateOpenId(false);
createOrderDto.setOpenId("");
createOrderDto.setShouldCreateOpenId(true);
createOrderDto.setOpenId(operatorLoginInfo.getOpenId());
createOrderDto.setTableCode(operatorCreateOrderDto.getTableCode());
createOrderDto.setCustomerId(operatorCreateOrderDto.getCustomerId());
createOrderDto.setStallId(operatorCreateOrderDto.getStallId());
......@@ -156,13 +156,11 @@ public class OrderServiceImpl implements OrderService {
.doctors(Stream.of(doctors, dietDoctors).flatMap(List::stream).collect(Collectors.toList()))
.build();
createOrderDto.setCustomerNoticeJson(customerNotice);
createOrderDto.setUpdatedBy(operatorLoginInfo.getId());
createOrderDto.setUpdateSource(OrderSourceEnum.STALL.getNumber());
List<CreateOrderDetailDto> orderDetailDtoList = new ArrayList<>();
final var menuDetails = menuServiceRpcClient.queryMenuDetailsByMenuId(menu.getEnterpriseId(), operatorCreateOrderDto.getMenuId()).getResponsesList();
final var skuIds =
menuDetails.stream()
final var skuIds = menuDetails.stream()
.map(SingleMenuDetailRpcResponse::getSkuId)
.collect(Collectors.toList());
final var rpcSkus = skuServiceRpcClient.getDishSkusByIds(skuIds).getResponseList();
......