Sfoglia il codice sorgente

add:金牛ai发送物流

ct 5 giorni fa
parent
commit
e581bae8ee

+ 16 - 16
fs-quartz/src/main/java/com/fs/quartz/util/AbstractQuartzJob.java

@@ -33,22 +33,22 @@ public abstract class AbstractQuartzJob implements Job
     @Override
     public void execute(JobExecutionContext context) throws JobExecutionException
     {
-        SysJob sysJob = new SysJob();
-        BeanUtils.copyBeanProp(sysJob, context.getMergedJobDataMap().get(ScheduleConstants.TASK_PROPERTIES));
-        try
-        {
-            before(context, sysJob);
-            if (sysJob != null)
-            {
-                doExecute(context, sysJob);
-            }
-            after(context, sysJob, null);
-        }
-        catch (Exception e)
-        {
-            log.error("任务执行异常  - :", e);
-            after(context, sysJob, e);
-        }
+//        SysJob sysJob = new SysJob();
+//        BeanUtils.copyBeanProp(sysJob, context.getMergedJobDataMap().get(ScheduleConstants.TASK_PROPERTIES));
+//        try
+//        {
+//            before(context, sysJob);
+//            if (sysJob != null)
+//            {
+//                doExecute(context, sysJob);
+//            }
+//            after(context, sysJob, null);
+//        }
+//        catch (Exception e)
+//        {
+//            log.error("任务执行异常  - :", e);
+//            after(context, sysJob, e);
+//        }
     }
 
     /**

+ 123 - 7
fs-service/src/main/java/com/fs/erp/service/impl/DfOrderServiceImpl.java

@@ -21,6 +21,8 @@ import com.fs.erp.dto.df.*;
 import com.fs.erp.dto.sdk.df.DfClient;
 import com.fs.erp.dto.sdk.df.enums.RequestUrlEnum;
 import com.fs.erp.service.IErpOrderService;
+import com.fs.fastGpt.domain.FastGptRole;
+import com.fs.fastGpt.service.IFastGptRoleService;
 import com.fs.his.config.FsSysConfig;
 import com.fs.his.domain.*;
 import com.fs.his.enums.FsStoreOrderLogEnum;
@@ -45,9 +47,18 @@ import com.fs.hisStore.param.FsStoreAfterSalesParam;
 import com.fs.hisStore.service.IFsExpressScrmService;
 import com.fs.hisStore.service.IFsStoreOrderScrmService;
 import com.fs.hisStore.vo.FsStoreOrderItemVO;
+import com.fs.qw.domain.QwExternalContact;
+import com.fs.qw.domain.QwUser;
+import com.fs.qw.mapper.QwUserMapper;
+import com.fs.qw.service.IQwExternalContactService;
 import com.fs.system.domain.SysConfig;
 import com.fs.system.mapper.SysConfigMapper;
 import com.fs.utils.OrderContextHolder;
+import com.fs.wxwork.dto.WxWorkResponseDTO;
+import com.fs.wxwork.dto.WxWorkSendTextMsgDTO;
+import com.fs.wxwork.dto.WxWorkUserId2VidDTO;
+import com.fs.wxwork.dto.WxWorkVid2UserIdRespDTO;
+import com.fs.wxwork.service.WxWorkService;
 import com.hc.openapi.tool.util.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.util.Asserts;
@@ -128,6 +139,14 @@ public class DfOrderServiceImpl implements IErpOrderService {
 
     @Autowired
     private RedisCache redisCache;
+    @Autowired
+    private IQwExternalContactService externalContactService;
+    @Autowired
+    private QwUserMapper qwUserMapper;
+    @Autowired
+    private IFastGptRoleService fastGptRoleService;
+    @Autowired
+    private WxWorkService wxWorkService;
 
 
     @Override
@@ -401,7 +420,8 @@ public class DfOrderServiceImpl implements IErpOrderService {
     @Override
     public void getOrderDeliveryStatus(FsStoreOrder order) {
         Map<String, Object> map = new HashMap<>();
-        Long dfAccountId = getSFAccountIndex(order.getOrderId());
+        Long orderId = order.getOrderId();
+        Long dfAccountId = getSFAccountIndex(orderId);
         map.put("orderNumber", order.getOrderCode());
         map.put("mailNumber", order.getDeliverySn());
         try {
@@ -423,7 +443,7 @@ public class DfOrderServiceImpl implements IErpOrderService {
                 Integer deliveryStatus = 0;
                 String stateEx = "0";
                 FsStoreOrder fsStoreOrderMap = new FsStoreOrder();
-                fsStoreOrderMap.setOrderId(order.getOrderId());
+                fsStoreOrderMap.setOrderId(orderId);
                 Integer status = temp.getStatus();
                 switch (status) {
                     case 0:
@@ -469,7 +489,7 @@ public class DfOrderServiceImpl implements IErpOrderService {
                         Map<String, Object> config = (Map<String, Object>) JSON.parse(sysConfig.getConfigValue());
                         Object isUpdateOrder = config.get("isUpdateOrder");
                         if (isUpdateOrder == null || "1".equals(isUpdateOrder.toString())) {
-                            fsStoreOrderService.getGoods(order.getOrderId(), "物流自动");
+                            fsStoreOrderService.getGoods(orderId, "物流自动");
                         }
                         break;
                     case 10:
@@ -484,6 +504,16 @@ public class DfOrderServiceImpl implements IErpOrderService {
                         }
                         break;
                 }
+
+
+                //判断物流状态是否更新 更新ai发送物流给客户
+                try {
+                    aiSendExpress(order, stateEx);
+                } catch (Exception e) {
+                    log.error("ai发送物流信息错误:{}", e.getMessage());
+                }
+
+
                 fsStoreOrderMap.setDeliveryStatus(deliveryStatus); //物流状态:0-暂无轨迹信息 1-已揽收 2-在途中,3-签收,4-问题件
                 fsStoreOrderMap.setDeliveryType(stateEx);
                 fsStoreOrderMapper.updateFsStoreOrder(fsStoreOrderMap);
@@ -493,6 +523,91 @@ public class DfOrderServiceImpl implements IErpOrderService {
         }
     }
 
+    private void aiSendExpress(FsStoreOrder order, String stateEx) {
+        Long orderId = order.getOrderId();
+        if (!Objects.equals(order.getDeliveryType(), stateEx)) {
+            //判断是否添加相关企微员工
+            if(order.getUserId() != null){
+                List<QwExternalContact> qwExternalContact = externalContactService.selectQwExternalContactByFsUserIdAndCompany(order.getUserId(), order.getCompanyUserId());
+                if(qwExternalContact != null && !qwExternalContact.isEmpty()) {
+                    for (QwExternalContact externalContact : qwExternalContact) {
+                        Long qwUserId = externalContact.getQwUserId();
+                        if (qwUserId != null) {
+                            QwUser qwUser = qwUserMapper.selectQwUserById(qwUserId);
+                            if (qwUser != null && qwUser.getUid() != null && qwUser.getFastGptRoleId() != null && qwUser.getServerId() != null && qwUser.getServerStatus() == 1 && qwUser.getIpadStatus() == 1) {
+                                FastGptRole fastGptRole = fastGptRoleService.selectFastGptRoleByRoleId(qwUser.getFastGptRoleId());
+                                if (fastGptRole.getLogistics() == 0) {
+                                    log.error("物流功能未开启,roleId:" + qwUser.getFastGptRoleId() + "订单号:" + orderId);
+                                }
+                                WxWorkUserId2VidDTO wxWorkUserId2VidDTO = new WxWorkUserId2VidDTO();
+                                wxWorkUserId2VidDTO.setOpenid(Collections.singletonList(externalContact.getExternalUserId()));
+                                wxWorkUserId2VidDTO.setUuid(qwUser.getUid());
+                                WxWorkResponseDTO<List<WxWorkVid2UserIdRespDTO>> WxWorkVid2UserIdRespDTO = wxWorkService.UserId2Vid(wxWorkUserId2VidDTO, qwUser.getServerId());
+                                List<WxWorkVid2UserIdRespDTO> data = WxWorkVid2UserIdRespDTO.getData();
+                                StringBuilder sBuilder = new StringBuilder();
+                                if (data != null && !data.isEmpty()) {
+                                    Long sendId = data.get(0).getUser_id();
+                                    switch (order.getStatus()) {
+                                        case -1:
+                                            break;
+                                        case -2:
+                                            break;
+                                        case 1:
+                                            break;
+                                        case 2:
+                                            sBuilder.append("您好,您有一个包裹正在准备发货,请耐心等待;\n");
+                                            if (order.getDeliverySn() != null && !order.getDeliverySn().isEmpty()) {
+                                                sBuilder.append(" 物流单号为:").append(order.getDeliverySn()).append("\n");
+                                            }
+                                            sBuilder.append("\uD83C\uDF39\uD83C\uDF39\uD83C\uDF39");
+                                            break;
+                                        case 3:
+                                            if ("202".equals(stateEx)) {
+                                                //211
+                                                //你好,这边查询到您购买的XXX(购买套餐)在XXX(时间)已经送到了,送货员电话为XXX(送货员信息)
+                                                ErpDeliverysRequest erpDeliverysRequest = new ErpDeliverysRequest();
+                                                erpDeliverysRequest.setCode(order.getOrderCode());
+                                                ErpDeliverysResponse express = null;
+                                                express = getDeliver(erpDeliverysRequest);
+                                                sBuilder.append("这边查询到您有一个包裹 ");
+                                                if (express != null && express.getDeliverys() != null && !express.getDeliverys().isEmpty()) {
+                                                    List<ErpDeliverys> deliverys = express.getDeliverys();
+                                                    ErpDeliverys tracesDTO = deliverys.get(deliverys.size() - 1);
+                                                    String remark = tracesDTO.getRemark();
+                                                    if ("派送至".equals(remark)) {
+                                                        sBuilder.append(" 在").append(tracesDTO.getAcceptTime()).append("已经送到了\n");
+                                                        sBuilder.append(" 物流单号为:").append(order.getDeliverySn()).append("\n");
+                                                        sBuilder.append("物流信息:").append(remark).append("\n");
+                                                    }
+                                                } else {
+                                                    sBuilder.append(" 已经送到了\n");
+                                                }
+                                                sBuilder.append("\uD83C\uDF39\uD83C\uDF39\uD83C\uDF39");
+                                            }
+                                            break;
+                                        case 4:
+                                        case 5:
+                                    }
+                                    if (!"".contentEquals(sBuilder)) {
+                                        //2.发送模板中的文字内容
+                                        String content = sBuilder.toString();
+                                        content = content.replace("(有事呼叫我,勿找平台,少一次投诉,多一份感恩)", "");
+                                        WxWorkSendTextMsgDTO wxWorkSendTextMsgDTO = new WxWorkSendTextMsgDTO();
+                                        wxWorkSendTextMsgDTO.setSend_userid(sendId);
+                                        wxWorkSendTextMsgDTO.setUuid(qwUser.getUid());
+                                        wxWorkSendTextMsgDTO.setContent(content);
+                                        wxWorkSendTextMsgDTO.setIsRoom(false);
+                                        wxWorkService.SendTextMsg(wxWorkSendTextMsgDTO, qwUser.getServerId());
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
     @Override
     public void getOrderScrmDeliveryStatus(FsStoreOrderScrm order) {
         Map<String, Object> map = new HashMap<>();
@@ -589,6 +704,7 @@ public class DfOrderServiceImpl implements IErpOrderService {
     }
 
     private void cancelOrder(FsStoreOrder order) {
+        Long orderId = order.getOrderId();
         Integer deliveryStatus = order.getDeliveryStatus();
         if (deliveryStatus == null || deliveryStatus == 0) {
             //没有物流信息
@@ -597,21 +713,21 @@ public class DfOrderServiceImpl implements IErpOrderService {
             order.setExtendOrderId("");
             order.setDeliverySn("");
             fsStoreOrderMapper.updateFsStoreOrder(order);
-            fsStoreOrderLogsService.create(order.getOrderId(), FsStoreOrderLogEnum.UPDATE_ORDER_DF.getValue(),
+            fsStoreOrderLogsService.create(orderId, FsStoreOrderLogEnum.UPDATE_ORDER_DF.getValue(),
                     "运单不存在," + FsStoreOrderLogEnum.UPDATE_ORDER_DF.getDesc());
         } else {
             //有物流信息->售后处理
             //取消订单
             FsStoreOrderSalesParam afterSalesParam = new FsStoreOrderSalesParam();
-            afterSalesParam.setOrderId(order.getOrderId());
+            afterSalesParam.setOrderId(orderId);
             afterSalesParam.setReasons("代服管家取消订单");
             afterSalesParam.setOperator("代服管家");
             fsStoreOrderService.afterSales(afterSalesParam);
-            fsStoreOrderLogsService.create(order.getOrderId(), FsStoreOrderLogEnum.REFUND_ORDER_DF.getValue(),
+            fsStoreOrderLogsService.create(orderId, FsStoreOrderLogEnum.REFUND_ORDER_DF.getValue(),
                     "运单不存在," + FsStoreOrderLogEnum.REFUND_ORDER_DF.getDesc());
         }
         FsStoreOrderDf df = new FsStoreOrderDf();
-        df.setOrderId(order.getOrderId());
+        df.setOrderId(orderId);
         df.setStatus(2);
         df.setUpdateTime(new Date());
         fsStoreOrderDfMapper.updateFsStoreOrderDf(df);

+ 14 - 7
fs-service/src/main/resources/mapper/fastGpt/FastGptRoleMapper.xml

@@ -21,10 +21,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="bindCorpId"    column="bind_corp_id"    />
         <result property="contactInfo"    column="contact_info"    />
         <result property="channelType"    column="channel_type"    />
+        <result property="logistics"    column="logistics"    />
     </resultMap>
 
     <sql id="selectFastGptRoleVo">
-        select role_id, role_name,contact_info,company_id, create_time, update_time, role_type, mode_config_json, mode, kf_id, kf_url, avatar, kf_media_id,reminder_words, bind_corp_id,channel_type from fastgpt_role
+        select role_id, role_name,contact_info,company_id, create_time, update_time, role_type, mode_config_json, mode, kf_id, kf_url, avatar, kf_media_id,reminder_words, bind_corp_id,channel_type,logistics from fastgpt_role
     </sql>
 
     <select id="selectFastGptRoleList" parameterType="FastGptRole" resultMap="FastGptRoleResult">
@@ -59,20 +60,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             </if>
         </where>
     </select>
-
+    <select id="selectFastGptRoleRoleIdsByLikeAppKey" resultType="com.fs.his.vo.OptionsVO">
+        select
+            role_name as dictLabel,
+            mode_config_json as dictImgUrl,
+            role_id as dictValue
+        from fastgpt_role
+        where mode_config_json like concat('{"APPKey":"', #{appKey}, '%')
+    </select>
     <select id="selectFastGptRoleRoleIdsByAppKey" resultType="java.lang.String">
         select
             role_id as roleId
         from fastgpt_role
         where mode_config_json like concat('{"APPKey":"', #{appKey}, '%')
     </select>
-
     <select id="selectFastGptRoleAppKeyList" resultType="com.fs.fastGpt.vo.FastgptEventLogTotalVo">
         select
             role_id as roleId,role_name as roleName,mode_config_json as appKey
         from fastgpt_role
     </select>
 
+
     <insert id="insertFastGptRole" parameterType="FastGptRole" useGeneratedKeys="true" keyProperty="roleId">
         insert into fastgpt_role
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -90,8 +98,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="reminderWords != null">reminder_words,</if>
             <if test="bindCorpId != null">bind_corp_id,</if>
             <if test="contactInfo != null">contact_info,</if>
-            <if test="channelType != null">channel_type,</if>
-         </trim>
+        </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="roleName != null">#{roleName},</if>
             <if test="companyId != null">#{companyId},</if>
@@ -107,8 +114,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="reminderWords != null">#{reminderWords},</if>
             <if test="bindCorpId != null">#{bindCorpId},</if>
             <if test="contactInfo != null">#{contactInfo},</if>
-            <if test="channelType != null">#{channelType},</if>
-         </trim>
+        </trim>
     </insert>
 
     <update id="updateFastGptRole" parameterType="FastGptRole">
@@ -129,6 +135,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="bindCorpId != null">bind_corp_id = #{bindCorpId},</if>
             <if test="contactInfo != null">contact_info = #{contactInfo},</if>
             <if test="channelType != null">channel_type = #{channelType},</if>
+            <if test="logistics != null">logistics = #{logistics},</if>
         </trim>
         where role_id = #{roleId}
     </update>