瀏覽代碼

1.商城订单物流同步定时任务 2.互医订单档期统计

wjj 3 天之前
父節點
當前提交
db430f262a

+ 7 - 0
fs-admin/src/main/java/com/fs/company/controller/CompanyDeptController.java

@@ -8,6 +8,7 @@ import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.domain.CompanyDept;
 import com.fs.company.service.ICompanyDeptService;
+import com.fs.his.vo.OptionsVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -100,4 +101,10 @@ public class CompanyDeptController extends BaseController
         List<CompanyDept> depts = companyDeptService.selectCompanyDeptList(dept);
         return AjaxResult.success(companyDeptService.buildDeptTreeSelect(depts));
     }
+
+    @GetMapping("/options")
+    public AjaxResult options() {
+        List<OptionsVO> optionsVOS = companyDeptService.selectCompanyDeptOptions();
+        return AjaxResult.success(optionsVOS);
+    }
 }

+ 27 - 4
fs-admin/src/main/java/com/fs/his/controller/FsStoreOrderController.java

@@ -1,6 +1,8 @@
 package com.fs.his.controller;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
 import java.text.ParseException;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -38,10 +40,7 @@ import com.fs.his.dto.StoreOrderExpressExportDTO;
 import com.fs.his.dto.TracesDTO;
 import com.fs.his.enums.FsStoreOrderLogEnum;
 import com.fs.his.enums.ShipperCodeEnum;
-import com.fs.his.param.FsFollowMsgParam;
-import com.fs.his.param.FsStoreOrderParam;
-import com.fs.his.param.FsStoreOrderSalesParam;
-import com.fs.his.param.FsStoreOrderSetErpPhoneParam;
+import com.fs.his.param.*;
 import com.fs.his.service.*;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.his.vo.*;
@@ -942,4 +941,28 @@ public class FsStoreOrderController extends BaseController
         List<String> list = erpAccounts.stream().map(DFConfigVo::getLoginAccount).collect(Collectors.toList());
         return R.ok().put("data", list);
     }
+
+
+    @GetMapping("/scheduleStatistics")
+    public TableDataInfo scheduleStatistics(FsStoreOrderScheduleStatisticsParam param){
+        PageHelper.startPage(param);
+        List<FsStoreOrderScheduleStatisticsVO> list = fsStoreOrderService.selectScheduleStatisticsVOList(param);
+        if (CollectionUtil.isNotEmpty(list)) {
+            for (FsStoreOrderScheduleStatisticsVO order : list) {
+                if (order.getShippingOrderCount() != 0 && order.getReceiveOrderCount() != 0){
+                    BigDecimal divide = new BigDecimal(order.getReceiveOrderCount()).divide(new BigDecimal(order.getShippingOrderCount()), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+                    DecimalFormat df = new DecimalFormat("#.00");
+                    order.setReceiveOrderRate(df.format(divide)+"%");
+                } else {
+                    order.setReceiveOrderRate("0.00%");
+                }
+            }
+        }
+        TableDataInfo dataTable = new TableDataInfo();
+        dataTable.setCode(HttpStatus.SUCCESS);
+        dataTable.setMsg("查询成功");
+        dataTable.setRows(list);
+        dataTable.setTotal(fsStoreOrderService.selectScheduleStatisticsVOListCount(param));
+        return dataTable;
+    }
 }

+ 27 - 3
fs-admin/src/main/java/com/fs/his/task/Task.java

@@ -10,6 +10,8 @@ import com.fs.fastGpt.domain.FastgptChatVoiceHomo;
 import com.fs.fastGpt.mapper.FastgptChatVoiceHomoMapper;
 import com.fs.fastgptApi.util.AudioUtils;
 import com.fs.fastgptApi.vo.AudioVO;
+import com.fs.hisStore.param.FsStoreOrderExpressEditParam;
+import com.fs.hisStore.service.IFsStoreOrderScrmService;
 import com.fs.sop.domain.QwSopTempVoice;
 import com.alibaba.fastjson.JSONObject;
 import com.baidu.dev2.api.sdk.payment.api.PaymentService;
