Ver Fonte

1、调整订单列表展示数据
2、调整null指针问题
3、调整0元购问题

yys há 1 mês atrás
pai
commit
0d2b843f17

+ 1 - 18
fs-admin/src/main/java/com/fs/his/controller/FsStoreOrderController.java

@@ -163,26 +163,9 @@ public class FsStoreOrderController extends BaseController
         }
 
         List<FsStoreOrderListVO> list;
-        if (StringUtils.isNotBlank(fsStoreOrder.getErpAccount())){
-            //金牛erp查询
-            list = fsStoreOrderService.selectFsStoreOrderListVOByErpAccount(fsStoreOrder);
-        } else {
-            list = fsStoreOrderService.selectFsStoreOrderListVO(fsStoreOrder);
-        }
+        list = fsStoreOrderService.selectFsStoreOrderListVO(fsStoreOrder);
         //金牛需求 区别其他项目 status = 6 (金牛代服管家) ,其他项目请避免使用订单状态status = 6
         TableDataInfo dataTable = getDataTable(list);
-        if ("金牛明医".equals(cloudHostProper.getCompanyName())){
-            if (fsStoreOrder.getStatus() !=null && fsStoreOrder.getStatus() != 1){
-                list.forEach(fsStoreOrderListVO->{
-                    //查询顺丰代服账号
-                    FsStoreOrderDf df = fsStoreOrderDfService.selectFsStoreOrderDfByOrderId(fsStoreOrderListVO.getOrderId());
-                    if (df != null){
-                        fsStoreOrderListVO.setErpAccount(df.getLoginAccount());
-                    }
-                });
-            }
-            dataTable.setMsg("jnmy");
-        }
 
         BeanUtils.copyProperties(dataTable, vo);
         if (dataTable.getTotal()>0){

+ 4 - 3
fs-service/src/main/java/com/fs/course/service/impl/FsUserVipOrderServiceImpl.java

@@ -24,6 +24,7 @@ import com.fs.common.exception.CustomException;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.StringUtils;
+import com.fs.common.utils.spring.SpringUtils;
 import com.fs.common.utils.ip.IpUtils;
 import com.fs.core.config.WxPayProperties;
 import com.fs.core.utils.OrderCodeUtils;
@@ -257,7 +258,7 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
         }
 
         if (order.getPayMoney().compareTo(new BigDecimal(0)) <= 0) {
-            this.payConfirm(order.getOrderCode(),"","","",2,null,null);
+            SpringUtils.getAopProxy(this).payConfirm(order.getOrderCode(),"","","",2,null,null);
             handleVipPurchaseCallback(param.getUserId(),order.getPackageId(),order.getOrderId());
             return R.ok().put("isPay",1);
         }
@@ -474,7 +475,7 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
 
         if(user!=null&& StringUtils.isNotEmpty(openId)) {
             if (order.getPayMoney().compareTo(new BigDecimal(0)) == 0) {
-                this.payConfirm(order.getOrderCode(), "", "", "", 2,null,null);
+                SpringUtils.getAopProxy(this).payConfirm(order.getOrderCode(), "", "", "", 2,null,null);
                 return R.ok().put("isPay", 1);
             } else {
                 String payCode =  OrderCodeUtils.getOrderSn();
@@ -705,7 +706,7 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
                 }
             }
             else{
-                this.payConfirm(order.getOrderCode(),"","","",2,null,null);
+                SpringUtils.getAopProxy(this).payConfirm(order.getOrderCode(),"","","",2,null,null);
                 return R.ok().put("isPay",1);
             }
         }

+ 44 - 35
fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java

@@ -1055,7 +1055,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
         order.setItemJson(JSONUtil.toJsonStr(items));
         order.setPayTime(new Date());
 
