Kaynağa Gözat

Merge remote-tracking branch 'origin/企微聊天' into 企微聊天

ct 2 gün önce
ebeveyn
işleme
5815ef26a5

+ 11 - 0
fs-common/src/main/java/com/fs/common/core/redis/RedisCache.java

@@ -484,4 +484,15 @@ public class RedisCache
     public boolean hasKey(String key) {
         return Boolean.TRUE.equals(redisTemplate.hasKey(key));
     }
+
+    // 判断集合中是否存在元素
+    public boolean sIsMember(String key, Object value) {
+        return Boolean.TRUE.equals(redisTemplate.opsForSet().isMember(key, value));
+    }
+
+    // 添加元素到集合
+    public void sAdd(String key, Object value) {
+        redisTemplate.opsForSet().add(key, value);
+    }
+
 }

+ 13 - 0
fs-service/src/main/java/com/fs/erp/service/impl/DfOrderServiceImpl.java

@@ -171,6 +171,8 @@ public class DfOrderServiceImpl implements IErpOrderService {
     @Autowired
     private FsStoreServiceImpl fsStoreServiceImpl;
 
+    private final String signedKey = "ai:express:signed:sent:";
+
     @Override
     public ErpOrderResponse addOrder(ErpOrder order) {
         if (!Objects.isNull(order.getIsIntegralOrder()) && order.getIsIntegralOrder())
@@ -900,6 +902,13 @@ public class DfOrderServiceImpl implements IErpOrderService {
                                         case 4:
                                         case 5:
                                     }
+
+                                    boolean signed = redisCache.sIsMember(signedKey, orderId.toString());
+                                    if ("301".equals(stateEx) && signed){
+                                        log.info("签收消息已发送过,跳过 - orderId: {}", orderId);
+                                        return;
+                                    }
+
                                     if (!"".contentEquals(sBuilder)) {
                                         //2.发送模板中的文字内容
                                         String content = sBuilder.toString();
@@ -927,6 +936,10 @@ public class DfOrderServiceImpl implements IErpOrderService {
                                             redisCache.setCacheObject(todayRedisKey, "1", (int) secondsUntilTomorrow, java.util.concurrent.TimeUnit.SECONDS);
                                             log.info("设置今天Redis发送标识 - orderId: {}, todayRedisKey: {}, 过期时间(秒): {}", orderId, todayRedisKey, secondsUntilTomorrow);
 
+                                            // 设置已签收的发送标识
+                                            if ("301".equals(stateEx)){
+                                                redisCache.sAdd(signedKey, orderId.toString());
+                                            }
                                         } catch (Exception e) {
                                             log.error("AI物流消息发送失败 - orderId: {}, sendId: {}, 错误信息: {}", orderId, sendId, e.getMessage(), e);
                                         }

+ 11 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsExportTaskServiceImpl.java

@@ -5,9 +5,15 @@ import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.utils.ParseUtils;
+import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.config.cloud.CloudHostProper;
 import com.fs.his.mapper.FsStoreOrderMapper;
@@ -228,6 +234,11 @@ public class FsExportTaskServiceImpl implements IFsExportTaskService
                 if (vo.getUserAddress() != null && !isCheckAddress) {
                     vo.setUserAddress(ParseUtils.parseAddress(vo.getUserAddress()));
                 }
+
+                if (StringUtils.isNotEmpty(vo.getCountGoods())){
+                    JSONObject jsonInfo = JSONObject.parseObject(vo.getCountGoods());
+                    vo.setCountGoods(jsonInfo.getString("productName") + "*" + vo.getGoodsNum());
+                }
             }
         }
 

+ 3 - 0
fs-service/src/main/java/com/fs/his/vo/FsStoreOrderExportVO.java

@@ -227,4 +227,7 @@ public class FsStoreOrderExportVO implements Serializable
     private String miniProgramName;
     @Excel(name = "订单来源" , dictType = "sys_order_source")
     private Integer source;
+    @Excel(name = "统计商品数量")
+    private String countGoods;
+    private String goodsNum;
 }

+ 3 - 0
fs-service/src/main/resources/mapper/his/FsStoreOrderMapper.xml

@@ -1410,6 +1410,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         cu.nick_name AS company_user_nick_name,
         cts.name AS schedule_name,
         st.store_name,df.login_account as erp_account,
+        soi.json_info countGoods,
+        soi.num goodsNum,
         csc.name miniProgramName
         FROM fs_store_order so
         LEFT JOIN fs_store st ON so.store_id = st.store_id
@@ -1421,6 +1423,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT JOIN company_tcm_schedule cts ON cts.id = so.schedule_id
         LEFT JOIN fs_patient pat ON pat.patient_id = p.patient_id
         LEFT JOIN fs_store_order_df df on df.order_id=so.order_id
+        LEFT JOIN fs_store_order_item soi on soi.order_id=so.order_id
         LEFT JOIN (
         SELECT
         sp.*,