@@ -227,6 +229,9 @@ public class Task {
     @Autowired
     private IQwExternalContactService qwExternalContactService;
 
+    @Autowired
+    private IFsStoreOrderScrmService fsStoreOrderScrmService;
+
     public static final String SOP_TEMP_VOICE_KEY = "sop:tempVoice";
     public void syncExpressToWx() {
         List<FsWxExpressTask> fsWxExpressTasks = fsWxExpressTaskMapper.selectPendingData();
@@ -1902,6 +1907,7 @@ public class Task {
         }
     }
 
+    //生成订单档期标签
     public void orderSop(){
         logger.info("开始生成档期标签");
         List<FsOrderSopLog> fsOrderSopLogs = fsOrderSopLogMapper.selectFsOrderSopLogNoSopList();
@@ -1938,7 +1944,7 @@ public class Task {
                     }
                     Thread.sleep(1000);
                 } catch (Exception e) {
-                    logger.info("生成档期标签失败,日志id:{}", fsOrderSopLog.getId());
+                    logger.info("生成档期标签失败,日志id:{},原因:{}", fsOrderSopLog.getId(),e.getMessage());
                     continue;
                 }
             }
@@ -1955,7 +1961,7 @@ public class Task {
                     fsStoreOrderService.syncExpress(orderId);
                     Thread.sleep(2000);
                 } catch (Exception e) {
-                    logger.info("同步物流失败,订单号:{}", orderId);
+                    logger.info("同步物流失败,订单号:{},原因:{}", orderId,e.getMessage());
                     continue;
                     //throw new RuntimeException(e);
                 }
@@ -1963,5 +1969,23 @@ public class Task {
         }
     }
 
-
+    //商城订单查询同步物流信息
+    public void queryExpressScrm(){
+        List<Long> orderIds = fsStoreOrderScrmMapper.selectSyncExpressScrm();
+        if (CollectionUtils.isNotEmpty(orderIds)) {
+            for (Long orderId : orderIds) {
+                logger.info("同步物流订单号:{}",orderId);
+                try {
+                    FsStoreOrderExpressEditParam param = new FsStoreOrderExpressEditParam();
+                    param.setOrderId(orderId);
+                    fsStoreOrderScrmService.syncExpress(param);
+                    Thread.sleep(2000);
+                } catch (Exception e) {
+                    logger.info("同步物流失败,订单号:{},原因:{}", orderId,e.getMessage());
+                    continue;
+                    //throw new RuntimeException(e);
+                }
+            }
+        }
+    }
 }

+ 4 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyDeptMapper.java

@@ -1,6 +1,7 @@
 package com.fs.company.mapper;
 
 import com.fs.company.domain.CompanyDept;
+import com.fs.his.vo.OptionsVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
@@ -118,4 +119,7 @@ public interface CompanyDeptMapper
     CompanyDept selectDeptNameBydeptName(@Param("deptName") String deptName);
 
     void deleteCompanyDeptByCompanyIds(Long[] companyIds);
+
+    @Select("select dept_id dictValue,dept_name dictLabel from company_dept where parent_id != 0")
+    List<OptionsVO> selectCompanyDeptOptions();
 }

+ 3 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyDeptService.java

@@ -3,6 +3,7 @@ package com.fs.company.service;
 import com.fs.common.core.domain.entity.SysDept;
 import com.fs.company.domain.CompanyDept;
 import com.fs.company.domain.CompanyDeptTreeSelect;
+import com.fs.his.vo.OptionsVO;
 
 import java.util.List;
 
@@ -90,4 +91,6 @@ public interface ICompanyDeptService
      * @return 部门
      */
     CompanyDept getDefaultCompanyDeptByCompanyId(Long companyId);
+
+    List<OptionsVO> selectCompanyDeptOptions();
 }

+ 7 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyDeptServiceImpl.java

@@ -11,6 +11,7 @@ import com.fs.company.domain.CompanyRole;
 import com.fs.company.mapper.CompanyDeptMapper;
 import com.fs.company.mapper.CompanyRoleMapper;
 import com.fs.company.service.ICompanyDeptService;
+import com.fs.his.vo.OptionsVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -244,6 +245,12 @@ public class CompanyDeptServiceImpl implements ICompanyDeptService
     public CompanyDept getDefaultCompanyDeptByCompanyId(Long companyId) {
         return companyDeptMapper.getTopCompanyDeptByCompanyId(companyId);
     }
+
+    @Override
+    public List<OptionsVO> selectCompanyDeptOptions() {
+        return companyDeptMapper.selectCompanyDeptOptions();
+    }
+
     /**
      * 递归列表
      */

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

@@ -1201,4 +1201,10 @@ public interface FsStoreOrderMapper
 
     @Select("SELECT order_id FROM fs_store_order WHERE `status` = 3 AND refund_status = 0")
     List<Long> selectSyncExpress();
+
+    //订单档期统计
+    List<FsStoreOrderScheduleStatisticsVO> selectScheduleStatisticsVOList(@Param("map") FsStoreOrderScheduleStatisticsParam param);
+
+    //订单档期统计数量
+    Long selectScheduleStatisticsVOListCount(@Param("map") FsStoreOrderScheduleStatisticsParam param);
 }

