|
|
@@ -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);
|