-        if (packageOrder.getCycle() >= followRate) {
+        if (followRate != null && packageOrder.getCycle() != null && packageOrder.getCycle() >= followRate) {
             Calendar calendar = Calendar.getInstance();
             calendar.setTime(new Date());
             calendar.add(Calendar.DAY_OF_MONTH, followRate);
@@ -1073,40 +1073,49 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
                 //信息采集 发送药师im
                 doctorSendIm(packageOrder,order.getOrderId());
             }
-            if (packageOrder.getCycle() >= followRate) {
-                FsFollow fsFollow = new FsFollow();
-                fsFollow.setTempId(FollowTempId + 0L);
-                fsFollow.setPatientPhone(order.getUserPhone());
-                if (packageOrder.getPatientJson() != null && packageOrder.getPatientJson() != "") {
-                    FsPackagePatientDTO patJson = JSON.parseObject(packageOrder.getPatientJson(), FsPackagePatientDTO.class);
-                    fsFollow.setPatientName(patJson.getPatientName());
-                    fsFollow.setPatientId(patJson.getPatientId() + 0L);
-                }
-                fsFollow.setUserId(packageOrder.getUserId());
-                fsFollow.setDoctorId(order.getFollowDoctorId());
-                fsFollow.setTotalNum(1);
-                fsFollow.setStoreOrderId(order.getOrderId());
-                fsFollow.setCompanyId(packageOrder.getCompanyId());
-                fsFollow.setCompanyUserId(packageOrder.getCompanyUserId());
-                fsFollow.setDeptId(packageOrder.getDeptId());
-                fsFollow.setNum(1);
-                fsFollow.setInquiryOrderId(packageOrder.getInquiryOrderId());
-                fsFollow.setPlanTime(DateUtils.getNowDate());
-                fsFollow.setPushStatus(1);
-                fsFollow.setWriteStatus(0);
+            if (followRate != null && packageOrder.getCycle() != null && packageOrder.getCycle() >= followRate
+                    && FollowTempId != null) {
                 FsFollowTemp fsFollowTemp = fsFollowTempMapper.selectFsFollowTempByTempId(FollowTempId + 0L);
-                fsFollow.setFormJson(fsFollowTemp.getFormJson());
-                fsFollow.setCreateTime(DateUtils.getNowDate());
-                int i = fsFollowMapper.insertFsFollow(fsFollow);
-                TemplateBean templateBean = TemplateBean.builder()
-                        .followId(fsFollow.getFollowId().toString())
-                        .orderId(order.getOrderId().toString())
-                        .title("您收到一个随访单")
-                        .remark("您有一个随访单待填写")
-                        .uid(order.getUserId())
-                        .templateType(TemplateListenEnum.TYPE_4.getValue())
-                        .build();
-                publisher.publishEvent(new TemplateEvent(this, templateBean));
+                if (fsFollowTemp != null) {
+                    FsFollow fsFollow = new FsFollow();
+                    fsFollow.setTempId(FollowTempId + 0L);
+                    fsFollow.setPatientPhone(order.getUserPhone());
+                    if (packageOrder.getPatientJson() != null && packageOrder.getPatientJson() != "") {
+                        FsPackagePatientDTO patJson = JSON.parseObject(packageOrder.getPatientJson(), FsPackagePatientDTO.class);
+                        if (patJson != null) {
+                            fsFollow.setPatientName(patJson.getPatientName());
+                            if (patJson.getPatientId() != null) {
+                                fsFollow.setPatientId(patJson.getPatientId() + 0L);
+                            }
+                        }
+                    }
+                    fsFollow.setUserId(packageOrder.getUserId());
+                    fsFollow.setDoctorId(order.getFollowDoctorId());
+                    fsFollow.setTotalNum(1);
+                    fsFollow.setStoreOrderId(order.getOrderId());
+                    fsFollow.setCompanyId(packageOrder.getCompanyId());
+                    fsFollow.setCompanyUserId(packageOrder.getCompanyUserId());
+                    fsFollow.setDeptId(packageOrder.getDeptId());
+                    fsFollow.setNum(1);
+                    fsFollow.setInquiryOrderId(packageOrder.getInquiryOrderId());
+                    fsFollow.setPlanTime(DateUtils.getNowDate());
+                    fsFollow.setPushStatus(1);
+                    fsFollow.setWriteStatus(0);
+                    fsFollow.setFormJson(fsFollowTemp.getFormJson());
+                    fsFollow.setCreateTime(DateUtils.getNowDate());
+                    fsFollowMapper.insertFsFollow(fsFollow);
+                    TemplateBean templateBean = TemplateBean.builder()
+                            .followId(fsFollow.getFollowId().toString())
+                            .orderId(order.getOrderId().toString())
+                            .title("您收到一个随访单")
+                            .remark("您有一个随访单待填写")
+                            .uid(order.getUserId())
+                            .templateType(TemplateListenEnum.TYPE_4.getValue())
+                            .build();
+                    publisher.publishEvent(new TemplateEvent(this, templateBean));
+                } else {
+                    log.warn("随访模板不存在,跳过创建随访单,tempId={}", FollowTempId);
+                }
             }
             if (order.getOrderId() == null) {
                 throw new CustomException("订单id为空" + order);
@@ -4566,7 +4575,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
         order.setIsPay(0);
         order.setItemJson(JSONUtil.toJsonStr(items));
 
-        if (packageOrder.getCycle() >= followRate) {
+        if (followRate != null && packageOrder.getCycle() != null && packageOrder.getCycle() >= followRate) {
             Calendar calendar = Calendar.getInstance();
             calendar.setTime(new Date());
             calendar.add(Calendar.DAY_OF_MONTH, followRate);

+ 28 - 0
fs-service/src/main/java/com/fs/live/service/impl/LiveCouponServiceImpl.java

@@ -387,6 +387,12 @@ public class LiveCouponServiceImpl implements ILiveCouponService
     @Override
     public R curCoupon(CouponPO coupon) {
         List<LiveCouponUser> list = liveCouponUserService.curCoupon(coupon);
+        Date now = DateUtils.getNowDate();
+        list.removeIf(item -> {
+            expireCouponIfNeeded(item, now);
+            return coupon.getStatus() != null && coupon.getStatus() == 0
+                    && item.getStatus() != null && item.getStatus() == 2;
+        });
         return R.ok().put("data", list);
     }
 
@@ -478,6 +484,28 @@ public class LiveCouponServiceImpl implements ILiveCouponService
         return R.ok("核销成功").put("data", detail);
     }
 
+    /**
+     * 未核销且已过期的优惠券同步为已过期(与 verifyCoupon 逻辑一致)
+     */
+    private void expireCouponIfNeeded(LiveCouponUser couponUser, Date now) {
+        if (couponUser == null) {
+            return;
+        }
+        if (couponUser.getStatus() != null && couponUser.getStatus() != 0) {
+            return;
+        }
+        if (couponUser.getLimitTime() == null || !couponUser.getLimitTime().before(now)) {
+            return;
+        }
+        LiveCouponUser expired = new LiveCouponUser();
+        expired.setId(couponUser.getId());
+        expired.setStatus(2);
+        expired.setIsFail(0);
+        expired.setUpdateTime(now);
+        liveCouponUserService.updateLiveCouponUser(expired);
+        couponUser.setStatus(2);
+    }
+
     private void fillCouponStatusName(LiveCouponUserDetailVo detail) {
         if (detail == null || detail.getStatus() == null) {
             return;

+ 35 - 13
fs-service/src/main/java/com/fs/live/service/impl/LiveOrderServiceImpl.java

@@ -133,6 +133,7 @@ import org.apache.http.util.Asserts;
 import org.apache.rocketmq.spring.core.RocketMQTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.retry.annotation.Backoff;
 import org.springframework.retry.annotation.Recover;
@@ -169,6 +170,8 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
     private FsUserWxMapper fsUserWxMapper;
     @Autowired
     private RocketMQTemplate rocketMQTemplate;
+    @Value("${rocketmq.name-server:}")
+    private String rocketMqNameServer;
     @Autowired
     private FsCoursePlaySourceConfigMapper fsCoursePlaySourceConfigMapper;
 
@@ -3599,7 +3602,6 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
             throw new CustomException("小程序没有配置商户信息");
         }
         MerchantAppConfig merchantAppConfig = merchantAppConfigMapper.selectMerchantAppConfigById(fsCoursePlaySourceConfig.getMerchantConfigId());
-        FsPayConfig fsPayConfig = JSON.parseObject(merchantAppConfig.getDataJson(), FsPayConfig.class);
 
         String openId;
         String appId = param.getAppId();
@@ -4373,12 +4375,7 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
         Integer purchaseNum = Integer.parseInt(liveOrder.getTotalNum());
         checkPurchaseLimitForLiveOrder(userId, liveOrder.getProductId(), purchaseNum);
         LiveGoodsUploadMqVo vo = LiveGoodsUploadMqVo.builder().goodsId(goods.getGoodsId()).goodsNum(Integer.parseInt(liveOrder.getTotalNum())).build();
-        try {
-            log.info("订单提交MQ:{}", vo);
-            rocketMQTemplate.syncSend("live-goods-upload", JSON.toJSONString(vo));
-        }catch (Exception e){
-            log.error("更新库存失败!{}", vo, e);
-        }
+        deductLiveGoodsStock(vo);
         // 复制到商城订单
         FsStoreOrderScrm storeOrder = new FsStoreOrderScrm();
         copyLiveToStore(liveOrder, storeOrder);
@@ -4641,12 +4638,7 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
         Integer purchaseNum = Integer.parseInt(liveOrder.getTotalNum());
         checkPurchaseLimitForLiveOrder(userId, liveOrder.getProductId(), purchaseNum);
         LiveGoodsUploadMqVo vo = LiveGoodsUploadMqVo.builder().goodsId(goods.getGoodsId()).goodsNum(Integer.parseInt(liveOrder.getTotalNum())).build();
-        try {
-            log.info("订单提交MQ:{}", vo);
-            rocketMQTemplate.syncSend("live-goods-upload", JSON.toJSONString(vo));
-        }catch (Exception e){
-            log.error("更新库存失败!{}", vo, e);
-        }
+        deductLiveGoodsStock(vo);
         // 使用 deStockIncSale 方法处理库存和销量
 //        deStockIncSale(liveOrder.getProductId(), liveOrder.getAttrValueId(), purchaseNum);
         // 更新直播间库存
@@ -4974,6 +4966,36 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
      * @param productId 商品ID
      * @param num 购买数量
      */
+    /**
+     * 扣减直播间商品库存:优先 MQ 异步入库,失败或未配置时降级为本地扣减。
+     */
+    private void deductLiveGoodsStock(LiveGoodsUploadMqVo vo) {
+        if (StringUtils.isNotEmpty(rocketMqNameServer)) {
+            try {
+                log.info("订单提交MQ:{}", vo);
+                rocketMQTemplate.syncSend("live-goods-upload", JSON.toJSONString(vo));
+                return;
+            } catch (Exception e) {
+                log.warn("MQ更新库存失败,降级为本地扣减. vo={}", vo, e);
+            }
+        } else {
+            log.warn("RocketMQ未配置 name-server,使用本地扣减库存. vo={}", vo);
+        }
+        deductLiveGoodsStockLocal(vo);
+    }
+
+    /**
+     * 与 fs-live-mq 消费者一致的本地库存扣减。
+     */
+    private void deductLiveGoodsStockLocal(LiveGoodsUploadMqVo vo) {
+        int affected = liveGoodsMapper.updateStock(vo.getGoodsId(), vo.getGoodsNum());
+        if (affected > 0) {
+            log.info("本地扣减库存成功,goodsId={}, goodsNum={}", vo.getGoodsId(), vo.getGoodsNum());
+        } else {
+            log.error("本地扣减库存失败,goodsId={}, goodsNum={}", vo.getGoodsId(), vo.getGoodsNum());
+        }
+    }
+
     /**
      * 减库存加销量(直播订单)
      */