Przeglądaj źródła

适配多运单号

xdd 1 miesiąc temu
rodzic
commit
bebfab1b75

+ 146 - 142
fs-admin/src/main/java/com/fs/task/StoreTask.java

@@ -50,6 +50,8 @@ import com.fs.store.vo.FsStoreOrderVO;
 import com.fs.store.vo.FsUserShareVO;
 import com.fs.system.service.ISysConfigService;
 import com.sun.media.sound.SF2GlobalRegion;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.ibatis.annotations.Param;
 import org.slf4j.Logger;
@@ -75,9 +77,8 @@ import static com.fs.store.constants.StoreConstants.DELIVERY;
  * @author fs
  */
 @Component("storeTask")
-public class StoreTask
-{
-    Logger logger =  LoggerFactory.getLogger(StoreTask.class);
+public class StoreTask {
+    Logger logger = LoggerFactory.getLogger(StoreTask.class);
     @Autowired
     private RedisTemplate redisTemplate;
     @Autowired
@@ -115,11 +116,10 @@ public class StoreTask
     @Autowired
     private ApplicationEventPublisher publisher;
 
-    public void tt()
-    {
-        ErpGoodsStockQueryRequert request=new ErpGoodsStockQueryRequert();
+    public void tt() {
+        ErpGoodsStockQueryRequert request = new ErpGoodsStockQueryRequert();
         request.setBarcode("105201");
-        ErpGoodsStockQueryResponse response=goodsService.getGoodsStock(request);
+        ErpGoodsStockQueryResponse response = goodsService.getGoodsStock(request);
         ErpGoodsQueryRequert erpGoodsQueryRequert = new ErpGoodsQueryRequert();
         erpGoodsQueryRequert.setCode("105201");
         ErpGoodsQueryResponse goods = goodsService.getGoods(erpGoodsQueryRequert);
@@ -129,26 +129,33 @@ public class StoreTask
     }
 
     //每5分钟执行一次
-    public void deliveryOp()
-    {
-        Set<String> orders=redisTemplate.keys(DELIVERY+":*");
-        for(String extndOrderId:orders){
-            String orderCode=(String)redisTemplate.opsForValue().get(extndOrderId);
-            ErpOrderQueryRequert request=new ErpOrderQueryRequert();
-            String[] extendOrder=extndOrderId.split(":");
+    public void deliveryOp() {
+        Set<String> orders = redisTemplate.keys(DELIVERY + ":*");
+        for (String extndOrderId : orders) {
+            String orderCode = (String) redisTemplate.opsForValue().get(extndOrderId);
+            ErpOrderQueryRequert request = new ErpOrderQueryRequert();
+            String[] extendOrder = extndOrderId.split(":");
             request.setCode(extendOrder[1]);
-            ErpOrderQueryResponse response=erpOrderService.getOrder(request);
-            if(response.getOrders()!=null&&response.getOrders().size()>0){
-                for(ErpOrderQuery orderQuery : response.getOrders()){
-                    if(orderQuery.getDeliverys()!=null&&orderQuery.getDeliverys().size()>0){
-                        for(ErpDeliverys delivery:orderQuery.getDeliverys()){
-                            if(delivery.getDelivery()&&StringUtils.isNotEmpty(delivery.getMail_no())){
-                                //更新商订单状态 删除REDIS
-                                orderService.deliveryOrder(orderCode,delivery.getMail_no(),delivery.getExpress_code(),delivery.getExpress_name());
-                                redisCache.deleteObject(DELIVERY+":"+extendOrder[1]);
+            ErpOrderQueryResponse response = erpOrderService.getOrder(request);
+            if (CollectionUtils.isNotEmpty(response.getOrders())) {
+                for (ErpOrderQuery orderQuery : response.getOrders()) {
+                    if (CollectionUtils.isNotEmpty(orderQuery.getDeliverys())) {
+                        // 部分发货或者全部发货
+                        if (ObjectUtils.equals(orderQuery.getDelivery_state(), 1) || ObjectUtils.equals(orderQuery.getDelivery_state(), 2)) {
+                            // 订单状态变更
+                            FsStoreOrder order = fsStoreOrderMapper.selectFsStoreOrderByOrderCode(orderCode);
+                            orderStatusService.create(order.getId(), OrderLogEnum.DELIVERY_GOODS.getValue(),
+                                    OrderLogEnum.DELIVERY_GOODS.getDesc());
+                            //更新商订单状态 删除REDIS
+                            redisCache.deleteObject(DELIVERY + ":" + extendOrder[1]);
+
+                            for (ErpDeliverys delivery : orderQuery.getDeliverys()) {
+                                if (delivery.getDelivery()) {
+                                    orderService.deliveryOrder(orderCode, delivery.getMail_no(),
+                                            delivery.getExpress_code(), delivery.getExpress_name());
+                                }
                             }
                         }
-
                     }
                 }
             }
@@ -160,11 +167,12 @@ public class StoreTask
     FsUserTuiMoneyRankMapper fsUserTuiMoneyRankMapper;
 
     private FsUserAddressMapper addressMapper;
-    public void addUserTuiMoneyRank(){
+
+    public void addUserTuiMoneyRank() {
         List<FsUserShareVO> fsUserShareVOS1 = fsUserTuiMoneyRankMapper.selectFsUserTuiMoneyRankByType(1);
         fsUserTuiMoneyRankMapper.deleteFsUserTuiMoneyRankByType(1);
-        Long id=1L;
-        int rank=1;
+        Long id = 1L;
+        int rank = 1;
         for (FsUserShareVO vo : fsUserShareVOS1) {
             FsUserTuiMoneyRank userRank = new FsUserTuiMoneyRank();
             userRank.setAvatar(vo.getAvatar());
@@ -183,7 +191,7 @@ public class StoreTask
 
         List<FsUserShareVO> fsUserShareVOS2 = fsUserTuiMoneyRankMapper.selectFsUserTuiMoneyRankByType(2);
         fsUserTuiMoneyRankMapper.deleteFsUserTuiMoneyRankByType(2);
-        rank=1;
+        rank = 1;
         for (FsUserShareVO vo : fsUserShareVOS2) {
             FsUserTuiMoneyRank userRank = new FsUserTuiMoneyRank();
             userRank.setAvatar(vo.getAvatar());
@@ -200,7 +208,7 @@ public class StoreTask
         }
         List<FsUserShareVO> fsUserShareVOS3 = fsUserTuiMoneyRankMapper.selectFsUserTuiMoneyRankByType(3);
         fsUserTuiMoneyRankMapper.deleteFsUserTuiMoneyRankByType(3);
-        rank=1;
+        rank = 1;
         for (FsUserShareVO vo : fsUserShareVOS3) {
             FsUserTuiMoneyRank userRank = new FsUserTuiMoneyRank();
             userRank.setAvatar(vo.getAvatar());
@@ -227,25 +235,24 @@ public class StoreTask
     @Autowired
     private IFsStoreProductGroupService storeProductGroupService;
 
-    public void storeProdUpdateCostPrice()
-    {
-        String json=configService.selectConfigByKey("store.config");
-        StoreConfig config=JSONUtil.toBean(json,StoreConfig.class);
+    public void storeProdUpdateCostPrice() {
+        String json = configService.selectConfigByKey("store.config");
+        StoreConfig config = JSONUtil.toBean(json, StoreConfig.class);
         List<FsStoreProductAttrValue> values = fsStoreProductAttrValueMapper.selectFsStoreProductAttrValueList(new FsStoreProductAttrValue());
-        int i=0;
+        int i = 0;
         for (FsStoreProductAttrValue value : values) {
             try {
-                if (StringUtils.isNotEmpty(value.getBarCode())){
+                if (StringUtils.isNotEmpty(value.getBarCode())) {
                     ErpGoodsQueryRequert query = new ErpGoodsQueryRequert();
                     query.setCode(value.getBarCode());
                     ErpGoodsQueryResponse goods = erpGoodsService.getGoods(query);
                     List<ErpGoods> items = goods.getItems();
-                    if (items!=null&&items.size()>0){
+                    if (items != null && items.size() > 0) {
                         ErpGoods erpGoods = items.get(0);
                         BigDecimal salesPrice = erpGoods.getSales_price();
-                        if (salesPrice!=null&&salesPrice.compareTo(BigDecimal.ZERO) != 0){
+                        if (salesPrice != null && salesPrice.compareTo(BigDecimal.ZERO) != 0) {
                             BigDecimal divide = salesPrice.multiply(new BigDecimal(config.getSalesPriceRate())).divide(new BigDecimal("100"));
-                            logger.info("商品id"+value.getId()+"商品成本:"+salesPrice+"代理价"+divide);
+                            logger.info("商品id" + value.getId() + "商品成本:" + salesPrice + "代理价" + divide);
                             FsStoreProductAttrValue va = new FsStoreProductAttrValue();
                             va.setCost(salesPrice);
                             va.setPrice(divide);
@@ -254,28 +261,27 @@ public class StoreTask
                             i++;
                         }
                     }
-                }else
-                if(StringUtils.isNotEmpty(value.getGroupBarCode())){
-                    FsStoreProductGroup group=storeProductGroupService.selectFsStoreProductGroupByBarCode(value.getGroupBarCode());
-                    if(group!=null){
-                        JSONArray jsonArray=JSONUtil.parseArray(group.getProducts());
-                        List<StoreProductGroupDTO> productGroupDTOS=JSONUtil.toList(jsonArray, StoreProductGroupDTO.class);
-                        if(productGroupDTOS!=null){
-                            for(StoreProductGroupDTO dto:productGroupDTOS){
-                                FsStoreProductAttrValue attrValue=fsStoreProductAttrValueMapper.selectFsStoreProductAttrValueById(dto.getId());
+                } else if (StringUtils.isNotEmpty(value.getGroupBarCode())) {
+                    FsStoreProductGroup group = storeProductGroupService.selectFsStoreProductGroupByBarCode(value.getGroupBarCode());
+                    if (group != null) {
+                        JSONArray jsonArray = JSONUtil.parseArray(group.getProducts());
+                        List<StoreProductGroupDTO> productGroupDTOS = JSONUtil.toList(jsonArray, StoreProductGroupDTO.class);
+                        if (productGroupDTOS != null) {
+                            for (StoreProductGroupDTO dto : productGroupDTOS) {
+                                FsStoreProductAttrValue attrValue = fsStoreProductAttrValueMapper.selectFsStoreProductAttrValueById(dto.getId());
                                 Integer count = dto.getCount();
                                 String barCode = attrValue.getBarCode();
                                 ErpGoodsQueryRequert query = new ErpGoodsQueryRequert();
                                 query.setCode(barCode);
                                 ErpGoodsQueryResponse goods = erpGoodsService.getGoods(query);
                                 List<ErpGoods> items = goods.getItems();
-                                if (items!=null&&items.size()>0){
+                                if (items != null && items.size() > 0) {
                                     ErpGoods erpGoods = items.get(0);
                                     BigDecimal salesPrice = erpGoods.getSales_price();
-                                    if (salesPrice!=null&&salesPrice.compareTo(BigDecimal.ZERO) != 0){
-                                        salesPrice=salesPrice.multiply(new BigDecimal(count));
+                                    if (salesPrice != null && salesPrice.compareTo(BigDecimal.ZERO) != 0) {
+                                        salesPrice = salesPrice.multiply(new BigDecimal(count));
                                         BigDecimal divide = salesPrice.multiply(new BigDecimal(config.getSalesPriceRate())).divide(new BigDecimal("100"));
-                                        logger.info("商品id"+value.getId()+"商品成本:"+salesPrice+"代理价"+salesPrice);
+                                        logger.info("商品id" + value.getId() + "商品成本:" + salesPrice + "代理价" + salesPrice);
                                         FsStoreProductAttrValue va = new FsStoreProductAttrValue();
                                         va.setCost(salesPrice);
                                         va.setAgentPrice(divide);
@@ -290,34 +296,32 @@ public class StoreTask
                     }
 
                 }
-            }catch (Exception e){
-                logger.info("商品更新成本价错误:"+value.getId());
+            } catch (Exception e) {
+                logger.info("商品更新成本价错误:" + value.getId());
             }
 
 
-
         }
-        logger.info("更新商品成本价:"+i);
+        logger.info("更新商品成本价:" + i);
 
 
     }
-    public void couponOp()
-    {
+
+    public void couponOp() {
         couponUserService.updateFsCouponByExpire();
 
     }
 
 
     //退款自动处理 24小时未审核自动审核通过 每小时执行一次
-    public void refundOp()
-    {
+    public void refundOp() {
         //获取所有退款申请
-        List<FsStoreAfterSales> list=afterSalesService.selectFsStoreAfterSalesByDoAudit();
-        if(list!=null){
-            for(FsStoreAfterSales afterSales:list){
+        List<FsStoreAfterSales> list = afterSalesService.selectFsStoreAfterSalesByDoAudit();
+        if (list != null) {
+            for (FsStoreAfterSales afterSales : list) {
                 //仅退款
-                if(afterSales.getServiceType().equals(0)){
-                    FsStoreAfterSalesAudit1Param audit1Param=new FsStoreAfterSalesAudit1Param();
+                if (afterSales.getServiceType().equals(0)) {
+                    FsStoreAfterSalesAudit1Param audit1Param = new FsStoreAfterSalesAudit1Param();
                     audit1Param.setSalesId(afterSales.getId());
                     audit1Param.setOperator("平台");
                     afterSalesService.audit1(audit1Param);
@@ -328,11 +332,10 @@ public class StoreTask
 
 
     //每天执行一次
-    public void userMoneyOp()
-    {
-        List<FsStoreOrder> list=orderService.selectFsStoreOrderListByFinish7Day();
-        if(list!=null){
-            for(FsStoreOrder order:list){
+    public void userMoneyOp() {
+        List<FsStoreOrder> list = orderService.selectFsStoreOrderListByFinish7Day();
+        if (list != null) {
+            for (FsStoreOrder order : list) {
                 userService.addMoney(order);
             }
         }
@@ -340,52 +343,53 @@ public class StoreTask
 
 
     //每30秒执行一次
-    public void orderItemSyncOp(){
+    public void orderItemSyncOp() {
         List<FsStoreOrder> list = fsStoreOrderService.selectFsStoreOrderItemJson();
-        for(FsStoreOrder storeOrder:list){
-            FsStoreOrderItem parmOrderItem=new FsStoreOrderItem();
+        for (FsStoreOrder storeOrder : list) {
+            FsStoreOrderItem parmOrderItem = new FsStoreOrderItem();
             parmOrderItem.setOrderId(storeOrder.getId());
-            List<FsStoreOrderItem> listOrderItem=storeOrderItemService.selectFsStoreOrderItemList(parmOrderItem);
-            if(listOrderItem.size()>0){
-                String itemJson= JSONUtil.toJsonStr(listOrderItem);
+            List<FsStoreOrderItem> listOrderItem = storeOrderItemService.selectFsStoreOrderItemList(parmOrderItem);
+            if (listOrderItem.size() > 0) {
+                String itemJson = JSONUtil.toJsonStr(listOrderItem);
                 storeOrder.setItemJson(itemJson);
                 fsStoreOrderMapper.uploadItemJson(storeOrder);
             }
         }
     }
 
-    public void returnDeliveryId(){
+    public void returnDeliveryId() {
         List<String> list = fsStoreOrderMapper.selectErpCode();
         for (String s : list) {
             ErpOrderQueryRequert request = new ErpOrderQueryRequert();
             request.setCode(s);
             ErpOrderQueryResponse response = erpOrderService.getOrder(request);
-            if(response.getOrders()!=null&&response.getOrders().size()>0){
-                    for(ErpOrderQuery orderQuery : response.getOrders()){
-                        if(orderQuery.getDeliverys()!=null&&orderQuery.getDeliverys().size()>0){
-                            for(ErpDeliverys delivery:orderQuery.getDeliverys()){
-                                if(delivery.getDelivery()&&StringUtils.isNotEmpty(delivery.getMail_no())){
-                                    FsStoreOrder order = new FsStoreOrder();
-                                    order.setExtendOrderId(s);
-                                    order.setDeliveryId(delivery.getMail_no());
-                                    order.setStatus(2);
-                                    fsStoreOrderMapper.updateDelivery(order);
-                                }
+            if (response.getOrders() != null && response.getOrders().size() > 0) {
+                for (ErpOrderQuery orderQuery : response.getOrders()) {
+                    if (orderQuery.getDeliverys() != null && orderQuery.getDeliverys().size() > 0) {
+                        for (ErpDeliverys delivery : orderQuery.getDeliverys()) {
+                            if (delivery.getDelivery() && StringUtils.isNotEmpty(delivery.getMail_no())) {
+                                FsStoreOrder order = new FsStoreOrder();
+                                order.setExtendOrderId(s);
+                                order.setDeliveryId(delivery.getMail_no());
+                                order.setStatus(2);
+                                fsStoreOrderMapper.updateDelivery(order);
                             }
                         }
                     }
                 }
+            }
 
 
         }
 
     }
+
     @Autowired
     private IFsExpressService expressService;
 
-    public void changeStatus(){
-        List<Long> list  = fsStoreOrderMapper.selectOrderId();
-        for (Long orderId : list){
+    public void changeStatus() {
+        List<Long> list = fsStoreOrderMapper.selectOrderId();
+        for (Long orderId : list) {
             FsStoreOrder order = fsStoreOrderMapper.selectFsStoreOrderById(orderId);
             String lastFourNumber = "";
             if (order.getDeliverySn().equals(ShipperCodeEnum.SF.getValue())) {
@@ -394,8 +398,8 @@ public class StoreTask
                     lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
                 }
             }
-            ExpressInfoDTO dto=expressService.getExpressInfo(order.getOrderCode(),order.getDeliverySn(),order.getDeliveryId(),lastFourNumber);
-            FsStoreOrder map=new FsStoreOrder();
+            ExpressInfoDTO dto = expressService.getExpressInfo(order.getOrderCode(), order.getDeliverySn(), order.getDeliveryId(), lastFourNumber);
+            FsStoreOrder map = new FsStoreOrder();
             map.setDeliveryStatus(Integer.parseInt(dto.getState()));
             map.setId(order.getId());
             map.setDeliveryType(dto.getStateEx());
@@ -410,11 +414,11 @@ public class StoreTask
     @Autowired
     private ICompanyService companyService;
 
-    public void subCompanyMoney(){
+    public void subCompanyMoney() {
         List<Long> list = paymentMapper.selectPaymentIds();
-        for (Long paymentId : list){
-            FsStorePayment payment=fsStorePaymentService.selectFsStorePaymentById(paymentId);
-            if(payment.getCompanyId()!=null&&payment.getCompanyId()>0){
+        for (Long paymentId : list) {
+            FsStorePayment payment = fsStorePaymentService.selectFsStorePaymentById(paymentId);
+            if (payment.getCompanyId() != null && payment.getCompanyId() > 0) {
                 companyService.subCompanyPaymentMoney(payment);
             }
         }
@@ -424,21 +428,19 @@ public class StoreTask
     private FsStoreOrderItemMapper itemMapper;
 
     public void updateOrderItem() throws ParseException {
-        List <Long> ids = itemMapper.selectOrderIdByNoErp();
-        for (Long id:ids){
+        List<Long> ids = itemMapper.selectOrderIdByNoErp();
+        for (Long id : ids) {
             fsStoreOrderService.createOmsOrder(id);
         }
     }
 
 
-
     //每天执行一次
-    public void syncExpress()
-    {
-        List<Long> ids =fsStoreOrderMapper.selectSyncExpressIds();
+    public void syncExpress() {
+        List<Long> ids = fsStoreOrderMapper.selectSyncExpressIds();
 
         for (Long id : ids) {
-            FsStoreOrderExpressEditParam param =new FsStoreOrderExpressEditParam();
+            FsStoreOrderExpressEditParam param = new FsStoreOrderExpressEditParam();
             param.setOrderId(id);
             fsStoreOrderService.syncExpress(param);
         }
@@ -446,21 +448,21 @@ public class StoreTask
     }
 
     public void returnPayStatus() {
-        List<String> ids =fsStorePaymentMapper.selectPayStatusIds();
+        List<String> ids = fsStorePaymentMapper.selectPayStatusIds();
         for (String id : ids) {
             OrderQueryDTO o = new OrderQueryDTO();
             o.setUpOrderId(id);
             OrderResult orderResult = ybPayService.getOrder(o);
-            if ("0".equals(orderResult.getState())){
-                String[] order=orderResult.getLowOrderId().split("-");
-                if(orderResult.getStatus().equals("100")){
+            if ("0".equals(orderResult.getState())) {
+                String[] order = orderResult.getLowOrderId().split("-");
+                if (orderResult.getStatus().equals("100")) {
                     switch (order[0]) {
                         case "store":
-                            orderService.payConfirm(1,null,order[1], o.getUpOrderId(),orderResult.getBankTrxId(),orderResult.getBankOrderId());
+                            orderService.payConfirm(1, null, order[1], o.getUpOrderId(), orderResult.getBankTrxId(), orderResult.getBankOrderId());
                         case "store_remain":
-                            orderService.payRemainConfirm( order[1], o.getUpOrderId(),orderResult.getBankTrxId(),orderResult.getBankOrderId());
+                            orderService.payRemainConfirm(order[1], o.getUpOrderId(), orderResult.getBankTrxId(), orderResult.getBankOrderId());
                         case "payment":
-                            fsStorePaymentService.payConfirm(order[1],o.getUpOrderId(),orderResult.getBankTrxId(),orderResult.getBankOrderId());
+                            fsStorePaymentService.payConfirm(order[1], o.getUpOrderId(), orderResult.getBankTrxId(), orderResult.getBankOrderId());
                     }
 
                 }
@@ -470,9 +472,8 @@ public class StoreTask
 
     }
 
-    public void AddTuiMoney()
-    {
-        List<Long> ids =fsStoreOrderMapper.selectAddTuiMoney();
+    public void AddTuiMoney() {
+        List<Long> ids = fsStoreOrderMapper.selectAddTuiMoney();
         for (Long id : ids) {
             FsStoreOrderAddTuiMoneyParam param = new FsStoreOrderAddTuiMoneyParam();
             param.setOrderId(id);
@@ -484,76 +485,79 @@ public class StoreTask
     @Autowired
     private IFsStoreAfterSalesService fsStoreAfterSalesService;
 
-    public void selectPayMoneyLessOne(){
+    public void selectPayMoneyLessOne() {
         List<FsStoreOrder> list = fsStoreOrderMapper.selectPayMoneyLessOne();
-        for (FsStoreOrder order : list){
+        for (FsStoreOrder order : list) {
             FsStoreAfterSalesParam param = new FsStoreAfterSalesParam();
             param.setOrderCode(order.getOrderCode());
             param.setServiceType(0);
             param.setRefundAmount(order.getPayMoney());
             param.setReasons("超时未处理,自动申请退款");
             List<FsStoreAfterSalesProductParam> productParams = new ArrayList<>();
-            List <FsStoreOrderItem> items = fsStoreOrderMapper.selectOrderItem(order.getId());
-            for (FsStoreOrderItem item : items){
+            List<FsStoreOrderItem> items = fsStoreOrderMapper.selectOrderItem(order.getId());
+            for (FsStoreOrderItem item : items) {
                 FsStoreAfterSalesProductParam param1 = new FsStoreAfterSalesProductParam();
                 param1.setProductId(item.getProductId());
                 param1.setNum(item.getNum());
                 productParams.add(param1);
             }
             param.setProductList(productParams);
-            fsStoreAfterSalesService.autoApplyForAfterSales(order.getUserId(),param);
+            fsStoreAfterSalesService.autoApplyForAfterSales(order.getUserId(), param);
         }
     }
 
 
-
     @Autowired
     private CompanyUserMapper companyUserMapper;
-    public void updateCompanyUserStatus()
-    {
+
+    public void updateCompanyUserStatus() {
         CompanyUser user = new CompanyUser();
         user.setStatus("0");
         user.setDelFlag("0");
         List<CompanyUser> companyUsers = companyUserMapper.selectCompanyUserList(user);
         for (CompanyUser companyUser : companyUsers) {
-            if(SecurityUtils.matchesPassword("123456", companyUser.getPassword())){
+            if (SecurityUtils.matchesPassword("123456", companyUser.getPassword())) {
                 companyUser.setStatus("1");
                 companyUserMapper.updateCompanyUser(companyUser);
-                logger.info("密码为123456 停用账号:"+companyUser.getUserId()+":"+companyUser.getNickName());
+                logger.info("密码为123456 停用账号:" + companyUser.getUserId() + ":" + companyUser.getNickName());
             }
         }
     }
 
-    public  void deleteCustomer(){
+    public void deleteCustomer() {
 
     }
+
     @Autowired
     private IFsStoreOrderStatusService orderStatusService;
-    public  void updateExpress(){
+
+    public void updateExpress() {
         List<FsStoreOrder> list = fsStoreOrderMapper.selectUpdateExpress();
-        for (FsStoreOrder order : list){
-                ErpOrderQueryRequert request = new ErpOrderQueryRequert();
-                request.setCode(order.getExtendOrderId());
-                ErpOrderQueryResponse response = erpOrderService.getOrder(request);
-                if(response.getOrders()!=null&&response.getOrders().size()>0){
-                    for(ErpOrderQuery orderQuery : response.getOrders()){
-                        if(orderQuery.getDeliverys()!=null&&orderQuery.getDeliverys().size()>0){
-                            for(ErpDeliverys delivery:orderQuery.getDeliverys()){
-                                if(delivery.getDelivery()&&StringUtils.isNotEmpty(delivery.getMail_no())){
-                                    //更新商订单状态 删除REDIS
-                                    orderService.deliveryOrder(order.getOrderCode(),delivery.getMail_no(),delivery.getExpress_code(),delivery.getExpress_name());
-                                    redisCache.deleteObject(DELIVERY+":"+order.getExtendOrderId());
-                                }
+        for (FsStoreOrder order : list) {
+            ErpOrderQueryRequert request = new ErpOrderQueryRequert();
+            request.setCode(order.getExtendOrderId());
+            ErpOrderQueryResponse response = erpOrderService.getOrder(request);
+            if (CollectionUtils.isNotEmpty(response.getOrders())) {
+                for (ErpOrderQuery orderQuery : response.getOrders()) {
+                    // 部分发货或者全部发货
+                    if (ObjectUtils.equals(orderQuery.getDelivery_state(), 1) || ObjectUtils.equals(orderQuery.getDelivery_state(), 2)) {
+                        // 订单状态变更
+                        orderStatusService.create(order.getId(), OrderLogEnum.DELIVERY_GOODS.getValue(),
+                                OrderLogEnum.DELIVERY_GOODS.getDesc());
+
+                        redisCache.deleteObject(DELIVERY+":"+order.getExtendOrderId());
+
+                        for (ErpDeliverys delivery : orderQuery.getDeliverys()) {
+                            if (delivery.getDelivery()) {
+                                orderService.deliveryOrder(order.getOrderCode(), delivery.getMail_no(),
+                                        delivery.getExpress_code(), delivery.getExpress_name());
                             }
-
                         }
                     }
-
+                }
             }
-
         }
     }
 
 
-
 }

+ 8 - 6
fs-service-system/src/main/java/com/fs/store/domain/FsStoreDelivers.java

@@ -1,6 +1,8 @@
 package com.fs.store.domain;
 
 import lombok.Data;
+
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
@@ -13,12 +15,12 @@ public class FsStoreDelivers {
     /**
      * 主键
      */
-    private Integer id;
+    private Long id;
 
     /**
      * 订单id
      */
-    private Integer orderId;
+    private Long orderId;
 
     /**
      * 订单号
@@ -43,17 +45,17 @@ public class FsStoreDelivers {
     /**
      * 发货时间
      */
-    private Date deliverSendTime;
+    private LocalDateTime deliverSendTime;
 
     /**
      * 创建时间
      */
-    private Date createTime;
+    private LocalDateTime createTime;
 
     /**
      * 更新时间
      */
-    private Date updateTime;
+    private LocalDateTime updateTime;
 
     /**
      * 创建人
@@ -63,5 +65,5 @@ public class FsStoreDelivers {
     /**
      * 更新人
      */
-    private Date updateBy;
+    private String updateBy;
 }

+ 36 - 22
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderServiceImpl.java

@@ -56,9 +56,7 @@ import com.fs.store.constants.StoreConstants;
 import com.fs.store.domain.*;
 import com.fs.store.dto.*;
 import com.fs.store.enums.*;
-import com.fs.store.mapper.FsStoreCartMapper;
-import com.fs.store.mapper.FsStoreOrderItemMapper;
-import com.fs.store.mapper.FsUserAddressMapper;
+import com.fs.store.mapper.*;
 import com.fs.store.param.*;
 import com.fs.store.service.*;
 import com.fs.store.vo.*;
@@ -77,7 +75,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
-import com.fs.store.mapper.FsStoreOrderMapper;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
@@ -187,6 +185,9 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
 
     @Autowired
     private IFsCouponScheduleService fsCouponScheduleService;
+
+    @Autowired
+    private FsStoreDeliversMapper fsStoreDeliversMapper;
     /**
      * 查询订单
      *
@@ -869,31 +870,34 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
     public void deliveryOrder(String orderCode,String deliveryId,String deliverCode,String deliverName) {
         FsStoreOrder order= fsStoreOrderMapper.selectFsStoreOrderByOrderCode(orderCode);
         if(order!=null&& Objects.equals(order.getStatus(), OrderInfoEnum.STATUS_1.getValue())){
-            FsExpress express=expressService.selectFsExpressByOmsCode(deliverCode);
-            if(express!=null){
-                order.setDeliveryName(deliverName);
-                order.setDeliverySn(express.getCode());
-            }
+            // 更新订单状态
             order.setStatus(OrderInfoEnum.STATUS_2.getValue());
-            order.setDeliveryId(deliveryId);
             order.setDeliverySendTime(new Date());
-
             fsStoreOrderMapper.updateFsStoreOrder(order);
-            orderStatusService.create(order.getId(), OrderLogEnum.DELIVERY_GOODS.getValue(),
-                    OrderLogEnum.DELIVERY_GOODS.getDesc());
-            //订阅物流回调
-            String lastFourNumber = "";
-            if (order.getDeliverySn().equals(ShipperCodeEnum.SF.getValue())) {
-                lastFourNumber = order.getUserPhone();
-                if (lastFourNumber.length() == 11) {
-                    lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
-                }
-            }
-            expressService.subscribeEspress(order.getOrderCode(),order.getDeliverySn(),order.getDeliveryId(),lastFourNumber);
 
+
+            // 多运单号适配
+            FsExpress express=expressService.selectFsExpressByOmsCode(deliverCode);
+            if(ObjectUtil.isNotNull(express)) {
+                FsStoreDelivers fsStoreDeliver = new FsStoreDelivers();
+                fsStoreDeliver.setOrderId(order.getId());
+                fsStoreDeliver.setOrderCode(orderCode);
+                fsStoreDeliver.setDeliverId(deliveryId);
+                fsStoreDeliver.setDeliverSn(express.getCode());
+                fsStoreDeliver.setDeliverName(express.getName());
+                fsStoreDeliver.setCreateTime(LocalDateTime.now());
+                fsStoreDeliver.setUpdateTime(LocalDateTime.now());
+                fsStoreDeliver.setCreateBy("admin");
+                fsStoreDeliver.setUpdateBy("admin");
+                fsStoreDeliversMapper.insert(fsStoreDeliver);
+            }
+
+
+            // 微信消息通知
             TemplateBean templateBean = TemplateBean.builder()
                     .orderId(order.getId().toString())
                     .orderCode(order.getOrderCode().toString())
@@ -903,6 +907,16 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                     .templateType(TemplateListenEnum.TYPE_2.getValue())
                     .build();
             publisher.publishEvent(new TemplateEvent(this, templateBean));
+
+            //订阅物流回调
+            String lastFourNumber = "";
+            if (order.getDeliverySn().equals(ShipperCodeEnum.SF.getValue())) {
+                lastFourNumber = order.getUserPhone();
+                if (lastFourNumber.length() == 11) {
+                    lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
+                }
+            }
+            expressService.subscribeEspress(order.getOrderCode(),order.getDeliverySn(),order.getDeliveryId(),lastFourNumber);
         }
     }