+ 22 - 0
fs-service/src/main/java/com/fs/his/param/FsStoreOrderScheduleStatisticsParam.java

@@ -0,0 +1,22 @@
+package com.fs.his.param;
+
+import com.fs.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class FsStoreOrderScheduleStatisticsParam extends BaseEntity implements Serializable {
+
+    //档期名称
+    private String tagName;
+
+    //部门id
+    private Long deptId;
+
+    private Integer pageNum;
+
+    private Integer pageSize;
+}

+ 4 - 3
fs-service/src/main/java/com/fs/his/service/IFsStoreOrderService.java

@@ -2,7 +2,6 @@ package com.fs.his.service;
 
 import java.math.BigDecimal;
 import java.text.ParseException;
-import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -12,9 +11,7 @@ import com.fs.company.param.FsStoreStatisticsParam;
 import com.fs.company.vo.FsStoreOrderStatisticsVO;
 import com.fs.company.vo.FsStoreProductStatisticsVO;
 import com.fs.erp.domain.ErpOrder;
-import com.fs.erp.dto.df.BspOrderResponse;
 import com.fs.erp.dto.df.DFConfigVo;
-import com.fs.erp.service.IErpOrderService;
 import com.fs.his.domain.*;
 import com.fs.his.dto.*;
 import com.fs.his.param.*;
@@ -278,4 +275,8 @@ public interface IFsStoreOrderService
      * 查询互联网医院订单金额统计信息
      * */
     List<FsStoreOrderStatsRowVo> selectFsStoreOrderAmountStats(FsStoreOrderAmountStatsQueryDto queryDto);
+
+    List<FsStoreOrderScheduleStatisticsVO> selectScheduleStatisticsVOList(FsStoreOrderScheduleStatisticsParam param);
+
+    Long selectScheduleStatisticsVOListCount(FsStoreOrderScheduleStatisticsParam param);
 }

+ 10 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java

@@ -4728,4 +4728,14 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
 
         return rows;
     }
+
+    @Override
+    public List<FsStoreOrderScheduleStatisticsVO> selectScheduleStatisticsVOList(FsStoreOrderScheduleStatisticsParam param) {
+        return fsStoreOrderMapper.selectScheduleStatisticsVOList(param);
+    }
+
+    @Override
+    public Long selectScheduleStatisticsVOListCount(FsStoreOrderScheduleStatisticsParam param) {
+        return fsStoreOrderMapper.selectScheduleStatisticsVOListCount(param);
+    }
 }

+ 48 - 0
fs-service/src/main/java/com/fs/his/vo/FsStoreOrderScheduleStatisticsVO.java

@@ -0,0 +1,48 @@
+package com.fs.his.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class FsStoreOrderScheduleStatisticsVO {
+
+    //档期标签名称
+    private String tagName;
+
+    //部门id
+    private String deptId;
+
+    //部门名称
+    private String deptName;
+
+    //发货订单金额
+    private BigDecimal shippingOrderAmount;
+
+    //发货订单数量
+    private Long shippingOrderCount;
+
+    //在途订单金额
+    private BigDecimal transitOrderAmount;
+
+    //在途订单数量
+    private Long transitOrderCount;
+
+    //拒收订单金额
+    private BigDecimal rejectOrderAmount;
+
+    //拒收订单数量
+    private Long rejectOrderCount;
+
+    //签收订单金额
+    private BigDecimal receiveOrderAmount;
+
+    //签收订单数量
+    private Long receiveOrderCount;
+
+    //签收率
+    private String receiveOrderRate;
+
+    //进粉数量
+    private Long addCustomerCount;
+}

+ 3 - 0
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderScrmMapper.java

@@ -1221,4 +1221,7 @@ public interface FsStoreOrderScrmMapper
     int updateFsStoreOrderByOrderCode(FsStoreOrderScrm fsStoreOrder);
 
     FsStoreOrderAmountScrmStatsDetailVo selectFsStoreOrderAmountScrmStatsDetail(FsStoreOrderAmountScrmStatsQueryDto queryDto);
+
+    @Select("SELECT order_id FROM fs_store_order_scrm WHERE `status` = 2 AND refund_status = 0")
+    List<Long> selectSyncExpressScrm();
 }

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

@@ -2319,4 +2319,73 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
     </select>
 
