@@ -17,6 +17,7 @@ import cn.com.taiji.ias.model.PersistException; | |||
import cn.com.taiji.ias.model.ServiceLogEvent; | |||
import com.google.common.collect.Maps; | |||
import com.zgglyun.common.model.AbstractHttpRequestInfo; | |||
import org.redisson.api.RLock; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.beans.factory.annotation.Qualifier; | |||
import org.springframework.dao.DataIntegrityViolationException; | |||
@@ -36,6 +37,7 @@ public abstract class AbstractHandleManager<T extends AbstractSignTypeRequest<?> | |||
public static LocalDateTime TIME1990 = LocalDateTime.parse("1990-01-01T00:00:00"); | |||
protected final Class<T> clazz; | |||
protected final DataType dataType; | |||
protected RLock lock ; | |||
// @Autowired | |||
// protected LogManager logManager; | |||
@Autowired | |||
@@ -71,6 +73,15 @@ public abstract class AbstractHandleManager<T extends AbstractSignTypeRequest<?> | |||
} finally { | |||
event.setAllCostTime(ChronoUnit.MILLIS.between(event.getReceiveTime(), LocalDateTime.now())); | |||
executor.execute(() -> addServiceLog(event)); | |||
if (lock != null) { | |||
try { | |||
lock.unlock(); | |||
} catch (Exception e) { | |||
logger.error("", e); | |||
}finally { | |||
lock = null;//清楚容器内的lock,让其GC | |||
} | |||
} | |||
} | |||
} | |||
@@ -42,6 +42,7 @@ import cn.com.taiji.core.repo.jpa.user.StaffRepo; | |||
import cn.com.taiji.ias.dict.DataType; | |||
import cn.com.taiji.ias.manager.AbstractHandleManager; | |||
import cn.com.taiji.ias.manager.GlobalTransactionManager; | |||
import org.redisson.api.RedissonClient; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.transaction.annotation.Transactional; | |||
@@ -89,6 +90,8 @@ public abstract class AbstractOrderManager<T extends AbstractSignTypeRequest<?>> | |||
protected IssueOrderPayRepo orderPayRepo; | |||
@Autowired | |||
protected CommonPayConfigRepo payConfigRepo; | |||
@Autowired | |||
protected RedissonClient redissonClient; | |||
@Autowired | |||
protected IssueOrderChannelNoticeRepo issueOrderChannelNoticeRepo; |
@@ -1,14 +1,24 @@ | |||
package cn.com.taiji.ias.manager.order; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeResponse; | |||
import cn.com.taiji.core.entity.dict.basic.SourceType; | |||
import cn.com.taiji.core.entity.dict.issue.IssueOrderStep; | |||
import cn.com.taiji.core.entity.dict.issue.RechangeStatus; | |||
import cn.com.taiji.core.entity.dict.issue.RechangeType; | |||
import cn.com.taiji.core.entity.dict.issue.ShippingStatus; | |||
import cn.com.taiji.core.entity.issue.IssueOrderRechange; | |||
import cn.com.taiji.core.entity.issue.IssueOrderinfo; | |||
import cn.com.taiji.core.model.comm.protocol.ias.order.ChangeGoodsRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ias.order.ChangeGoodsResponse; | |||
import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder; | |||
import cn.com.taiji.core.repo.jpa.issue.IssueOrderRechangeRepo; | |||
import cn.com.taiji.ias.dict.DataType; | |||
import cn.com.taiji.ias.model.ServiceLogEvent; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
import java.io.IOException; | |||
import java.time.LocalDateTime; | |||
import java.util.Map; | |||
/** | |||
@@ -18,11 +28,16 @@ import java.util.Map; | |||
* @description: | |||
*/ | |||
@Service | |||
public class ChangeGoodsManager extends AbstractOrderManager<ChangeGoodsRequest>{ | |||
public class ChangeGoodsManager extends AbstractOrderManager<ChangeGoodsRequest> { | |||
@Autowired | |||
private IssueOrderRechangeRepo issueOrderRechangeRepo; | |||
public ChangeGoodsManager() { | |||
super(DataType.CHANGE_GOODS); | |||
} | |||
@Override | |||
protected String getDataId(ChangeGoodsRequest req) { | |||
return ""; | |||
@@ -30,16 +45,46 @@ public class ChangeGoodsManager extends AbstractOrderManager<ChangeGoodsRequest> | |||
@Override | |||
protected void formatValidateInternal(ErrorMsgBuilder builder, ChangeGoodsRequest req, ServiceLogEvent event, Map<String, Object> dataStream) throws ServiceHandleException { | |||
} | |||
@Override | |||
protected void businessValidateInternal(ErrorMsgBuilder builder, ChangeGoodsRequest req, ServiceLogEvent event, Map<String, Object> dataStream) throws ServiceHandleException { | |||
if (!SourceType.WECHAT.equals(req.getSourceType()) && !SourceType.ALI.equals(req.getSourceType())) { | |||
throw newBusinessException("仅限小程序申请换货"); | |||
} | |||
IssueOrderinfo orderinfo = checkOrder(req.getOrderNo()); | |||
//只有待激活和已收货状态可换货 | |||
if (!IssueOrderStep.WAITING_ACTIVE.equals(orderinfo.getOrderStep()) && !ShippingStatus.RECEIVED.equals(orderinfo.getShippingStatus())) { | |||
throw newBusinessException("订单当前状态不可换货"); | |||
} | |||
dataStream.put(ORDER, orderinfo); | |||
} | |||
@Override | |||
protected void persistInternal(ChangeGoodsRequest req, ServiceLogEvent event, Map<String, Object> dataStream) throws ServiceHandleException { | |||
IssueOrderRechange orderRechange = copyProperties(req, new IssueOrderRechange()); | |||
orderRechange.setRechangeType(RechangeType.EXCHANGE); | |||
orderRechange.setRechangeStatus(RechangeStatus.NEW); | |||
orderRechange.setRechangeMode(1);//写死线上 | |||
orderRechange.setOpenId(req.getOpenId()); | |||
issueOrderRechangeRepo.persist(orderRechange); | |||
IssueOrderinfo orderinfo = (IssueOrderinfo) dataStream.get(ORDER); | |||
orderinfo.setOrderStep(IssueOrderStep.APPLY_CHANGE); | |||
orderinfo.setShippingStatus(ShippingStatus.WAIT_SHIPPING); | |||
orderinfo.setUpdateTime(LocalDateTime.now()); | |||
orderInfoRepo.merge(orderinfo); | |||
} | |||
@Override | |||
protected AbstractSignTypeResponse getRes(ChangeGoodsRequest req, ServiceLogEvent event, Map<String, Object> dataStream) throws ServiceHandleException, IOException { | |||
return null; | |||
protected ChangeGoodsResponse getRes(ChangeGoodsRequest req, ServiceLogEvent event, Map<String, Object> dataStream) throws ServiceHandleException, IOException { | |||
IssueOrderinfo order = (IssueOrderinfo) dataStream.get(ORDER); | |||
ChangeGoodsResponse res = new ChangeGoodsResponse(); | |||
res.setReceiveTime(getReceiveTimeStr(event)); | |||
res.setId(order.getId()); | |||
return res; | |||
} | |||
} |
@@ -52,7 +52,7 @@ public class OrderInitManager extends AbstractOrderManager<OrderInitRequest> { | |||
public static final String OLD_ORDER = "oldOrder"; | |||
public static final String STAFF = "staff"; | |||
public static final String LOCK = "lock"; | |||
@Autowired | |||
private QtkAgencyRepo qtkAgencyRepo; | |||
@@ -60,8 +60,7 @@ public class OrderInitManager extends AbstractOrderManager<OrderInitRequest> { | |||
super(DataType.ORDER_INIT); | |||
} | |||
@Autowired | |||
private RedissonClient redissonClient; | |||
@Autowired | |||
private IssueProductPromotionRepo promotionRepo; | |||
@Autowired | |||
@@ -86,7 +85,7 @@ public class OrderInitManager extends AbstractOrderManager<OrderInitRequest> { | |||
Map<String, Object> dataStream) throws ServiceHandleException { | |||
String lockKey = MyFinals.VEHICLE_LOCK_KEY + request.getVehiclePlate(); | |||
RLock lock = redissonClient.getLock(lockKey); | |||
lock = redissonClient.getLock(lockKey); | |||
boolean tryLock = false; | |||
try { | |||
tryLock = lock.tryLock(2, 30, TimeUnit.SECONDS); | |||
@@ -119,7 +118,6 @@ public class OrderInitManager extends AbstractOrderManager<OrderInitRequest> { | |||
validVehiclePlate(request.getVehiclePlate(), request.getVehiclePlateColor()); | |||
// 校验本地订单 | |||
checkLocalOrder(request); | |||
dataStream.put(LOCK, lock); | |||
dataStream.put(STAFF, staff); | |||
} | |||
@@ -160,12 +158,6 @@ public class OrderInitManager extends AbstractOrderManager<OrderInitRequest> { | |||
@Override | |||
protected void onSuccessInternal(OrderInitRequest req, ServiceLogEvent event, Map<String, Object> dataStream) { | |||
RLock lock = (RLock)dataStream.get(LOCK); | |||
try { | |||
lock.unlock(); | |||
} catch (Exception e) { | |||
logger.error("", e); | |||
} | |||
IssueOrderinfo order = (IssueOrderinfo)dataStream.get(ORDER); | |||
IssueOrderinfo oldOrder = (IssueOrderinfo)dataStream.get(OLD_ORDER); | |||
executor.execute(() -> { |
@@ -3,22 +3,19 @@ package cn.com.taiji.ias.manager.order; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.common.pub.TimeTools; | |||
import cn.com.taiji.core.entity.basic.QtkCustomerInfo; | |||
import cn.com.taiji.core.entity.dict.basic.Gender; | |||
import cn.com.taiji.core.entity.dict.basic.IdType; | |||
import cn.com.taiji.core.entity.dict.basic.PlateColorType; | |||
import cn.com.taiji.core.entity.dict.basic.UserType; | |||
import cn.com.taiji.core.entity.dict.basic.*; | |||
import cn.com.taiji.core.entity.dict.issue.IssueOrderStatus; | |||
import cn.com.taiji.core.entity.dict.issue.IssueOrderStep; | |||
import cn.com.taiji.core.entity.issue.IssueOrderinfo; | |||
import cn.com.taiji.core.entity.issue.IssueOrderinfoExt; | |||
import cn.com.taiji.core.entity.issue.TransactionStatus; | |||
import cn.com.taiji.core.entity.user.AccountInfo; | |||
import cn.com.taiji.core.manager.tools.MyTimeTools; | |||
import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ias.order.GetCustomerIdRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ias.order.GetCustomerIdResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ias.order.UserUploadRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ias.order.UserUploadResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ias.portal.AuthRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ias.portal.RegisterNoCodeRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ods.ois.issue.OisBasicDataUpdateRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ods.oqs.issue.OqsUserQueryRequest; | |||
@@ -26,18 +23,19 @@ import cn.com.taiji.core.model.comm.protocol.ods.oqs.issue.OqsUserQueryResponse; | |||
import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import cn.com.taiji.ias.dict.DataType; | |||
import cn.com.taiji.ias.manager.portal.AuthManager; | |||
import cn.com.taiji.ias.manager.portal.RegisterNoCodeManager; | |||
import cn.com.taiji.ias.model.MyFinals; | |||
import cn.com.taiji.ias.model.ServiceLogEvent; | |||
import cn.hutool.core.util.ObjectUtil; | |||
import org.redisson.api.RLock; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
import java.time.LocalDate; | |||
import java.time.LocalDateTime; | |||
import java.time.format.DateTimeFormatter; | |||
import java.util.Map; | |||
import java.util.Objects; | |||
import java.util.concurrent.TimeUnit; | |||
@Service | |||
public class UserUploadManager extends AbstractOrderManager<UserUploadRequest> { | |||
@@ -47,6 +45,8 @@ public class UserUploadManager extends AbstractOrderManager<UserUploadRequest> { | |||
@Autowired | |||
private RegisterNoCodeManager registerNoCodeManager; | |||
@Autowired | |||
private AuthManager authManager; | |||
public UserUploadManager() { | |||
super(DataType.USER_UPLOAD); | |||
} | |||
@@ -65,6 +65,17 @@ public class UserUploadManager extends AbstractOrderManager<UserUploadRequest> { | |||
@Override | |||
protected void businessValidateInternal(ErrorMsgBuilder builder, UserUploadRequest request, ServiceLogEvent event, | |||
Map<String, Object> dataStream) throws ServiceHandleException { | |||
String lockKey = MyFinals.VEHICLE_LOCK_KEY + request.getOrderNo(); | |||
lock = redissonClient.getLock(lockKey); | |||
boolean tryLock = false; | |||
try { | |||
tryLock = lock.tryLock(2, 30, TimeUnit.SECONDS); | |||
} catch (InterruptedException e) { | |||
logger.error("", e); | |||
} | |||
if (!tryLock) { | |||
throw newBusinessException("用户信息重复上传!"); | |||
} | |||
// 校验订单 | |||
IssueOrderinfo order = checkOrder(request.getOrderNo()); | |||
if (!IssueOrderStatus.NORMAL.equals(order.getOrderStatus())) { | |||
@@ -87,14 +98,72 @@ public class UserUploadManager extends AbstractOrderManager<UserUploadRequest> { | |||
// 判断手机号账号情况 | |||
String mobile = request.getMobile(); | |||
String idNum = request.getUserIdNum(); | |||
if (!UserType.PERSONAL_USER.equals(order.getUserType())){ | |||
mobile = request.getAgentTel(); | |||
idNum = request.getAgentIdNum(); | |||
} | |||
AccountInfo accountInfo = accountInfoRepo.findByMobile(mobile); | |||
throwBisExceptionOn(accountInfo!=null && hasText(accountInfo.getIdNum())&&!idNum.equals(accountInfo.getIdNum()), "手机号已绑定其他证件号码"); | |||
dataStream.put(ACCOUNT, accountInfo); | |||
dataStream.put(ORDER, order); | |||
} | |||
@Override | |||
protected void persistInternal(UserUploadRequest request, ServiceLogEvent event, | |||
Map<String, Object> dataStream) throws ServiceHandleException { | |||
// 注册用户 | |||
registerUser(request, dataStream); | |||
// 保存基础用户 | |||
QtkCustomerInfo customerInfo = saveCustomerInfo(request); | |||
// 保存订单 | |||
IssueOrderinfo order = updateOrder(customerInfo, request, dataStream); | |||
// 保存办理记录日志 | |||
// String openId = hasText(request.getOpenId()) ? request.getOpenId() : "-1"; | |||
// bizServiceLog(openId, ServiceType.USERINFORMATIONCHANGE, order, order.getCustomerId()); | |||
// 操作日志 | |||
// persistOperateLog(OperateType.ISSUE_ORDER_USER_UPLOAD, order.getOrderNo(), request, openId, | |||
// order.getCustomerId()); | |||
dataStream.put(ORDER, order); | |||
dataStream.put(CUSTOMER_INFO, customerInfo); | |||
} | |||
private void registerUser(UserUploadRequest request,Map<String, Object> dataStream) throws ServiceHandleException { | |||
IssueOrderinfo order = (IssueOrderinfo)dataStream.get(ORDER); | |||
AccountInfo accountInfo = (AccountInfo) dataStream.get(ACCOUNT); | |||
LocalDate vld = checkIdNumVld(request); | |||
// 判断手机号账号情况 | |||
String mobile = request.getMobile(); | |||
String idNum = request.getUserIdNum(); | |||
String name = request.getUserName(); | |||
IdType idType = IdType.findByCode(request.getUserIdType()); | |||
String userPosImgUrl = request.getUserPosImgUrl();// 用户证件正面照片地址 | |||
String userNegImgUrl = request.getUserNegImgUrl();// 用户证件反面照片地址 | |||
String userAddress = request.getUserAddress(); | |||
if (!UserType.PERSONAL_USER.equals(order.getUserType())) { | |||
mobile = request.getAgentTel(); | |||
idNum = request.getAgentIdNum(); | |||
name = request.getAgentName(); | |||
idType = IdType.findByCode(request.getAgentIdType()); | |||
userPosImgUrl = request.getAgentPosImgUrl(); | |||
userNegImgUrl = request.getAgentNegImgUrl(); | |||
userAddress = request.getAgentAddress(); | |||
} | |||
//有账户没有实名认证过的 | |||
if (accountInfo != null && !hasText(accountInfo.getIdNum())){ | |||
// throw newBusinessException("此手机号(账号)需要实名认证,登录小程序进行实名认证"); | |||
AuthRequest authRequest = new AuthRequest(); | |||
authRequest.setLoginSource(SourceType.SERVICE_HALL);//为了调接口通过,这里写死 | |||
authRequest.setOpenId(accountInfo.getOpenId()); | |||
authRequest.setIdNum(idNum); | |||
authRequest.setIdType(idType); | |||
authRequest.setUserName(name); | |||
authRequest.setGender(Gender.UNKOWN); | |||
authRequest.setUserIdImgUrl(userPosImgUrl); | |||
authRequest.setUserIdBackImgUrl(userNegImgUrl); | |||
authRequest.setExpireDate(vld); | |||
authRequest.setAddress(userAddress); | |||
authManager.serviceHandle(authRequest); | |||
} | |||
AccountInfo accountInfo = accountInfoRepo.findByMobile(mobile); | |||
throwBisExceptionOn(accountInfo!=null && !accountInfo.getIdNum().equals(idNum), "手机号已绑定其他证件号码"); | |||
// 注册用户 | |||
if (accountInfo == null) { | |||
RegisterNoCodeRequest registerReq = new RegisterNoCodeRequest(); | |||
@@ -113,25 +182,6 @@ public class UserUploadManager extends AbstractOrderManager<UserUploadRequest> { | |||
accountInfo = accountInfoRepo.findByMobile(mobile); | |||
if (accountInfo == null) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("注册用户失败"); | |||
} | |||
dataStream.put(ACCOUNT, accountInfo); | |||
dataStream.put(ORDER, order); | |||
} | |||
@Override | |||
protected void persistInternal(UserUploadRequest request, ServiceLogEvent event, | |||
Map<String, Object> dataStream) throws ServiceHandleException { | |||
// 保存基础用户 | |||
QtkCustomerInfo customerInfo = saveCustomerInfo(request); | |||
// 保存订单 | |||
IssueOrderinfo order = updateOrder(customerInfo, request, dataStream); | |||
// 保存办理记录日志 | |||
// String openId = hasText(request.getOpenId()) ? request.getOpenId() : "-1"; | |||
// bizServiceLog(openId, ServiceType.USERINFORMATIONCHANGE, order, order.getCustomerId()); | |||
// 操作日志 | |||
// persistOperateLog(OperateType.ISSUE_ORDER_USER_UPLOAD, order.getOrderNo(), request, openId, | |||
// order.getCustomerId()); | |||
dataStream.put(ORDER, order); | |||
dataStream.put(CUSTOMER_INFO, customerInfo); | |||
} | |||
////同步老库及YGZ上传,后面优化移到激活后 |
@@ -22,6 +22,7 @@ import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder; | |||
import cn.com.taiji.core.model.comm.protocol.valid.FormatValidateTools; | |||
import cn.com.taiji.ias.dict.DataType; | |||
import cn.com.taiji.ias.manager.audit.VerificationRuleManager; | |||
import cn.com.taiji.ias.model.MyFinals; | |||
import cn.com.taiji.ias.model.ServiceLogEvent; | |||
import cn.com.taiji.ias.model.issue.OrderVerificationModel; | |||
import org.jetbrains.annotations.NotNull; | |||
@@ -31,6 +32,7 @@ import org.springframework.stereotype.Service; | |||
import java.time.LocalDateTime; | |||
import java.util.Map; | |||
import java.util.Objects; | |||
import java.util.concurrent.TimeUnit; | |||
@Service | |||
public class VehicleUploadManager extends AbstractOrderManager<VehicleUploadRequest> { | |||
@@ -59,6 +61,17 @@ public class VehicleUploadManager extends AbstractOrderManager<VehicleUploadRequ | |||
@Override | |||
protected void businessValidateInternal(ErrorMsgBuilder builder, VehicleUploadRequest request, ServiceLogEvent event, | |||
Map<String, Object> dataStream) throws ServiceHandleException { | |||
String lockKey = MyFinals.VEHICLE_LOCK_KEY + request.getOrderNo(); | |||
lock = redissonClient.getLock(lockKey); | |||
boolean tryLock = false; | |||
try { | |||
tryLock = lock.tryLock(2, 30, TimeUnit.SECONDS); | |||
} catch (InterruptedException e) { | |||
logger.error("", e); | |||
} | |||
if (!tryLock) { | |||
throw newBusinessException("车辆信息重复上传!"); | |||
} | |||
// 校验订单 | |||
IssueOrderinfo order = checkOrder(request.getOrderNo()); | |||
// 验证渠道 |
@@ -29,6 +29,7 @@ public class AuthManager extends AbstractLoginManager implements LogManager<Auth | |||
public AuthResponse serviceHandle(AuthRequest request) throws ServiceHandleException { | |||
try { | |||
long begin = System.currentTimeMillis(); | |||
findAndValidStaff(findOpenIdByToken(request.getAccessToken()), request.getLoginSource()); | |||
String openId = request.getLoginSource() == SourceType.WEB || request.getLoginSource() == SourceType.SERVICE_HALL ? request.getOpenId() : findOpenIdByToken(request.getAccessToken()); | |||
AccountInfo accountInfo = accountInfoRepo.findByIdNumAndIdType(request.getIdNum(), request.getIdType()); | |||
if (accountInfo != null) | |||
@@ -46,7 +47,7 @@ public class AuthManager extends AbstractLoginManager implements LogManager<Auth | |||
byOpenId.setAddress(request.getAddress()); | |||
byOpenId.setUpdateTime(LocalDateTime.now()); | |||
//同步修改员工的姓名 | |||
Staff staff = findAndValidStaff(openId, request.getLoginSource()); | |||
Staff staff = staffRepo.findByOpenId(openId); | |||
if (staff != null) { | |||
staff.setStaffName(request.getUserName()); | |||
staffRepo.save(staff); |