瀏覽代碼

Merge remote-tracking branch 'origin/master'

zyp 17 小時之前
父節點
當前提交
724858372f
共有 33 個文件被更改,包括 631 次插入326 次删除
  1. 9 1
      fs-admin/src/main/java/com/fs/his/controller/FsStoreOrderController.java
  2. 45 12
      fs-admin/src/main/java/com/fs/his/controller/HzOMSErpApiController.java
  3. 15 0
      fs-admin/src/main/java/com/fs/his/task/Task.java
  4. 19 15
      fs-company/src/main/java/com/fs/company/controller/qw/SopUserLogsInfoController.java
  5. 14 0
      fs-qwhook/src/main/java/com/fs/app/controller/ApisQwUserController.java
  6. 11 0
      fs-qwhook/src/main/java/com/fs/app/controller/QwUserController.java
  7. 4 1
      fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java
  8. 5 1
      fs-service/src/main/java/com/fs/course/mapper/FsUserCourseVideoMapper.java
  9. 4 0
      fs-service/src/main/java/com/fs/course/param/FsUserCourseVideoParam.java
  10. 2 0
      fs-service/src/main/java/com/fs/course/service/IFsUserCourseVideoService.java
  11. 5 0
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  12. 11 0
      fs-service/src/main/java/com/fs/erp/dto/df/DFCancelOrderResultRequest.java
  13. 1 0
      fs-service/src/main/java/com/fs/erp/dto/df/DFConfigVo.java
  14. 11 0
      fs-service/src/main/java/com/fs/erp/dto/df/DFOrderStatusResultRequest.java
  15. 1 0
      fs-service/src/main/java/com/fs/erp/dto/sdk/df/enums/RequestUrlEnum.java
  16. 3 0
      fs-service/src/main/java/com/fs/erp/service/IErpOrderService.java
  17. 73 8
      fs-service/src/main/java/com/fs/erp/service/impl/DfOrderServiceImpl.java
  18. 6 0
      fs-service/src/main/java/com/fs/erp/service/impl/ErpOrderServiceImpl.java
  19. 5 0
      fs-service/src/main/java/com/fs/erp/service/impl/HzOMSErpOrderServiceImpl.java
  20. 5 0
      fs-service/src/main/java/com/fs/erp/service/impl/JSTErpOrderServiceImpl.java
  21. 5 0
      fs-service/src/main/java/com/fs/erp/service/impl/WdtErpOrderServiceImpl.java
  22. 4 0
      fs-service/src/main/java/com/fs/his/domain/FsStoreOrderDf.java
  23. 3 0
      fs-service/src/main/java/com/fs/his/mapper/FsStoreOrderMapper.java
  24. 8 1
      fs-service/src/main/java/com/fs/his/service/IFsStoreOrderService.java
  25. 249 282
      fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java
  26. 10 0
      fs-service/src/main/java/com/fs/sop/domain/SopUserLogsInfo.java
  27. 22 0
      fs-service/src/main/java/com/fs/sop/mapper/SopUserLogsInfoMapper.java
  28. 3 0
      fs-service/src/main/java/com/fs/sop/service/ISopUserLogsInfoService.java
  29. 17 0
      fs-service/src/main/java/com/fs/sop/service/impl/SopUserLogsInfoServiceImpl.java
  30. 51 0
      fs-service/src/main/java/com/fs/sop/vo/ExtCourseSopWatchLogVO.java
  31. 2 2
      fs-service/src/main/resources/application-config-druid-kyt.yml
  32. 2 2
      fs-service/src/main/resources/application-druid-kyt.yml
  33. 6 1
      fs-service/src/main/resources/mapper/his/FsStoreOrderDfMapper.xml

+ 9 - 1
fs-admin/src/main/java/com/fs/his/controller/FsStoreOrderController.java