+    <select id="selectScheduleStatisticsVOList" resultType="com.fs.his.vo.FsStoreOrderScheduleStatisticsVO">
+        SELECT dis.*,cd.dept_name FROM
+        (
+        SELECT
+        (SELECT dept_id  FROM company_user WHERE user_id = o.company_user_id) as dept_id,
+        CASE
+        WHEN o.tag_names IS NULL OR JSON_LENGTH(o.tag_names) = 0 THEN '无档期'
+        ELSE JSON_UNQUOTE(JSON_EXTRACT(o.tag_names, CONCAT('$[', idx, ']')))
+        END AS tagName,
+        SUM(o.pay_price) as shippingOrderAmount,
+        COUNT(*) as shippingOrderCount,
+        SUM(case WHEN (o.`status` = 3 OR o.`status` = 2) THEN o.pay_price ELSE 0 END) as transitOrderAmount,
+        SUM(case WHEN (o.`status` = 3 OR o.`status` = 2) THEN 1 ELSE 0 END) as transitOrderCount,
+        SUM(CASE WHEN o.delivery_type = '404' THEN o.pay_price ELSE 0 END) AS rejectOrderAmount,
+        SUM(CASE WHEN o.delivery_type = '404' THEN 1 ELSE 0 END) AS rejectOrderCount,
+        SUM(CASE WHEN o.delivery_status = 3 THEN o.pay_price ELSE 0 END) AS receiveOrderAmount,
+        SUM(CASE WHEN o.delivery_status = 3 THEN 1 ELSE 0 END) AS receiveOrderCount,
+        o.company_user_id
+        FROM fs_store_order o
+        LEFT JOIN (
+        SELECT 0 AS idx UNION SELECT 1 UNION SELECT 2 UNION SELECT 3
+        ) AS indices ON idx &lt; JSON_LENGTH(COALESCE(o.tag_names, '[]'))
+        WHERE o.company_user_id IS NOT null AND o.company_user_id != 1 AND o.`status` != -1 AND o.`status` != -2
+        GROUP BY tagName,dept_id) as dis
+        LEFT JOIN company_dept cd ON dis.dept_id = cd.dept_id
+        where 1 = 1
+        <if test="map.tagName != null and map.tagName != '' ">
+            and dis.tagName = #{map.tagName}
+        </if>
+        <if test="map.deptId != null ">
+            and cd.dept_id = #{map.deptId}
+        </if>
+        GROUP BY dis.tagName,dis.dept_id
+    </select>
+
+    <select id="selectScheduleStatisticsVOListCount" resultType="java.lang.Long">
+        SELECT count(*) FROM
+        (
+        SELECT
+        (SELECT dept_id  FROM company_user WHERE user_id = o.company_user_id) as dept_id,
+        CASE
+        WHEN o.tag_names IS NULL OR JSON_LENGTH(o.tag_names) = 0 THEN '无档期'
+        ELSE JSON_UNQUOTE(JSON_EXTRACT(o.tag_names, CONCAT('$[', idx, ']')))
+        END AS tagName,
+        SUM(o.pay_price) as shippingOrderAmount,
+        COUNT(*) as shippingOrderCount,
+        SUM(case WHEN (o.`status` = 3 OR o.`status` = 2) THEN o.pay_price ELSE 0 END) as transitOrderAmount,
+        SUM(case WHEN (o.`status` = 3 OR o.`status` = 2) THEN 1 ELSE 0 END) as transitOrderCount,
+        SUM(CASE WHEN o.delivery_type = '404' THEN o.pay_price ELSE 0 END) AS rejectOrderAmount,
+        SUM(CASE WHEN o.delivery_type = '404' THEN 1 ELSE 0 END) AS rejectOrderCount,
+        SUM(CASE WHEN o.delivery_status = 3 THEN o.pay_price ELSE 0 END) AS receiveOrderAmount,
+        SUM(CASE WHEN o.delivery_status = 3 THEN 1 ELSE 0 END) AS receiveOrderCount,
+        o.company_user_id
+        FROM fs_store_order o
+        LEFT JOIN (
+        SELECT 0 AS idx UNION SELECT 1 UNION SELECT 2 UNION SELECT 3
+        ) AS indices ON idx &lt; JSON_LENGTH(COALESCE(o.tag_names, '[]'))
+        WHERE o.company_user_id IS NOT null AND o.company_user_id != 1 AND o.`status` != -1 AND o.`status` != -2
+        GROUP BY tagName,dept_id) as dis
+        LEFT JOIN company_dept cd ON dis.dept_id = cd.dept_id
+        where 1 = 1
+        <if test="map.tagName != null and map.tagName != '' ">
+            and dis.tagName = #{map.tagName}
+        </if>
+        <if test="map.deptId != null ">
+            and cd.dept_id = #{map.deptId}
+        </if>
+    </select>
+
 </mapper>