|
|
@@ -448,9 +448,11 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
log.error("修改商城订单地址推送到聚水潭ERP失败,orderId: {}", fsStoreOrder.getId(), e);
|
|
|
}
|
|
|
|
|
|
+ FsStoreOrderScrm fsStoreOrderScrm=fsStoreOrderMapper.selectFsStoreOrderById(fsStoreOrder.getId());
|
|
|
+
|
|
|
//判断发货类型
|
|
|
- if(fsStoreOrder.getStatus() == 2 || fsStoreOrder.getStatus() == 3) {//待收货
|
|
|
- List<FsStoreOrderItemVO> scrmList = fsStoreOrderItemMapper.selectMyFsStoreOrderItemListByOrderId(fsStoreOrder.getId());
|
|
|
+ if(fsStoreOrderScrm.getStatus() == 2 || fsStoreOrderScrm.getStatus() == 3) {//待收货
|
|
|
+ List<FsStoreOrderItemVO> scrmList = fsStoreOrderItemMapper.selectMyFsStoreOrderItemListByOrderId(fsStoreOrderScrm.getId());
|
|
|
if (!scrmList.isEmpty()) {
|
|
|
List<Long> orderItemIds = scrmList.stream().map(FsStoreOrderItemVO::getItemId).collect(Collectors.toList());
|
|
|
//获取溯源码,进行回退
|
|
|
@@ -990,33 +992,35 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
}
|
|
|
fsStoreOrderItemMapper.insertFsStoreOrderItem(item);
|
|
|
|
|
|
- // ===================== 溯源码核心逻辑 ==================
|
|
|
- Integer buyCount = vo.getCartNum();
|
|
|
- Long productId = vo.getProductId();
|
|
|
- String productName = vo.getProductName();
|
|
|
+ if(checkProductCater(vo.getProductId())){
|
|
|
+ // ===================== 溯源码核心逻辑 ==================
|
|
|
+ Integer buyCount = vo.getCartNum();
|
|
|
+ Long productId = vo.getProductId();
|
|
|
+ String productName = vo.getProductName();
|
|
|
|
|
|
- if (buyCount <= 0) {
|
|
|
- throw new ServiceException("商品[" + productName + "]购买数量不能为0");
|
|
|
- }
|
|
|
+ if (buyCount <= 0) {
|
|
|
+ throw new ServiceException("商品[" + productName + "]购买数量不能为0");
|
|
|
+ }
|
|
|
|
|
|
- //查询并锁定未出库溯源码带行锁
|
|
|
- List<FsStoreVerifyCodeScrm> availableVerifyCodes = verifyCodeMapper.selectUnOutboundVerifyCodesWithLock(productId, buyCount);
|
|
|
- if (availableVerifyCodes == null || availableVerifyCodes.size() < buyCount) {
|
|
|
- String errorMsg = String.format("商品[%s]库存不足,需%s个,仅剩余%s个",
|
|
|
- productName, buyCount, (availableVerifyCodes == null ? 0 : availableVerifyCodes.size()));
|
|
|
- throw new ServiceException(errorMsg);
|
|
|
- }
|
|
|
+ //查询并锁定未出库溯源码带行锁
|
|
|
+ List<FsStoreVerifyCodeScrm> availableVerifyCodes = verifyCodeMapper.selectUnOutboundVerifyCodesWithLock(productId, buyCount);
|
|
|
+ if (availableVerifyCodes == null || availableVerifyCodes.size() < buyCount) {
|
|
|
+ String errorMsg = String.format("商品[%s]库存不足,需%s个,仅剩余%s个",
|
|
|
+ productName, buyCount, (availableVerifyCodes == null ? 0 : availableVerifyCodes.size()));
|
|
|
+ throw new ServiceException(errorMsg);
|
|
|
+ }
|
|
|
|
|
|
- for (FsStoreVerifyCodeScrm code : availableVerifyCodes) {
|
|
|
- code.setOutboundStatus(1L);
|
|
|
- code.setOrderId(storeOrder.getId());
|
|
|
- code.setOrderItemId(item.getItemId());
|
|
|
- code.setUpdateTime(new Date());
|
|
|
- }
|
|
|
- if (!availableVerifyCodes.isEmpty()) {
|
|
|
- verifyCodeService.updateBatchById(availableVerifyCodes);
|
|
|
+ for (FsStoreVerifyCodeScrm code : availableVerifyCodes) {
|
|
|
+ code.setOutboundStatus(1L);
|
|
|
+ code.setOrderId(storeOrder.getId());
|
|
|
+ code.setOrderItemId(item.getItemId());
|
|
|
+ code.setUpdateTime(new Date());
|
|
|
+ }
|
|
|
+ if (!availableVerifyCodes.isEmpty()) {
|
|
|
+ verifyCodeService.updateBatchById(availableVerifyCodes);
|
|
|
+ }
|
|
|
+ // ===================== 溯源码逻辑END =====================
|
|
|
}
|
|
|
- // ===================== 溯源码逻辑END =====================
|
|
|
listOrderItem.add(item);
|
|
|
}
|
|
|
if (listOrderItem.size() > 0) {
|
|
|
@@ -1044,19 +1048,17 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
if (config.getUnPayTime() != null && config.getUnPayTime() > 0) {
|
|
|
if(storeOrder.getIsPrescribe() != null && storeOrder.getIsPrescribe() == 1){//处方药72小时
|
|
|
config.setUnPayTime(4320);
|
|
|
- redisCache.setCacheObject(redisKey, storeOrder.getId(),4320, TimeUnit.MINUTES);
|
|
|
- }else {
|
|
|
- redisCache.setCacheObject(redisKey, storeOrder.getId(), config.getUnPayTime(), TimeUnit.MINUTES);
|
|
|
+// redisCache.setCacheObject(redisKey, storeOrder.getId(),4320, TimeUnit.MINUTES);
|
|
|
}
|
|
|
+// else {
|
|
|
+// redisCache.setCacheObject(redisKey, storeOrder.getId(), config.getUnPayTime(), TimeUnit.MINUTES);
|
|
|
+// }
|
|
|
} else {
|
|
|
if(storeOrder.getIsPrescribe() != null && storeOrder.getIsPrescribe() == 1){//处方药
|
|
|
if(config == null){
|
|
|
config = new StoreConfig();
|
|
|
}
|
|
|
config.setUnPayTime(4320);
|
|
|
- redisCache.setCacheObject(redisKey, storeOrder.getId(),4320, TimeUnit.MINUTES);
|
|
|
- }else {
|
|
|
- redisCache.setCacheObject(redisKey, storeOrder.getId(), 30, TimeUnit.MINUTES);
|
|
|
}
|
|
|
}
|
|
|
//添加支付到期时间
|
|
|
@@ -1185,33 +1187,36 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
item.setOrderId(order.getId());
|
|
|
fsStoreOrderItemMapper.insertFsStoreOrderItem(item);
|
|
|
|
|
|
- // ===================== 溯源码核心逻辑 ==================
|
|
|
- Integer buyCount = item.getNum();
|
|
|
- Long productId = item.getProductId();
|
|
|
- String productName = productMap.get(productId) == null ? "商品" : productMap.get(productId);
|
|
|
+ if(checkProductCater(item.getProductId())){
|
|
|
+ // ===================== 溯源码核心逻辑 ==================
|
|
|
+ Integer buyCount = item.getNum();
|
|
|
+ Long productId = item.getProductId();
|
|
|
+ String productName = productMap.get(productId) == null ? "商品" : productMap.get(productId);
|
|
|
|
|
|
- if (buyCount <= 0) {
|
|
|
- throw new ServiceException("商品[" + productName + "]购买数量不能为0");
|
|
|
- }
|
|
|
+ if (buyCount <= 0) {
|
|
|
+ throw new ServiceException("商品[" + productName + "]购买数量不能为0");
|
|
|
+ }
|
|
|
|
|
|
- //查询并锁定未出库溯源码带行锁
|
|
|
- List<FsStoreVerifyCodeScrm> availableVerifyCodes = verifyCodeMapper.selectUnOutboundVerifyCodesWithLock(productId, buyCount);
|
|
|
- if (availableVerifyCodes == null || availableVerifyCodes.size() < buyCount) {
|
|
|
- String errorMsg = String.format("商品[%s]库存不足",
|
|
|
- productName, buyCount, (availableVerifyCodes == null ? 0 : availableVerifyCodes.size()));
|
|
|
- throw new ServiceException(errorMsg);
|
|
|
- }
|
|
|
+ //查询并锁定未出库溯源码带行锁
|
|
|
+ List<FsStoreVerifyCodeScrm> availableVerifyCodes = verifyCodeMapper.selectUnOutboundVerifyCodesWithLock(productId, buyCount);
|
|
|
+ if (availableVerifyCodes == null || availableVerifyCodes.size() < buyCount) {
|
|
|
+ String errorMsg = String.format("商品[%s]库存不足",
|
|
|
+ productName, buyCount, (availableVerifyCodes == null ? 0 : availableVerifyCodes.size()));
|
|
|
+ throw new ServiceException(errorMsg);
|
|
|
+ }
|
|
|
|
|
|
- for (FsStoreVerifyCodeScrm code : availableVerifyCodes) {
|
|
|
- code.setOutboundStatus(1L);
|
|
|
- code.setOrderId(order.getId());
|
|
|
- code.setOrderItemId(item.getItemId());
|
|
|
- code.setUpdateTime(new Date());
|
|
|
- }
|
|
|
- if (!availableVerifyCodes.isEmpty()) {
|
|
|
- verifyCodeService.updateBatchById(availableVerifyCodes);
|
|
|
+ for (FsStoreVerifyCodeScrm code : availableVerifyCodes) {
|
|
|
+ code.setOutboundStatus(1L);
|
|
|
+ code.setOrderId(order.getId());
|
|
|
+ code.setOrderItemId(item.getItemId());
|
|
|
+ code.setUpdateTime(new Date());
|
|
|
+ }
|
|
|
+ if (!availableVerifyCodes.isEmpty()) {
|
|
|
+ verifyCodeService.updateBatchById(availableVerifyCodes);
|
|
|
+ }
|
|
|
+ // ===================== 溯源码逻辑END =====================
|
|
|
}
|
|
|
- // ===================== 溯源码逻辑END =====================
|
|
|
+
|
|
|
}
|
|
|
fsStoreOrderLogsService.create(order.getId(), FsStoreOrderLogEnum.CREATE_ORDER.getValue(),
|
|
|
FsStoreOrderLogEnum.CREATE_ORDER.getDesc());
|
|
|
@@ -1776,20 +1781,21 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
if (config.getUnPayTime() != null && config.getUnPayTime() > 0) {
|
|
|
if(storeOrder.getIsPrescribe() != null && storeOrder.getIsPrescribe() == 1){//处方药72小时
|
|
|
config.setUnPayTime(4320);
|
|
|
- redisCache.setCacheObject(redisKey, storeOrder.getId(),4320, TimeUnit.MINUTES);
|
|
|
- }else {
|
|
|
- redisCache.setCacheObject(redisKey, storeOrder.getId(), config.getUnPayTime(), TimeUnit.MINUTES);
|
|
|
+// redisCache.setCacheObject(redisKey, storeOrder.getId(),4320, TimeUnit.MINUTES);
|
|
|
}
|
|
|
+// else {
|
|
|
+// redisCache.setCacheObject(redisKey, storeOrder.getId(), config.getUnPayTime(), TimeUnit.MINUTES);
|
|
|
+// }
|
|
|
} else {
|
|
|
if(storeOrder.getIsPrescribe() != null && storeOrder.getIsPrescribe() == 1){//处方药
|
|
|
if(config == null){
|
|
|
config = new StoreConfig();
|
|
|
}
|
|
|
config.setUnPayTime(4320);
|
|
|
- redisCache.setCacheObject(redisKey, storeOrder.getId(),4320, TimeUnit.MINUTES);
|
|
|
- }else {
|
|
|
- redisCache.setCacheObject(redisKey, storeOrder.getId(), 30, TimeUnit.MINUTES);
|
|
|
}
|
|
|
+// else {
|
|
|
+// redisCache.setCacheObject(redisKey, storeOrder.getId(), 30, TimeUnit.MINUTES);
|
|
|
+// }
|
|
|
}
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
calendar.setTime(storeOrder.getCreateTime());
|
|
|
@@ -2946,9 +2952,27 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
private void refundStock(FsStoreOrderScrm order) {
|
|
|
//获取订单下的商品
|
|
|
List<FsStoreOrderItemVO> orderItemVOS = fsStoreOrderItemMapper.selectFsStoreOrderItemListByOrderId(order.getId());
|
|
|
+ List<Long> itemIds = new ArrayList<>();
|
|
|
for (FsStoreOrderItemVO vo : orderItemVOS) {
|
|
|
- productService.incProductStock(vo.getNum(), vo.getProductId()
|
|
|
- , vo.getProductAttrValueId());
|
|
|
+ if (checkProductCater(vo.getProductId())) {
|
|
|
+ itemIds.add(vo.getItemId());
|
|
|
+ }else {
|
|
|
+ productService.incProductStock(vo.getNum(), vo.getProductId()
|
|
|
+ , vo.getProductAttrValueId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(itemIds)) {
|
|
|
+ List<FsStoreVerifyCodeScrm> codes = verifyCodeScrmMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<FsStoreVerifyCodeScrm>()
|
|
|
+ .eq(FsStoreVerifyCodeScrm::getOrderId, order.getId())
|
|
|
+ .in(FsStoreVerifyCodeScrm::getOrderItemId, itemIds)
|
|
|
+ .eq(FsStoreVerifyCodeScrm::getIsDel, "0")
|
|
|
+ );
|
|
|
+ if (!com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(codes)) {
|
|
|
+ verifyCodeScrmMapper.updateOutboundStatus(codes);
|
|
|
+ log.info("订单{}共更新{}个核销码关联状态", order.getId(), codes.size());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
}
|
|
|
@@ -4960,9 +4984,14 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
//检测库存
|
|
|
//如果是美乳产品,发武汉仓库
|
|
|
Integer meiruCount = 0;
|
|
|
-
|
|
|
+ Map<Long,Boolean> checkMap = new HashMap<>();
|
|
|
for (FsStoreCartScrmQueryVO cart : carts) {
|
|
|
- cartService.checkProductStocks(cart.getProductId(), cart.getProductAttrValueId(), cart.getCartNum());
|
|
|
+ if(checkProductCater(cart.getProductId())){
|
|
|
+ checkMap.put(cart.getProductId(),true);
|
|
|
+ }else {
|
|
|
+ checkMap.put(cart.getProductId(),false);
|
|
|
+ cartService.checkProductStocks(cart.getProductId(), cart.getProductAttrValueId(), cart.getCartNum());
|
|
|
+ }
|
|
|
totalNum += cart.getCartNum();
|
|
|
integral = NumberUtil.add(integral,
|
|
|
NumberUtil.mul(cart.getCartNum(), cart.getIntegral()));
|
|
|
@@ -5125,33 +5154,35 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
}
|
|
|
fsStoreOrderItemMapper.insertFsStoreOrderItem(item);
|
|
|
|
|
|
- // ===================== 溯源码核心逻辑 ==================
|
|
|
- Integer buyCount = vo.getCartNum();
|
|
|
- Long productId = vo.getProductId();
|
|
|
- String productName = vo.getProductName();
|
|
|
+ if(checkMap.get(vo.getProductId())){
|
|
|
+ // ===================== 溯源码核心逻辑 ==================
|
|
|
+ Integer buyCount = vo.getCartNum();
|
|
|
+ Long productId = vo.getProductId();
|
|
|
+ String productName = vo.getProductName();
|
|
|
|
|
|
- if (buyCount <= 0) {
|
|
|
- throw new ServiceException("商品[" + productName + "]购买数量不能为0");
|
|
|
- }
|
|
|
+ if (buyCount <= 0) {
|
|
|
+ throw new ServiceException("商品[" + productName + "]购买数量不能为0");
|
|
|
+ }
|
|
|
|
|
|
- //查询并锁定未出库溯源码带行锁
|
|
|
- List<FsStoreVerifyCodeScrm> availableVerifyCodes = verifyCodeMapper.selectUnOutboundVerifyCodesWithLock(productId, buyCount);
|
|
|
- if (availableVerifyCodes == null || availableVerifyCodes.size() < buyCount) {
|
|
|
- String errorMsg = String.format("商品[%s]库存不足",
|
|
|
- productName, buyCount, (availableVerifyCodes == null ? 0 : availableVerifyCodes.size()));
|
|
|
- throw new ServiceException(errorMsg);
|
|
|
- }
|
|
|
+ //查询并锁定未出库溯源码带行锁
|
|
|
+ List<FsStoreVerifyCodeScrm> availableVerifyCodes = verifyCodeMapper.selectUnOutboundVerifyCodesWithLock(productId, buyCount);
|
|
|
+ if (availableVerifyCodes == null || availableVerifyCodes.size() < buyCount) {
|
|
|
+ String errorMsg = String.format("商品[%s]库存不足",
|
|
|
+ productName, buyCount, (availableVerifyCodes == null ? 0 : availableVerifyCodes.size()));
|
|
|
+ throw new ServiceException(errorMsg);
|
|
|
+ }
|
|
|
|
|
|
- for (FsStoreVerifyCodeScrm code : availableVerifyCodes) {
|
|
|
- code.setOutboundStatus(1L);
|
|
|
- code.setOrderId(storeOrder.getId());
|
|
|
- code.setOrderItemId(item.getItemId());
|
|
|
- code.setUpdateTime(new Date());
|
|
|
- }
|
|
|
- if (!availableVerifyCodes.isEmpty()) {
|
|
|
- verifyCodeService.updateBatchById(availableVerifyCodes);
|
|
|
+ for (FsStoreVerifyCodeScrm code : availableVerifyCodes) {
|
|
|
+ code.setOutboundStatus(1L);
|
|
|
+ code.setOrderId(storeOrder.getId());
|
|
|
+ code.setOrderItemId(item.getItemId());
|
|
|
+ code.setUpdateTime(new Date());
|
|
|
+ }
|
|
|
+ if (!availableVerifyCodes.isEmpty()) {
|
|
|
+ verifyCodeService.updateBatchById(availableVerifyCodes);
|
|
|
+ }
|
|
|
+ // ===================== 溯源码逻辑END =====================
|
|
|
}
|
|
|
- // ===================== 溯源码逻辑END =====================
|
|
|
listOrderItem.add(item);
|
|
|
}
|
|
|
if (listOrderItem.size() > 0) {
|
|
|
@@ -5179,20 +5210,22 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
if (config.getUnPayTime() != null && config.getUnPayTime() > 0) {
|
|
|
if(storeOrder.getIsPrescribe() != null && storeOrder.getIsPrescribe() == 1){//处方药72小时
|
|
|
config.setUnPayTime(4320);
|
|
|
- redisCache.setCacheObject(redisKey, storeOrder.getId(),4320, TimeUnit.MINUTES);
|
|
|
- }else {
|
|
|
- redisCache.setCacheObject(redisKey, storeOrder.getId(), config.getUnPayTime(), TimeUnit.MINUTES);
|
|
|
+// redisCache.setCacheObject(redisKey, storeOrder.getId(),4320, TimeUnit.MINUTES);//
|
|
|
}
|
|
|
+// else {
|
|
|
+// redisCache.setCacheObject(redisKey, storeOrder.getId(), config.getUnPayTime(), TimeUnit.MINUTES);
|
|
|
+// }
|
|
|
} else {
|
|
|
if(storeOrder.getIsPrescribe() != null && storeOrder.getIsPrescribe() == 1){//处方药
|
|
|
if(config == null){
|
|
|
config = new com.fs.store.config.StoreConfig();
|
|
|
}
|
|
|
config.setUnPayTime(4320);
|
|
|
- redisCache.setCacheObject(redisKey, storeOrder.getId(),4320, TimeUnit.MINUTES);
|
|
|
- }else {
|
|
|
- redisCache.setCacheObject(redisKey, storeOrder.getId(), 30, TimeUnit.MINUTES);
|
|
|
+// redisCache.setCacheObject(redisKey, storeOrder.getId(),4320, TimeUnit.MINUTES);
|
|
|
}
|
|
|
+// else {
|
|
|
+// redisCache.setCacheObject(redisKey, storeOrder.getId(), 30, TimeUnit.MINUTES);
|
|
|
+// }
|
|
|
}
|
|
|
//添加支付到期时间
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
@@ -5858,4 +5891,48 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void cancelOrderReuse(FsStoreOrderScrm order) {
|
|
|
+ if (order.getStatus() == OrderInfoEnum.STATUS_0.getValue()) {
|
|
|
+ if (!StringUtils.isEmpty(order.getExtendOrderId())) {
|
|
|
+ redisCache.deleteObject(DELIVERY + ":" + order.getExtendOrderId());
|
|
|
+ }
|
|
|
+ //退回积分
|
|
|
+ this.refundIntegral(order);
|
|
|
+ //退回优惠券
|
|
|
+ this.refundCoupon(order);
|
|
|
+ //退回库存
|
|
|
+ this.refundStock(order);
|
|
|
+ fsStoreOrderMapper.cancelOrder(order.getId());
|
|
|
+ //添加记录
|
|
|
+ orderStatusService.create(order.getId(), OrderLogEnum.CANCEL_ORDER.getValue(),
|
|
|
+ OrderLogEnum.CANCEL_ORDER.getDesc());
|
|
|
+// if(order.getPaid()==1){
|
|
|
+// //更新OMS
|
|
|
+// ErpRefundUpdateRequest request=new ErpRefundUpdateRequest();
|
|
|
+// request.setTid(order.getOrderCode());
|
|
|
+// request.setOid(order.getOrderCode());
|
|
|
+// request.setRefund_state(1);
|
|
|
+// erpOrderService.refundUpdate(request);
|
|
|
+// }
|
|
|
+ TemplateBean templateBean = TemplateBean.builder()
|
|
|
+ .orderId(order.getId().toString())
|
|
|
+ .orderCode(order.getOrderCode().toString())
|
|
|
+ .remark("您的订单已取消")
|
|
|
+ .userId(order.getUserId())
|
|
|
+ .templateType(TemplateListenEnum.TYPE_1.getValue())
|
|
|
+ .build();
|
|
|
+ publisher.publishEvent(new TemplateEvent(this, templateBean));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //校验商品类型
|
|
|
+ public boolean checkProductCater(Long productId){
|
|
|
+ FsStoreProductScrm product = fsStoreProductMapper.selectFsStoreProductById(productId);
|
|
|
+ if(product.getCateId().equals(202L) || product.getCateId().equals(232L) || product.getCateId().equals(201L) || product.getCateId().equals(233L)){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
}
|