@@ -526,7 +526,14 @@ public class FsStoreOrderController extends BaseController
         orderIds.forEach(orderId->{
             try {
                 df.setOrderId(orderId);
-                fsStoreOrderDfService.insertFsStoreOrderDf(df);
+                FsStoreOrderDf temp = fsStoreOrderDfService.selectFsStoreOrderDfByOrderId(df.getOrderId());
+                if (temp != null){
+                    df.setUpdateTime(new Date());
+                    fsStoreOrderDfService.updateFsStoreOrderDf(df);
+                } else {
+                    fsStoreOrderDfService.insertFsStoreOrderDf(df);
+                }
+
                 fsStoreOrderService.createOmsOrder(orderId);
             } catch (ParseException e) {
                 throw new RuntimeException(e);
@@ -547,6 +554,7 @@ public class FsStoreOrderController extends BaseController
                 df.setAppSecret(erpAccount.getDfAppsecret());
                 df.setLoginAccount(loginAccount);
                 df.setMonthlyCard(erpAccount.getMonthlyCard());
+                df.setExpressProductCode(erpAccount.getExpressProductCode());
                 df.setStatus(0);
                 break;
             }

+ 45 - 12
fs-admin/src/main/java/com/fs/his/controller/HzOMSErpApiController.java

@@ -2,26 +2,23 @@ package com.fs.his.controller;
 
 
 import com.fs.common.core.domain.R;
-import com.fs.erp.domain.ErpOrder;
-import com.fs.erp.dto.ErpOrderResponse;
-import com.fs.erp.dto.df.BspOrderResponse;
-import com.fs.erp.dto.sdk.HzOMS.utils.HzOMSUtils;
+import com.fs.common.utils.StringUtils;
 import com.fs.erp.service.IErpOrderService;
-import com.fs.his.domain.FsStoreOrder;
-import com.fs.his.domain.FsVessel;
 import com.fs.his.param.HzOMSErpApiParam;
 import com.fs.his.service.ErpApiService;
 import com.fs.his.service.IFsStoreOrderService;
-import com.fs.his.service.impl.FsStoreOrderServiceImpl;
 import com.fs.his.vo.HzOMSErpResponseVO;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.IOUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 
 /**
  * 瀚智OMS Erp系统推送平数据接口
@@ -29,6 +26,7 @@ import java.util.List;
 
 @RestController
 @RequestMapping("/erp/call")
+@Slf4j
 public class HzOMSErpApiController {
 
     @Autowired
@@ -132,8 +130,43 @@ public class HzOMSErpApiController {
      * 代服管家订单回调
      */
     @PostMapping("/dfNotifyUrl")
-    public R dfOrderResult(@RequestBody BspOrderResponse param)
-    {
-        return fsStoreOrderService.dfOrderResult(param);
+    public R dfOrderResult(HttpServletRequest request){
+        String body = null;
+        try {
+            // 1. 先设置编码
+            request.setCharacterEncoding("UTF-8");
+            // 3. 按 UTF-8 解码
+            body = IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8);
+        } catch (IOException e) {
+            log.error("读取 body 失败", e);
+            return null;
+        }
+        log.info("Body UTF-8: {}", body);
+
+        return StringUtils.isNotBlank(body)
+                ? fsStoreOrderService.dfOrderResult(body)
+                : R.ok();
+    }
+
+    /**
+     * 代服管家订单状态回调
+     */
+    @PostMapping("/receiveWaybillPush")
+    public R receiveWaybillPush(HttpServletRequest request) {
+        String body = null;
+        try {
+            // 1. 先设置编码
+            request.setCharacterEncoding("UTF-8");
+            // 3. 按 UTF-8 解码
+            body = IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8);
+        } catch (IOException e) {
+            log.error("读取 body 失败", e);
+            return null;
+        }
+        log.info("Body UTF-8: {}", body);
+
+        return StringUtils.isNotBlank(body)
+                ? fsStoreOrderService.receiveWaybillPush(body)
+                : R.ok();
     }
 }

+ 15 - 0
fs-admin/src/main/java/com/fs/his/task/Task.java

@@ -302,6 +302,21 @@ public class Task {
 
     }
 
+
+    public void getOrderDeliveryStatus()
+    {
+        IErpOrderService erpOrderService = getErpService();
+        List<FsStoreOrder> orders = null;
+        if (erpOrderService !=null && erpOrderService == dfOrderService){
+            orders = fsStoreOrderMapper.selectShippedOrder();
+            if(orders!=null&& !orders.isEmpty()){
+                for(FsStoreOrder order:orders){
+                    erpOrderService.getOrderDeliveryStatus(order);
+                }
+            }
+        }
+    }
+
     public void CreateOmsAndHis()
     {
         List<Long> omsList = fsStoreOrderMapper.selectFsStoreOrderNoCreateOms();

+ 19 - 15
fs-company/src/main/java/com/fs/company/controller/qw/SopUserLogsInfoController.java

@@ -34,6 +34,7 @@ import org.springframework.web.bind.annotation.*;
 
 import java.io.IOException;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.function.Predicate;
@@ -114,12 +115,6 @@ public class SopUserLogsInfoController extends BaseController
                 });
             }
 
