|
|
@@ -1146,6 +1146,267 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void sendExpressInfoAt9And16(FsStoreOrder order) {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ Long orderId = order.getOrderId();
|
|
|
+ Long dfAccountId = getSFAccountIndex(orderId);
|
|
|
+ if (OrderContextHolder.hasIntegralOrder())
|
|
|
+ dfAccountId = getSFAccountIndexIntegral(orderId);
|
|
|
+ if (dfAccountId == null){
|
|
|
+ log.info("代服管家 getOrderDeliveryStatus-订单id: {}", orderId);
|
|
|
+ }
|
|
|
+ map.put("orderNumber", order.getOrderCode());
|
|
|
+ map.put("mailNumber", order.getDeliverySn());
|
|
|
+ try {
|
|
|
+ String response = client.execute(RequestUrlEnum.ORDER_DELIVERY_STATUS, map, dfAccountId);
|
|
|
+ if (StringUtils.isBlank(response)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ DFApiResponse dfApiResponse = JSON.parseObject(response, DFApiResponse.class);
|
|
|
+ log.info("顺丰返回数据{}",dfApiResponse);
|
|
|
+ if ("运单不存在".equals(dfApiResponse.getMsg())) {
|
|
|
+
|
|
|
+ //查看原来物流状态
|
|
|
+ if (OrderContextHolder.hasIntegralOrder()) {
|
|
|
+ cancelOrder(OrderContextHolder.getIntegralOrder());
|
|
|
+ }else {
|
|
|
+ cancelOrder(order);
|
|
|
+ }
|
|
|
+ log.info("代服管家 getOrderDeliveryStatus: {}", response);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //3.处理请求结果
|
|
|
+ if (dfApiResponse != null && "ok".equals(dfApiResponse.getCode())) {
|
|
|
+ String jsonString = JSON.toJSONString(dfApiResponse.getResult());
|
|
|
+// List<DFOrderStatusResultRequest> requestList = JSON.parseArray(jsonString, DFOrderStatusResultRequest.class);
|
|
|
+ DFOrderStatusResultRequest temp = JSON.parseObject(jsonString, DFOrderStatusResultRequest.class);
|
|
|
+ //0待揽收 1已揽收 2运输中 3派送中 4异常件 5退回件 6退回签收 7转寄件 8作废件 9已签收 10 已取消
|
|
|
+ Integer deliveryStatus = 0;
|
|
|
+ String stateEx = "0";
|
|
|
+ FsStoreOrder fsStoreOrderMap = new FsStoreOrder();
|
|
|
+ fsStoreOrderMap.setOrderId(orderId);
|
|
|
+ Integer status = temp.getStatus();
|
|
|
+ switch (status) {
|
|
|
+ case 0:
|
|
|
+ //0待揽收 1已揽收 2运输中
|
|
|
+ deliveryStatus = status;
|
|
|
+ stateEx = status.toString();
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ //0待揽收 1已揽收 2运输中
|
|
|
+ deliveryStatus = status;
|
|
|
+ stateEx = status.toString();
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ //0待揽收 1已揽收 2运输中
|
|
|
+ deliveryStatus = status;
|
|
|
+ stateEx = status.toString();
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ //3派送中
|
|
|
+ deliveryStatus = 2;
|
|
|
+ stateEx = "202";
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ // 4异常件
|
|
|
+ deliveryStatus = status;
|
|
|
+ stateEx = status.toString();
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ //5退回件
|
|
|
+ deliveryStatus = 4;
|
|
|
+ stateEx = "407"; //退货未签收
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ // 6退回签收 7转寄件 8作废件 9已签收 10 已取消
|
|
|
+ deliveryStatus = status;
|
|
|
+ stateEx = "406"; //退货签收
|
|
|
+ break;
|
|
|
+ case 9:
|
|
|
+ //已签收
|
|
|
+ deliveryStatus = 3;
|
|
|
+ stateEx = "301";
|
|
|
+ break;
|
|
|
+ case 10:
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断物流状态是否更新 更新ai发送物流给客户
|
|
|
+ try {
|
|
|
+ aiSendExpressAt9And16(order, stateEx);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("ai发送物流信息错误:{}", e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void aiSendExpressAt9And16(FsStoreOrder order, String stateEx) {
|
|
|
+ Long orderId = order.getOrderId();
|
|
|
+
|
|
|
+ // 检查是否已签收
|
|
|
+ boolean signed = redisCache.sIsMember(signedKey, orderId.toString());
|
|
|
+ if ("301".equals(stateEx) && signed){
|
|
|
+ log.info("每日上午9点和下午4点发送物流消息:签收消息已发送过,跳过 - orderId: {}", orderId);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断是否添加相关企微员工
|
|
|
+ if(order.getUserId() != null){
|
|
|
+ log.info("检查企微联系人 - orderId: {}, userId: {}, companyUserId: {}",
|
|
|
+ orderId, order.getUserId(), order.getCompanyUserId());
|
|
|
+
|
|
|
+ List<QwExternalContact> qwExternalContact = externalContactService.selectQwExternalContactByFsUserIdAndCompany(order.getUserId(), order.getCompanyUserId());
|
|
|
+
|
|
|
+ log.info("企微联系人查询结果 - orderId: {}, 联系人数量: {}",
|
|
|
+ orderId, qwExternalContact != null ? qwExternalContact.size() : 0);
|
|
|
+
|
|
|
+ if(qwExternalContact != null && !qwExternalContact.isEmpty()) {
|
|
|
+ for (QwExternalContact externalContact : qwExternalContact) {
|
|
|
+ Long qwUserId = externalContact.getQwUserId();
|
|
|
+
|
|
|
+ log.info("处理企微联系人 - orderId: {}, externalUserId: {}, qwUserId: {}",
|
|
|
+ orderId, externalContact.getExternalUserId(), qwUserId);
|
|
|
+
|
|
|
+ if (qwUserId != null) {
|
|
|
+ QwUser qwUser = qwUserMapper.selectQwUserById(qwUserId);
|
|
|
+
|
|
|
+ log.info("企微用户信息 - orderId: {}, qwUserId: {}, uid: {}, fastGptRoleId: {}, serverId: {}, serverStatus: {}, ipadStatus: {}",
|
|
|
+ orderId, qwUserId,
|
|
|
+ qwUser != null ? qwUser.getUid() : null,
|
|
|
+ qwUser != null ? qwUser.getFastGptRoleId() : null,
|
|
|
+ qwUser != null ? qwUser.getServerId() : null,
|
|
|
+ qwUser != null ? qwUser.getServerStatus() : null,
|
|
|
+ qwUser != null ? qwUser.getIpadStatus() : null);
|
|
|
+
|
|
|
+ if (qwUser != null && qwUser.getUid() != null && qwUser.getFastGptRoleId() != null && qwUser.getServerId() != null && qwUser.getServerStatus() == 1 && qwUser.getIpadStatus() == 1) {
|
|
|
+ FastGptRole fastGptRole = fastGptRoleService.selectFastGptRoleByRoleId(qwUser.getFastGptRoleId());
|
|
|
+
|
|
|
+ log.info("AI角色信息 - orderId: {}, roleId: {}, 物流功能状态: {}",
|
|
|
+ orderId, qwUser.getFastGptRoleId(),
|
|
|
+ fastGptRole != null ? fastGptRole.getLogistics() : "角色不存在");
|
|
|
+
|
|
|
+ if (fastGptRole.getLogistics() == 0) {
|
|
|
+ log.error("物流功能未开启,roleId:" + qwUser.getFastGptRoleId() + "订单号:" + orderId);
|
|
|
+ continue; // 跳过这个联系人,继续处理下一个
|
|
|
+ }
|
|
|
+ WxWorkUserId2VidDTO wxWorkUserId2VidDTO = new WxWorkUserId2VidDTO();
|
|
|
+ wxWorkUserId2VidDTO.setOpenid(Collections.singletonList(externalContact.getExternalUserId()));
|
|
|
+ wxWorkUserId2VidDTO.setUuid(qwUser.getUid());
|
|
|
+
|
|
|
+ log.info("调用企微接口获取用户ID - orderId: {}, externalUserId: {}, uid: {}, serverId: {}",
|
|
|
+ orderId, externalContact.getExternalUserId(), qwUser.getUid(), qwUser.getServerId());
|
|
|
+
|
|
|
+ WxWorkResponseDTO<List<WxWorkVid2UserIdRespDTO>> WxWorkVid2UserIdRespDTO = wxWorkService.UserId2Vid(wxWorkUserId2VidDTO, qwUser.getServerId());
|
|
|
+ List<WxWorkVid2UserIdRespDTO> data = WxWorkVid2UserIdRespDTO.getData();
|
|
|
+
|
|
|
+ log.info("企微接口返回结果 - orderId: {}, 返回数据数量: {}, 返回数据: {}",
|
|
|
+ orderId, data != null ? data.size() : 0, data);
|
|
|
+
|
|
|
+ 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:
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ //你好,这边查询到您购买的XXX(购买套餐)在XXX(时间)已经送到了,送货员电话为XXX(送货员信息)
|
|
|
+ ErpDeliverysRequest erpDeliverysRequest = new ErpDeliverysRequest();
|
|
|
+ erpDeliverysRequest.setCode(order.getOrderCode());
|
|
|
+ ErpDeliverysResponse express = null;
|
|
|
+ express = getDeliver(erpDeliverysRequest);
|
|
|
+ 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 ("0".equals(stateEx) || "1".equals(stateEx) || "2".equals(stateEx)) {
|
|
|
+ if (remark.contains("已收取快件")){
|
|
|
+ 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");
|
|
|
+ }
|
|
|
+ } else if ("202".equals(stateEx)) {
|
|
|
+ if (remark.contains("正在派送")) {
|
|
|
+ sBuilder.append("这边查询到您有一个包裹 ");
|
|
|
+ sBuilder.append("正在派送中\n");
|
|
|
+ sBuilder.append(" 物流单号为:").append(order.getDeliverySn()).append("\n");
|
|
|
+ sBuilder.append("物流信息:").append(remark).append("\n");
|
|
|
+ sBuilder.append("\uD83C\uDF39\uD83C\uDF39\uD83C\uDF39");
|
|
|
+ }
|
|
|
+
|
|
|
+ } else if ("301".equals(stateEx)){
|
|
|
+ if (remark.contains("派送至本人") || remark.contains("签收")) {
|
|
|
+ sBuilder.append("这边查询到您有一个包裹 ");
|
|
|
+ sBuilder.append(" 在").append(tracesDTO.getAcceptTime()).append("已经签收了\n");
|
|
|
+ sBuilder.append(" 物流单号为:").append(order.getDeliverySn()).append("\n");
|
|
|
+ sBuilder.append("物流信息:").append(remark).append("\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ case 5:
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!"".contentEquals(sBuilder)) {
|
|
|
+ //2.发送模板中的文字内容
|
|
|
+ String content = sBuilder.toString();
|
|
|
+ content = content.replace("(有事呼叫我,勿找平台,少一次投诉,多一份感恩)", "");
|
|
|
+
|
|
|
+ log.info("准备发送AI物流消息 - orderId: {}, sendId: {}, 消息内容: {}",
|
|
|
+ orderId, sendId, content);
|
|
|
+
|
|
|
+ WxWorkSendTextMsgDTO wxWorkSendTextMsgDTO = new WxWorkSendTextMsgDTO();
|
|
|
+ wxWorkSendTextMsgDTO.setSend_userid(sendId);
|
|
|
+ wxWorkSendTextMsgDTO.setUuid(qwUser.getUid());
|
|
|
+ wxWorkSendTextMsgDTO.setContent(content);
|
|
|
+ wxWorkSendTextMsgDTO.setIsRoom(false);
|
|
|
+
|
|
|
+ try {
|
|
|
+// wxWorkService.SendTextMsg(wxWorkSendTextMsgDTO, qwUser.getServerId());
|
|
|
+ log.info("AI物流消息发送成功 - orderId: {}, sendId: {}", orderId, sendId);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("AI物流消息发送失败 - orderId: {}, sendId: {}, 错误信息: {}", orderId, sendId, e.getMessage(), e);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.info("未生成有效的消息内容 - orderId: {}, stateEx: {}, sBuilder长度: {}",
|
|
|
+ orderId, stateEx, sBuilder.length());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.warn("企微接口未返回有效的用户ID - orderId: {}, data为空", orderId);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.warn("企微用户配置不完整 - orderId: {}, qwUserId: {}, uid: {}, fastGptRoleId: {}, serverId: {}, serverStatus: {}, ipadStatus: {}",
|
|
|
+ orderId, qwUserId,
|
|
|
+ qwUser.getUid(),
|
|
|
+ qwUser.getFastGptRoleId(),
|
|
|
+ qwUser.getServerId(),
|
|
|
+ qwUser.getServerStatus(),
|
|
|
+ qwUser.getIpadStatus());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.warn("未找到企微用户 - orderId: {}, externalUserId: {}", orderId, externalContact.getExternalUserId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.warn("未找到有效的企微联系人 - orderId: {}, qwExternalContact为空", orderId);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.warn("订单用户ID为空 - orderId: {}", orderId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void cancelOrderLive(LiveOrder order) {
|
|
|
Integer deliveryStatus = order.getDeliveryStatus();
|
|
|
if (deliveryStatus == null || deliveryStatus == 0) {
|