-
-//            Predicate<SopUserLogsInfo> tagFilter = item ->
-//                    sopUserLogsInfo.getTagIds() == null ||
-//                            sopUserLogsInfo.getTagIds().isEmpty() ||
-//                            item.getTagIds().contains(sopUserLogsInfo.getTagIds());
-
             Predicate<SopUserLogsInfo> tagFilter = item -> {
                 String queryTagIds = sopUserLogsInfo.getTagIds();
                 String itemTagIds = item.getTagIds();
@@ -148,25 +143,34 @@ public class SopUserLogsInfoController extends BaseController
 
 
             Predicate<SopUserLogsInfo> timeFilter = item -> {
-                if (StringUtil.strIsNullOrEmpty(sopUserLogsInfo.getEntryTime())) {
+
+                if (StringUtil.strIsNullOrEmpty(sopUserLogsInfo.getInComingSTime())
+                        && StringUtil.strIsNullOrEmpty(sopUserLogsInfo.getInComingETime()) ) {
                     return true;
                 }
                 try {
-                    LocalDate entryDate = LocalDate.parse(
-                            sopUserLogsInfo.getEntryTime(),
-                            DateTimeFormatter.ofPattern("yyyy-MM-dd")
+                    LocalDateTime entryDate = LocalDateTime.parse(item.getInComTime(),
+                            DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
+                    );
+                    LocalDateTime inComingSTime = LocalDateTime.parse(sopUserLogsInfo.getInComingSTime(),
+                            DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
                     );
-                    LocalDate createDate = LocalDate.parse(
-                            item.getInComTime().substring(0, 10),
-                            DateTimeFormatter.ofPattern("yyyy-MM-dd")
+
+                    LocalDateTime inComingETime = LocalDateTime.parse(sopUserLogsInfo.getInComingETime(),
+                            DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
                     );
-                    return entryDate.equals(createDate);
+
+                    return !entryDate.isBefore(inComingSTime) && !entryDate.isAfter(inComingETime);
                 } catch (Exception e) {
                     return false;
                 }
             };
 
-            if (sopUserLogsInfo.getTagIds() != null || !isRemarkEmpty || !StringUtil.strIsNullOrEmpty(sopUserLogsInfo.getEntryTime()) ||!isLevelEmpty) {
+
+            boolean hasTimeFilter = !StringUtil.strIsNullOrEmpty(sopUserLogsInfo.getInComingSTime())
+                    && !StringUtil.strIsNullOrEmpty(sopUserLogsInfo.getInComingETime());
+
+            if (sopUserLogsInfo.getTagIds() != null || !isRemarkEmpty || hasTimeFilter ||!isLevelEmpty) {
                 list = list.stream()
                         .filter(tagFilter.and(remarkFilter).and(timeFilter).and(levelFilter))
                         .collect(Collectors.toList());

+ 14 - 0
fs-qwhook/src/main/java/com/fs/app/controller/ApisQwUserController.java

@@ -21,6 +21,8 @@ import com.fs.qw.vo.QwExternalListByHeavyVO;
 import com.fs.qw.vo.QwTagGroupListVO;
 import com.fs.qw.vo.sidebar.ExternalContactInfoVO;
 import com.fs.qw.vo.sidebar.ExternalContactTagVO;
+import com.fs.sop.service.ISopUserLogsInfoService;
+import com.fs.sop.vo.ExtCourseSopWatchLogVO;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.Api;
@@ -49,6 +51,10 @@ public class ApisQwUserController extends BaseController {
     @Autowired
     private IQwTagGroupService qwTagGroupService;
 
+    @Autowired
+    private ISopUserLogsInfoService iSopUserLogsInfoService;
+
+
     @GetMapping("/details")
     @ApiOperation("会员看课详情")
     public R getUserDetails(@ApiParam(value = "外部联系人id", required = true) @RequestParam Long contactId,
@@ -112,6 +118,14 @@ public class ApisQwUserController extends BaseController {
         return R.ok().put("data", result);
     }
 
+
+    @GetMapping("/extCourseSopWatchLog")
+    @ApiOperation("获取外部联系人按照 营期天数 获取到的今天该看的课")
+    public R getExtCourseSopWatchLog(@RequestParam(value = "qwExternalContactId") Long qwExternalContactId) {
+        List<ExtCourseSopWatchLogVO> tagList = iSopUserLogsInfoService.getExtCourseSopWatchLog(qwExternalContactId);
+        return R.ok().put("data", tagList);
+    }
+
     @GetMapping("/externalContact")
     @ApiOperation("获取侧边栏外部联系人信息")
     public R getExternalContactInfo(@RequestParam(value = "qwExternalContactId") Long qwExternalContactId) {

+ 11 - 0
fs-qwhook/src/main/java/com/fs/app/controller/QwUserController.java

@@ -17,6 +17,8 @@ import com.fs.qw.vo.ExternalContactDetailsVO;
 import com.fs.qw.vo.QwTagGroupListVO;
 import com.fs.qw.vo.sidebar.ExternalContactInfoVO;
 import com.fs.qw.vo.sidebar.ExternalContactTagVO;
+import com.fs.sop.service.ISopUserLogsInfoService;
+import com.fs.sop.vo.ExtCourseSopWatchLogVO;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.Api;
@@ -45,6 +47,9 @@ public class QwUserController extends BaseController {
     @Autowired
     private IQwTagGroupService qwTagGroupService;
 
+    @Autowired
+    private ISopUserLogsInfoService iSopUserLogsInfoService;
+
     @GetMapping("/details")
     @ApiOperation("会员看课详情")
     public R getUserDetails(@ApiParam(value = "外部联系人id", required = true) @RequestParam Long contactId,
@@ -81,6 +86,12 @@ public class QwUserController extends BaseController {
         return R.ok();
     }
 
+    @GetMapping("/extCourseSopWatchLog")
+    @ApiOperation("获取外部联系人按照 营期天数 获取到的今天该看的课")
+    public R getExtCourseSopWatchLog(@RequestParam(value = "qwExternalContactId") Long qwExternalContactId) {
+        List<ExtCourseSopWatchLogVO> tagList = iSopUserLogsInfoService.getExtCourseSopWatchLog(qwExternalContactId);
+        return R.ok().put("data", tagList);
+    }
 
     @GetMapping("/externalContact")
     @ApiOperation("获取侧边栏外部联系人信息")

+ 4 - 1
fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java

@@ -510,7 +510,10 @@ public class CompanyServiceImpl implements ICompanyService
                 SysConfig sysConfig = sysConfigMapper.selectConfigByConfigKey("his.store");
                 StoreConfig fsPayConfig = new Gson().fromJson(sysConfig.getConfigValue(), StoreConfig.class);
                 Integer DeductMoneyRate = fsPayConfig.getDeductMoneyRate();
-                BigDecimal money = order.getPrescribePrice().multiply(new BigDecimal(DeductMoneyRate).multiply(new BigDecimal("0.01")));
+                BigDecimal money = BigDecimal.ZERO;
+                if (DeductMoneyRate != null && DeductMoneyRate > 0) {
+                    money = order.getPrescribePrice().multiply(new BigDecimal(DeductMoneyRate).multiply(new BigDecimal("0.01")));
+                }
                 logger.info("扣除成本:"+order.getOrderCode()+":"+money);
                 company.setMoney(company.getMoney().subtract(money));
                 companyMapper.updateCompany(company);

+ 5 - 1
fs-service/src/main/java/com/fs/course/mapper/FsUserCourseVideoMapper.java

@@ -141,7 +141,8 @@ public interface FsUserCourseVideoMapper
     List<OptionsVO> selectFsUserCourseVodeAllList(Long id);
 
     @Select({"<script> " +
-            "select v.*,p.red_packet_money company_red_packet_money from fs_user_course_video v LEFT JOIN fs_user_course_video_red_package p on p.video_id= v.video_id and p.company_id =#{maps.companyId} " +
+            "select v.*,p.red_packet_money company_red_packet_money from fs_user_course_video v " +
+            "LEFT JOIN fs_user_course_video_red_package p on p.video_id= v.video_id and p.company_id =#{maps.companyId} and p.data_type = 1 " +
             "where v.is_del = 0 and  v.course_id = #{maps.courseId}   " +
             "<if test = ' maps.title!=null and maps.title != \"\" '> " +
             "and v.title = #{maps.title} " +
@@ -212,4 +213,7 @@ public interface FsUserCourseVideoMapper
             "    update_time = NOW() " +  // 添加更新时间
             "WHERE file_key = #{fileKey}")
     void updateFsUserCourseVideoByFileKey(FsUserCourseVideo courseVideo);
+
+    @Select("select title from fs_user_course_video WHERE video_id=#{videoId}")
+    String selectFsUserCourseVideoByVideoForTitle(@Param("videoId") Long videoId);
 }

+ 4 - 0
fs-service/src/main/java/com/fs/course/param/FsUserCourseVideoParam.java

@@ -16,8 +16,12 @@ public class FsUserCourseVideoParam {
     private String title;
     private String redPacketMoney;
     private Long companyId;
+
+    private Integer dataType;
+
     @ApiModelProperty(value = "页码,默认为1")
     private Integer pageNum =1;
+
     @ApiModelProperty(value = "页大小,默认为10")
     private Integer pageSize = 10;
 }

+ 2 - 0
fs-service/src/main/java/com/fs/course/service/IFsUserCourseVideoService.java

@@ -178,4 +178,6 @@ public interface IFsUserCourseVideoService
     R createRoomMiniLink(FsCourseLinkMiniParam param);
 
     FsUserCourseVideo selectByFileKey(String fileKey);
+
+    String selectFsUserCourseVideoByVideoForTitle(Long videoId);
 }

+ 5 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -2049,6 +2049,11 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         return fsUserCourseVideo;
     }
 
+    @Override
+    public String selectFsUserCourseVideoByVideoForTitle(Long videoId) {
+        return fsUserCourseVideoMapper.selectFsUserCourseVideoByVideoForTitle(videoId);
+    }
+
     /**
      * 获取视频时长(优先从Redis获取,不存在则查数据库)
      */

+ 11 - 0
fs-service/src/main/java/com/fs/erp/dto/df/DFCancelOrderResultRequest.java

@@ -0,0 +1,11 @@
+package com.fs.erp.dto.df;
+
+import lombok.Data;
+
+@Data
+public class DFCancelOrderResultRequest {
+    private Integer isCancelSuss;
+    private String loginAccount;
+    private String mailNumber;
+    private String orderNumber;
+}

+ 1 - 0
fs-service/src/main/java/com/fs/erp/dto/df/DFConfigVo.java

@@ -9,6 +9,7 @@ public class DFConfigVo {
     String loginAccount; //登录账号
     String callBackUrl; //回调地址
     String monthlyCard; //月结账号
+    String expressProductCode; //物流产品编码
     String senderName; //寄件人姓名
     String senderPhone;  //寄件人手机
     String senderProvince;  //寄件人省

+ 11 - 0
fs-service/src/main/java/com/fs/erp/dto/df/DFOrderStatusResultRequest.java

@@ -0,0 +1,11 @@
+package com.fs.erp.dto.df;
+
+import lombok.Data;
+
+@Data
+public class DFOrderStatusResultRequest {
+    private Integer status;
+    private Long acceptTime;
+    private String mailNumber; //运单号
+    private String acceptTimeStr;
+}

+ 1 - 0
fs-service/src/main/java/com/fs/erp/dto/sdk/df/enums/RequestUrlEnum.java

@@ -6,6 +6,7 @@ public enum RequestUrlEnum {
     CREAT_ORDER("order/create", "POST"),
     ORDER_RESULT("query/order", "POST"),
     ORDER_DELIVERY("query/route", "GET"),
+    ORDER_DELIVERY_STATUS("query/waybill", "POST"),
     ORDER_CANCEL("order/cancel", "POST");
 
     private final String url;

+ 3 - 0
fs-service/src/main/java/com/fs/erp/service/IErpOrderService.java

@@ -3,6 +3,7 @@ package com.fs.erp.service;
 import com.fs.erp.domain.ErpOrder;
 import com.fs.erp.domain.ErpRefundOrder;
 import com.fs.erp.dto.*;
+import com.fs.his.domain.FsStoreOrder;
 
 public interface IErpOrderService
 {
@@ -14,5 +15,7 @@ public interface IErpOrderService
     ErpOrderQueryResponse getOrder(ErpOrderQueryRequert param);
     BaseResponse refundUpdate(ErpRefundUpdateRequest param);
     ErpOrderResponse finishOrder(ErpOrder order);
+    //代服管家查物流状态
+    void getOrderDeliveryStatus(FsStoreOrder order);
 }
 

+ 73 - 8
fs-service/src/main/java/com/fs/erp/service/impl/DfOrderServiceImpl.java

@@ -15,16 +15,16 @@ import com.fs.erp.domain.ErpRefundOrder;
 import com.fs.erp.dto.*;
 import com.fs.erp.dto.df.*;
 import com.fs.erp.dto.sdk.df.DfClient;
-import com.fs.erp.dto.sdk.df.enums.ExpressProductCodeEnum;
 import com.fs.erp.dto.sdk.df.enums.RequestUrlEnum;
 import com.fs.erp.service.IErpOrderService;
-import com.fs.erp.utils.CommonUtils;
 import com.fs.his.config.FsSysConfig;
 import com.fs.his.domain.*;
 import com.fs.his.enums.FsStoreOrderLogEnum;
 import com.fs.his.mapper.*;
+import com.fs.his.param.FsStoreOrderSalesParam;
 import com.fs.his.service.IFsExpressService;
 import com.fs.his.service.IFsStoreOrderLogsService;
+import com.fs.his.service.IFsStoreOrderService;
 import com.fs.his.utils.ConfigUtil;
 import com.hc.openapi.tool.util.StringUtils;
 import lombok.extern.slf4j.Slf4j;
@@ -75,6 +75,8 @@ public class DfOrderServiceImpl implements IErpOrderService
 
     @Autowired
     private IFsExpressService expressService;
+    @Autowired
+    private IFsStoreOrderService fsStoreOrderService;
 
 
     @Override
@@ -205,6 +207,9 @@ public class DfOrderServiceImpl implements IErpOrderService
             if (order != null) {
                 //获取下单账户
                 FsStoreOrderDf df = fsStoreOrderDfMapper.selectFsStoreOrderDfByOrderId(order.getOrderId());
+                if(df == null){
+                    return null;
+                }
                 Integer sfAccountIndex = getSFAccountIndex(order.getOrderId());
                 if (sfAccountIndex > -1) {
                     Map<String, Object> orderResultQueryParam = new HashMap<>();
@@ -233,6 +238,64 @@ public class DfOrderServiceImpl implements IErpOrderService
         return null;
     }
 
+    @Override
+    public void getOrderDeliveryStatus(FsStoreOrder order) {
+        Map<String, Object> map = new HashMap<>();
+        Integer sfAccountIndex = getSFAccountIndex(order.getOrderId());
+        map.put("orderNumber", order.getOrderCode());
+        map.put("mailNumber", order.getDeliverySn());
+        try {
+            String response = client.execute(RequestUrlEnum.ORDER_DELIVERY_STATUS, map, sfAccountIndex);
+            DFApiResponse dfApiResponse = JSON.parseObject(response, DFApiResponse.class);
+            if ("运单不存在".equals(dfApiResponse.getMsg())){
+                //取消订单
+                FsStoreOrderSalesParam afterSalesParam = new FsStoreOrderSalesParam();
+                afterSalesParam.setOrderId(order.getOrderId());
+                afterSalesParam.setReasons("代服管家取消订单");
+                afterSalesParam.setOperator("代服管家");
+                fsStoreOrderService.afterSales(afterSalesParam);
+                FsStoreOrderDf df = new FsStoreOrderDf();
+                df.setOrderId(order.getOrderId());
+                df.setStatus(2);
+                df.setUpdateTime(new Date());
+                fsStoreOrderDfMapper.updateFsStoreOrderDf(df);
+                log.info("代服管家 订单取消成功: {}", response);
+            }
+            //3.处理请求结果
+            if (dfApiResponse != null && "ok".equals(dfApiResponse.getCode())) {
+                String jsonString = JSON.toJSONString(dfApiResponse.getResult());
+                List<DFOrderStatusResultRequest> requestList = JSON.parseArray(jsonString, DFOrderStatusResultRequest.class);
+                if (requestList != null && !requestList.isEmpty()){
+                    //0待揽收 1已揽收 2运输中 3派送中 4异常件 5退回件 6退回签收 7转寄件 8作废件 9已签收 10 已取消
+                    for (DFOrderStatusResultRequest temp : requestList) {
+                        if (temp.getStatus() == 10){
+                            //取消订单
+                            String mailNumber = temp.getMailNumber();
+                            List<FsStoreOrder> fsStoreOrders = fsStoreOrderMapper.selectFsStoreOrderListByDeliverySn(mailNumber);
+                            if (fsStoreOrders != null && !fsStoreOrders.isEmpty()){
+                                fsStoreOrders.forEach(tempOrder -> {
+                                    FsStoreOrderSalesParam afterSalesParam = new FsStoreOrderSalesParam();
+                                    afterSalesParam.setOrderId(tempOrder.getOrderId());
+                                    afterSalesParam.setReasons("代服管家取消订单");
+                                    afterSalesParam.setOperator("代服管家");
+                                    fsStoreOrderService.afterSales(afterSalesParam);
+                                    FsStoreOrderDf df = new FsStoreOrderDf();
+                                    df.setOrderId(order.getOrderId());
+                                    df.setStatus(2);
+                                    df.setUpdateTime(new Date());
+                                    fsStoreOrderDfMapper.updateFsStoreOrderDf(df);
+                                    log.info("代服管家 订单取消成功: {}", response);
+                                });
+                            }
+                        }
+                    }
+                }
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
     /**
      * 获取erp推送参数
      *
@@ -266,11 +329,11 @@ public class DfOrderServiceImpl implements IErpOrderService
                 Map<String, Object> orderResultQueryParam = new HashMap<>();
                 orderResultQueryParam.put("orderNumber", order.getPlatform_code());
                 orderResultQueryParam.put("exInterfaceType", df.getStatus());
-//                try {
-//                    getOrderResult(orderResultQueryParam,sfAccountIndex);
-//                } catch (Exception e) {
-//
-//                }
+                try {
+                    getOrderResult(orderResultQueryParam,sfAccountIndex);
+                } catch (Exception e) {
+                    log.info("推送订单完成,查询订单问题{}", e.getMessage());
+                }
                 ErpOrderResponse erpOrderResponse = new ErpOrderResponse();
                 erpOrderResponse.setCode(order.getPlatform_code());
                 erpOrderResponse.setSuccess(true);
@@ -293,6 +356,7 @@ public class DfOrderServiceImpl implements IErpOrderService
         df.setAppSecret(config.getDfAppsecret());
         df.setLoginAccount(config.getLoginAccount());
         df.setMonthlyCard(config.getMonthlyCard());
+        df.setExpressProductCode(config.getExpressProductCode());
         df.setTotalPrice(fsStoreOrder.getPayMoney());
         df.setPlatformPrice(fsStoreOrder.getPayPrice());
         df.setStatus(1);
@@ -323,6 +387,7 @@ public class DfOrderServiceImpl implements IErpOrderService
         }
         String loginAccount = config.getLoginAccount();
         vo.setMonthlyCard(config.getMonthlyCard()); //月结卡号
+        vo.setExpressProductCode(config.getExpressProductCode()); //物流产品编码
 
 
         vo.setLoginAccount(loginAccount); //代服系统登录账号
@@ -345,11 +410,11 @@ public class DfOrderServiceImpl implements IErpOrderService
             orderPayMethod = 2;
             // 货到付款金额 = 物流代收金额-优惠金额
             vo.setCollectingMoney(fsStoreOrder.getPayDelivery().subtract(couponPrice).doubleValue());
+            vo.setCollectionCardNumber(config.getMonthlyCard()); // 就是月结账号
         }
         //订单付款方式 1:在线支付 2:货到付款
         //如果填了2,代收金额必须大于0,代收卡号必填
         vo.setOrderPayMethod(orderPayMethod);
-        vo.setExpressProductCode(ExpressProductCodeEnum.LAND.getValue()); //物流产品编码 默认陆运包裹
 
         vo.setConsignmentNumber(Integer.valueOf(Math.toIntExact(fsStoreOrder.getTotalNum()))); //托寄物数量 必填
 

+ 6 - 0
fs-service/src/main/java/com/fs/erp/service/impl/ErpOrderServiceImpl.java

@@ -9,6 +9,7 @@ import com.fs.erp.dto.*;
 import com.fs.erp.service.IErpOrderService;
 import com.fs.erp.utils.CommonUtils;
 import com.fs.his.config.FsSysConfig;
+import com.fs.his.domain.FsStoreOrder;
 import com.fs.his.utils.ConfigUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -132,4 +133,9 @@ public class ErpOrderServiceImpl implements IErpOrderService
     public ErpOrderResponse finishOrder(ErpOrder order) {
         return null;
     }
+
+    @Override
+    public void getOrderDeliveryStatus(FsStoreOrder order) {
+
+    }
 }

+ 5 - 0
fs-service/src/main/java/com/fs/erp/service/impl/HzOMSErpOrderServiceImpl.java

@@ -151,6 +151,11 @@ public class HzOMSErpOrderServiceImpl implements IErpOrderService {
         return null;
     }
 
+    @Override
+    public void getOrderDeliveryStatus(FsStoreOrder order) {
+
+    }
+
     /**
      * 构建瀚智创建订单参数
      *

+ 5 - 0
fs-service/src/main/java/com/fs/erp/service/impl/JSTErpOrderServiceImpl.java

@@ -360,5 +360,10 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
     public ErpOrderResponse finishOrder(ErpOrder order) {
         return null;
     }
+
+    @Override
+    public void getOrderDeliveryStatus(FsStoreOrder order) {
+
+    }
 }
 

+ 5 - 0
fs-service/src/main/java/com/fs/erp/service/impl/WdtErpOrderServiceImpl.java

@@ -883,6 +883,11 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
         return new ErpOrderResponse();
     }
 
+    @Override
+    public void getOrderDeliveryStatus(FsStoreOrder order) {
+
+    }
+
     public static String convertToSnakeCase(Object obj) {
         SerializeConfig config = new SerializeConfig();
         config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;

+ 4 - 0
fs-service/src/main/java/com/fs/his/domain/FsStoreOrderDf.java

@@ -38,6 +38,10 @@ public class FsStoreOrderDf extends BaseEntity{
     @Excel(name = "顺丰月结账户")
     private String monthlyCard;
 
+    /** 顺丰月结账户 */
+    @Excel(name = "顺丰月结账户")
+    private String expressProductCode;
+
     /** 订单总价 */
     @Excel(name = "订单总价")
     private BigDecimal totalPrice;

+ 3 - 0
fs-service/src/main/java/com/fs/his/mapper/FsStoreOrderMapper.java

@@ -1094,4 +1094,7 @@ public interface FsStoreOrderMapper
     int updateStoreOrderDeliveryInfo(@Param("order") FsStoreOrder order);
     @Update("UPDATE fs_store_order SET delivery_code = #{deliveryCode} WHERE extend_order_id = #{extendOrderId}")
     int updateFsStoreOrderByExtendOrderId(@Param("extendOrderId")String extendOrderId,@Param("deliveryCode")String deliveryCode);
+
+    @Select("select * from fs_store_order where  `status`=3 and extend_order_id is not null and delivery_sn is not null")
+    List<FsStoreOrder> selectShippedOrder();
 }

+ 8 - 1
fs-service/src/main/java/com/fs/his/service/IFsStoreOrderService.java

@@ -226,7 +226,7 @@ public interface IFsStoreOrderService
 
     int updateStoreOrderDeliveryInfo(FsStoreOrder order);
 
-    R dfOrderResult(BspOrderResponse param);
+    R dfOrderResult(String body);
 
     R syncDfExpress(Long id);
 
@@ -238,4 +238,11 @@ public interface IFsStoreOrderService
     ExpressInfoDTO getDfExpressInfoDTO(FsStoreOrder order);
 
     List<DFConfigVo> getErpAccount();
+
+    /**
+     * 代服订单状态推送
+     * @param body
+     * @return
+     */
+    R receiveWaybillPush(String body);
 }

File diff suppressed because it is too large
+ 249 - 282
fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java


+ 10 - 0
fs-service/src/main/java/com/fs/sop/domain/SopUserLogsInfo.java

@@ -63,6 +63,16 @@ public class SopUserLogsInfo implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd")
     private String entryTime;
 
+    //进线时间开始年月日时分秒
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private String inComingSTime;
+
+    //进线时间结束年月日时分秒
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private String inComingETime;
+
     @TableField(exist = false)
     private Integer level;
 

+ 22 - 0
fs-service/src/main/java/com/fs/sop/mapper/SopUserLogsInfoMapper.java

@@ -6,6 +6,7 @@ import com.fs.sop.domain.SopUserLogsInfo;
 import com.fs.sop.params.BatchSopUserLogsInfoParamU;
 import com.fs.sop.params.DeleteQwSopParam;
 import com.fs.sop.params.SopUserLogsInfoDelParam;
+import com.fs.sop.vo.ExtCourseSopWatchLogVO;
 import com.fs.sop.vo.SopUserLogsInfoVOE;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -210,4 +211,25 @@ public interface SopUserLogsInfoMapper {
     @DataSource(DataSourceType.SOP)
     @Select("SELECT create_time,fs_user_id  FROM sop_user_logs_info where sop_id = #{sopId} ")
     List<SopUserLogsInfo> selectFsUserIdSopUserLogsInfoBySopId(@Param("sopId")String sopId);
+
+    @DataSource(DataSourceType.SOP)
+    @Select("<script>" +
+            "SELECT\n" +
+            "  qs.id as sopId,\n" +
+            "\tqs.`name` as sopName,\n" +
+            "  MAX(qstr.course_id) AS course_id,\n" +
+            "  MAX(qstr.video_id) AS video_id,\n" +
+            "  sul.start_time,\n" +
+            "  DATEDIFF(CURRENT_DATE, sul.start_time) + 1 AS count_days\n" +
+            "FROM\n" +
+            "  `sop_user_logs_info` suli \n" +
+            "  LEFT JOIN sop_user_logs sul ON suli.user_logs_id = sul.id\n" +
+            "  INNER JOIN qw_sop qs ON qs.id = sul.sop_id AND qs.`status` IN (2,3,4)\n" +
+            "  LEFT JOIN qw_sop_temp_day qsts ON qs.temp_id = qsts.temp_id AND qsts.day_num = DATEDIFF(CURRENT_DATE, sul.start_time) + 1 \n" +
+            "  LEFT JOIN qw_sop_temp_rules qstr ON qsts.id = qstr.day_id AND qstr.content_type = 2 \n" +
+            "WHERE\n" +
+            "  suli.external_id = #{qwExtContactId} AND qstr.video_id IS NOT NULL \n" +
+            "GROUP BY qsts.id, sul.start_time "+
+            "</script>")
+    List<ExtCourseSopWatchLogVO> getExtCourseSopWatchLog(@Param("qwExtContactId") Long qwExternalContactId);
 }

+ 3 - 0
fs-service/src/main/java/com/fs/sop/service/ISopUserLogsInfoService.java

@@ -4,6 +4,7 @@ import com.fs.common.core.domain.R;
 import com.fs.sop.domain.SopUserLogsInfo;
 import com.fs.sop.params.BatchSopUserLogsInfoParam;
 import com.fs.sop.params.SendUserLogsInfoMsgParam;
+import com.fs.sop.vo.ExtCourseSopWatchLogVO;
 import com.fs.sop.vo.SopUserLogsInfoVOE;
 
 import java.util.List;
@@ -71,4 +72,6 @@ public interface ISopUserLogsInfoService {
     public R batchUpdateSopUserLogsInfoToTime(BatchSopUserLogsInfoParam param);
     public R sendUserLogsInfoMsg(SendUserLogsInfoMsgParam param);
     public R sendUserLogsInfoMsgType(SendUserLogsInfoMsgParam param);
+
+    public List<ExtCourseSopWatchLogVO> getExtCourseSopWatchLog(Long qwExternalContactId);
 }

+ 17 - 0
fs-service/src/main/java/com/fs/sop/service/impl/SopUserLogsInfoServiceImpl.java

@@ -19,6 +19,7 @@ import com.fs.course.mapper.FsCourseLinkMapper;
 import com.fs.course.mapper.FsCourseWatchLogMapper;
 import com.fs.course.param.FsCourseLinkCreateParam;
 import com.fs.course.service.IFsCourseLinkService;
+import com.fs.course.service.IFsUserCourseVideoService;
 import com.fs.fastGpt.domain.FastGptChatReplaceWords;
 import com.fs.fastGpt.mapper.FastGptChatReplaceWordsMapper;
 import com.fs.qw.domain.*;
@@ -47,6 +48,7 @@ import com.fs.sop.params.SopUserLogsParamByDate;
 import com.fs.sop.service.IQwSopService;
 import com.fs.sop.service.ISopUserLogsInfoService;
 import com.fs.sop.service.ISopUserLogsService;
+import com.fs.sop.vo.ExtCourseSopWatchLogVO;
 import com.fs.sop.vo.QwCreateLinkByAppVO;
 import com.fs.sop.vo.SopUserLogsInfoVOE;
 import com.fs.sop.vo.SopUserLogsVo;
@@ -141,6 +143,9 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
     @Autowired
     private IQwCompanyService iQwCompanyService;
 
+    @Autowired
+    private IFsUserCourseVideoService iFsUserCourseVideoService;
+
 
     @Autowired
     private CompanyUserMapper companyUserMapper;
@@ -867,6 +872,18 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
         return null;
     }
 
+    @Override
+    public List<ExtCourseSopWatchLogVO> getExtCourseSopWatchLog(Long qwExternalContactId) {
+
+        List<ExtCourseSopWatchLogVO> watchLogVOList = sopUserLogsInfoMapper.getExtCourseSopWatchLog(qwExternalContactId);
+
+        watchLogVOList.forEach(item->{
+            item.setTitle(iFsUserCourseVideoService.selectFsUserCourseVideoByVideoForTitle(item.getVideoId()));
+        });
+
+        return watchLogVOList;
+    }
+
     private R processQwSopLogsBySendMsg(SendUserLogsInfoMsgParam param,Integer draftStrategy) {
 
 

+ 51 - 0
fs-service/src/main/java/com/fs/sop/vo/ExtCourseSopWatchLogVO.java

@@ -0,0 +1,51 @@
+package com.fs.sop.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class ExtCourseSopWatchLogVO {
+
+    /**
+    * sop任务编号
+    */
+    private String sopId;
+
+    /**
+    * sop任务名称
+    */
+    private String sopName;
+
+    /**
+    * 课程Id
+    */
+    private Long courseId;
+
+    /**
+    * 课节Id
+    */
+    private Long videoId;
+
+    /**
+    * 课节标题
+    */
+    private String title;
+
+
+    /**
+    * 营期时间
+     */
+    @Excel(name = "营期时间",dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date startTime;
+
+    /**
+    * 营期天数
+    */
+    private Integer countDays;
+
+
+}

+ 2 - 2
fs-service/src/main/resources/application-config-druid-kyt.yml

@@ -15,8 +15,8 @@ wx:
         token:
         aesKey:
         msgDataFormat: JSON
-      - appid:    #宽益堂
-        secret:
+      - appid: wx034403a0b275a492   #宽益堂
+        secret: a6f775b389aa9575fa837380f45e1e88
         token: Ncbnd7lJvkripVOpyTFAna6NAWCxCrvC
         aesKey: HlEiBB55eaWUaeBVAQO3cWKWPYv1vOVQSq7nFNICw4E
         msgDataFormat: JSON

+ 2 - 2
fs-service/src/main/resources/application-druid-kyt.yml

@@ -32,7 +32,7 @@ spring:
         master:
           url: jdbc:mysql://172.17.0.3:3306/fs_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
           username: root
-          password: Ylrz_tM8/oW6$pU9|tJ6@
+          password: Ylrztek250218!3@.
         # 从库数据源
         slave:
           # 从数据源开关/默认关闭
@@ -87,7 +87,7 @@ spring:
         master:
           url: jdbc:mysql://172.17.0.3:3306/sop?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
           username: root
-          password: Ylrz_tM8/oW6$pU9|tJ6@
+          password: Ylrztek250218!3@.
         # 初始连接数
         initialSize: 5
         # 最小连接池数量

+ 6 - 1
fs-service/src/main/resources/mapper/his/FsStoreOrderDfMapper.xml

@@ -11,6 +11,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="appSecret"    column="app_secret"    />
         <result property="loginAccount"    column="login_account"    />
         <result property="monthlyCard"    column="monthly_card"    />
+        <result property="expressProductCode"    column="express_product_code"    />
         <result property="totalPrice"    column="total_price"    />
         <result property="platformPrice"    column="platform_price"    />
         <result property="status"    column="status"    />
@@ -19,7 +20,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectFsStoreOrderDfVo">
-        select order_id, order_code, app_key, app_secret, login_account, monthly_card, total_price, platform_price, status, create_time, update_time from fs_store_order_df
+        select order_id, order_code, app_key, app_secret, login_account, monthly_card, express_product_code,total_price, platform_price, status, create_time, update_time from fs_store_order_df
     </sql>
 
     <select id="selectFsStoreOrderDfList" parameterType="FsStoreOrderDf" resultMap="FsStoreOrderDfResult">
@@ -30,6 +31,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="appSecret != null  and appSecret != ''"> and app_secret = #{appSecret}</if>
             <if test="loginAccount != null  and loginAccount != ''"> and login_account = #{loginAccount}</if>
             <if test="monthlyCard != null  and monthlyCard != ''"> and monthly_card = #{monthlyCard}</if>
+            <if test="expressProductCode != null  and expressProductCode != ''"> and express_product_code = #{expressProductCode}</if>
             <if test="totalPrice != null "> and total_price = #{totalPrice}</if>
             <if test="platformPrice != null "> and platform_price = #{platformPrice}</if>
             <if test="status != null "> and status = #{status}</if>
@@ -50,6 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="appSecret != null and appSecret != ''">app_secret,</if>
             <if test="loginAccount != null and loginAccount != ''">login_account,</if>
             <if test="monthlyCard != null and monthlyCard != ''">monthly_card,</if>
+            <if test="expressProductCode != null and expressProductCode != ''">express_product_code,</if>
             <if test="totalPrice != null">total_price,</if>
             <if test="platformPrice != null">platform_price,</if>
             <if test="status != null">status,</if>
@@ -63,6 +66,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="appSecret != null and appSecret != ''">#{appSecret},</if>
             <if test="loginAccount != null and loginAccount != ''">#{loginAccount},</if>
             <if test="monthlyCard != null and monthlyCard != ''">#{monthlyCard},</if>
+            <if test="expressProductCode != null and expressProductCode != ''">#{expressProductCode},</if>
             <if test="totalPrice != null">#{totalPrice},</if>
             <if test="platformPrice != null">#{platformPrice},</if>
             <if test="status != null">#{status},</if>
@@ -79,6 +83,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="appSecret != null and appSecret != ''">app_secret = #{appSecret},</if>
             <if test="loginAccount != null and loginAccount != ''">login_account = #{loginAccount},</if>
             <if test="monthlyCard != null and monthlyCard != ''">monthly_card = #{monthlyCard},</if>
+            <if test="expressProductCode != null and expressProductCode != ''">express_product_code = #{expressProductCode},</if>
             <if test="totalPrice != null">total_price = #{totalPrice},</if>
             <if test="platformPrice != null">platform_price = #{platformPrice},</if>
             <if test="status != null">status = #{status},</if>

Some files were not shown because too many files changed in this diff