浏览代码

外部订单财务审核改造

wangxy 2 周之前
父节点
当前提交
be9649f9da
共有 23 个文件被更改,包括 1009 次插入16 次删除
  1. 13 0
      fs-company/src/main/java/com/fs/company/controller/company/CompanyDeptController.java
  2. 1 0
      fs-company/src/main/java/com/fs/company/controller/store/FsExternalOrderController.java
  3. 2 3
      fs-company/src/main/java/com/fs/company/controller/store/FsFinanceOrderController.java
  4. 60 0
      fs-company/src/main/java/com/fs/company/controller/store/FsRejectNoReturnController.java
  5. 89 0
      fs-company/src/main/java/com/fs/company/controller/store/FsRejectReportController.java
  6. 89 0
      fs-company/src/main/java/com/fs/company/controller/store/FsReturnReportController.java
  7. 53 0
      fs-company/src/main/java/com/fs/company/controller/store/FsSignDetailReportController.java
  8. 60 0
      fs-company/src/main/java/com/fs/company/controller/store/FsSignReportController.java
  9. 1 11
      fs-service/src/main/java/com/fs/course/service/impl/FsCourseLinkServiceImpl.java
  10. 17 0
      fs-service/src/main/java/com/fs/his/domain/FsExternalOrder.java
  11. 3 0
      fs-service/src/main/java/com/fs/his/domain/vo/FsExternalOrderListVO.java
  12. 41 0
      fs-service/src/main/java/com/fs/his/domain/vo/FsRejectNoReturnReportVO.java
  13. 64 0
      fs-service/src/main/java/com/fs/his/domain/vo/FsRejectOrderReportVO.java
  14. 28 0
      fs-service/src/main/java/com/fs/his/domain/vo/FsRejectProductReportVO.java
  15. 66 0
      fs-service/src/main/java/com/fs/his/domain/vo/FsReturnOrderReportVO.java
  16. 31 0
      fs-service/src/main/java/com/fs/his/domain/vo/FsReturnProductReportVO.java
  17. 40 0
      fs-service/src/main/java/com/fs/his/domain/vo/FsSignDetailReportVO.java
  18. 53 0
      fs-service/src/main/java/com/fs/his/domain/vo/FsSignOrderReportVO.java
  19. 21 0
      fs-service/src/main/java/com/fs/his/mapper/FsExternalOrderMapper.java
  20. 10 0
      fs-service/src/main/java/com/fs/his/service/IFsExternalOrderService.java
  21. 25 0
      fs-service/src/main/java/com/fs/his/service/impl/FsExternalOrderServiceImpl.java
  22. 5 0
      fs-service/src/main/java/com/fs/his/vo/FsExternalOrderDetailVO.java
  23. 237 2
      fs-service/src/main/resources/mapper/his/FsExternalOrderMapper.xml

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

@@ -125,6 +125,19 @@ public class CompanyDeptController extends BaseController
         List<CompanyDept> depts = deptService.selectCompanyDeptListByDeptAndParent(dept);
         return AjaxResult.success(deptService.buildDeptTreeSelect(depts));
     }
+
+    /**
+     * 根据公司ID获取部门下拉树列表(不依赖当前登录用户)
+     */
+    @GetMapping("/selectDeptTreeByCompanyId")
+    public AjaxResult selectDeptTreeByCompanyId(@RequestParam("companyId") Long companyId)
+    {
+        CompanyDept dept = new CompanyDept();
+        dept.setCompanyId(companyId);
+        dept.setStatus("0");
+        List<CompanyDept> depts = deptService.selectCompanyDeptList(dept);
+        return AjaxResult.success(deptService.buildDeptTreeSelect(depts));
+    }
     /**
      * 加载对应角色部门列表树
      */

+ 1 - 0
fs-company/src/main/java/com/fs/company/controller/store/FsExternalOrderController.java

@@ -75,6 +75,7 @@ public class FsExternalOrderController extends BaseController {
     }
 
     @Log(title = "修改外部订单", businessType = BusinessType.UPDATE)
+    @PreAuthorize("@ss.hasPermi('store:externalOrder:edit')")
     @PostMapping("/edit")
     public AjaxResult edit(@RequestBody FsExternalOrder fsExternalOrder) {
         LoginUser loginUser = SecurityUtils.getLoginUser();

+ 2 - 3
fs-company/src/main/java/com/fs/company/controller/store/FsFinanceOrderController.java

@@ -35,7 +35,6 @@ public class FsFinanceOrderController extends BaseController {
     @GetMapping("/list")
     @Log(title = "财务外部订单列表", businessType = BusinessType.OTHER)
     @PreAuthorize("@ss.hasPermi('store:financeOrder:list')")
-    @DataScope(deptAlias = "cu", userAlias = "cu")
     public TableDataInfo list(FsExternalOrder fsExternalOrder) {
         startPage();
         LoginUser loginUser = SecurityUtils.getLoginUser();
@@ -90,8 +89,7 @@ public class FsFinanceOrderController extends BaseController {
             }
 
             BigDecimal totalPrice = order.getTotalPrice() != null ? order.getTotalPrice() : BigDecimal.ZERO;
-            BigDecimal payPrice = order.getPayPrice() != null ? order.getPayPrice() : BigDecimal.ZERO;
-            BigDecimal collectionPrice = totalPrice.subtract(payPrice);
+            BigDecimal collectionPrice = order.getCollectionPrice();
             BigDecimal importReturnPrice = dto.getReturnPrice() != null ? dto.getReturnPrice() : BigDecimal.ZERO;
 
             // 回款金额与代收金额一致性校验
@@ -107,6 +105,7 @@ public class FsFinanceOrderController extends BaseController {
             FsExternalOrder update = new FsExternalOrder();
             update.setOrderId(order.getOrderId());
             update.setReturnPrice(importReturnPrice);
+            update.setDeliverySn(dto.getDeliverySn());
             update.setUpdateBy(updateBy);
             if (dto.getReturnTime() != null) {
                 update.setUpdateTime(dto.getReturnTime());

+ 60 - 0
fs-company/src/main/java/com/fs/company/controller/store/FsRejectNoReturnController.java

@@ -0,0 +1,60 @@
+package com.fs.company.controller.store;
+
+import com.fs.common.annotation.DataScope;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.framework.security.LoginUser;
+import com.fs.framework.security.SecurityUtils;
+import com.fs.his.domain.FsExternalOrder;
+import com.fs.his.domain.vo.FsRejectNoReturnReportVO;
+import com.fs.his.service.IFsExternalOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 拒收未还货查询
+ */
+@RestController
+@RequestMapping("/store/rejectNoReturn")
+public class FsRejectNoReturnController extends BaseController {
+
+    @Autowired
+    private IFsExternalOrderService fsExternalOrderService;
+
+    /**
+     * 拒收未还货列表
+     */
+    @GetMapping("/list")
+    @Log(title = "拒收未还货查询列表", businessType = BusinessType.OTHER)
+    @PreAuthorize("@ss.hasPermi('store:rejectNoReturn:list')")
+    public TableDataInfo list(FsExternalOrder fsExternalOrder) {
+        startPage();
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsExternalOrder.setCompanyId(loginUser.getCompany().getCompanyId());
+        List<FsRejectNoReturnReportVO> list = fsExternalOrderService.selectRejectNoReturnReport(fsExternalOrder);
+        return getDataTable(list);
+    }
+
+    /**
+     * 拒收未还货导出
+     */
+    @GetMapping("/export")
+    @Log(title = "拒收未还货查询导出", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('store:rejectNoReturn:list')")
+    public AjaxResult export(FsExternalOrder fsExternalOrder) {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsExternalOrder.setCompanyId(loginUser.getCompany().getCompanyId());
+        List<FsRejectNoReturnReportVO> list = fsExternalOrderService.selectRejectNoReturnReport(fsExternalOrder);
+        ExcelUtil<FsRejectNoReturnReportVO> util = new ExcelUtil<>(FsRejectNoReturnReportVO.class);
+        return util.exportExcel(list, "拒收未还货报表");
+    }
+}

+ 89 - 0
fs-company/src/main/java/com/fs/company/controller/store/FsRejectReportController.java

@@ -0,0 +1,89 @@
+package com.fs.company.controller.store;
+
+import com.fs.common.annotation.DataScope;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.framework.security.LoginUser;
+import com.fs.framework.security.SecurityUtils;
+import com.fs.his.domain.FsExternalOrder;
+import com.fs.his.domain.vo.FsRejectOrderReportVO;
+import com.fs.his.domain.vo.FsRejectProductReportVO;
+import com.fs.his.service.IFsExternalOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 拒收明细报表
+ */
+@RestController
+@RequestMapping("/store/rejectReport")
+public class FsRejectReportController extends BaseController {
+
+    @Autowired
+    private IFsExternalOrderService fsExternalOrderService;
+
+    /**
+     * 拒收明细 - 订单维度列表
+     */
+    @GetMapping("/orderList")
+    @Log(title = "拒收明细报表订单维度", businessType = BusinessType.OTHER)
+    @PreAuthorize("@ss.hasPermi('store:rejectReport:list')")
+    public TableDataInfo orderList(FsExternalOrder fsExternalOrder) {
+        startPage();
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsExternalOrder.setCompanyId(loginUser.getCompany().getCompanyId());
+        List<FsRejectOrderReportVO> list = fsExternalOrderService.selectRejectOrderReport(fsExternalOrder);
+        return getDataTable(list);
+    }
+
+    /**
+     * 拒收明细 - 订单维度导出
+     */
+    @GetMapping("/orderExport")
+    @Log(title = "拒收明细报表订单维度导出", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('store:rejectReport:list')")
+    public AjaxResult orderExport(FsExternalOrder fsExternalOrder) {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsExternalOrder.setCompanyId(loginUser.getCompany().getCompanyId());
+        List<FsRejectOrderReportVO> list = fsExternalOrderService.selectRejectOrderReport(fsExternalOrder);
+        ExcelUtil<FsRejectOrderReportVO> util = new ExcelUtil<>(FsRejectOrderReportVO.class);
+        return util.exportExcel(list, "拒收明细订单报表");
+    }
+
+    /**
+     * 拒收明细 - 产品维度列表
+     */
+    @GetMapping("/productList")
+    @Log(title = "拒收明细报表产品维度", businessType = BusinessType.OTHER)
+    @PreAuthorize("@ss.hasPermi('store:rejectReport:list')")
+    public TableDataInfo productList(FsExternalOrder fsExternalOrder) {
+        startPage();
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsExternalOrder.setCompanyId(loginUser.getCompany().getCompanyId());
+        List<FsRejectProductReportVO> list = fsExternalOrderService.selectRejectProductReport(fsExternalOrder);
+        return getDataTable(list);
+    }
+
+    /**
+     * 拒收明细 - 产品维度导出
+     */
+    @GetMapping("/productExport")
+    @Log(title = "拒收明细报表产品维度导出", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('store:rejectReport:list')")
+    public AjaxResult productExport(FsExternalOrder fsExternalOrder) {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsExternalOrder.setCompanyId(loginUser.getCompany().getCompanyId());
+        List<FsRejectProductReportVO> list = fsExternalOrderService.selectRejectProductReport(fsExternalOrder);
+        ExcelUtil<FsRejectProductReportVO> util = new ExcelUtil<>(FsRejectProductReportVO.class);
+        return util.exportExcel(list, "拒收明细产品报表");
+    }
+}

+ 89 - 0
fs-company/src/main/java/com/fs/company/controller/store/FsReturnReportController.java

@@ -0,0 +1,89 @@
+package com.fs.company.controller.store;
+
+import com.fs.common.annotation.DataScope;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.framework.security.LoginUser;
+import com.fs.framework.security.SecurityUtils;
+import com.fs.his.domain.FsExternalOrder;
+import com.fs.his.domain.vo.FsReturnOrderReportVO;
+import com.fs.his.domain.vo.FsReturnProductReportVO;
+import com.fs.his.mapper.FsExternalOrderMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 回款明细报表
+ */
+@RestController
+@RequestMapping("/store/returnReport")
+public class FsReturnReportController extends BaseController {
+
+    @Autowired
+    private FsExternalOrderMapper fsExternalOrderMapper;
+
+    /**
+     * 回款明细 - 订单维度列表
+     */
+    @GetMapping("/orderList")
+    @Log(title = "回款明细报表订单维度", businessType = BusinessType.OTHER)
+    @PreAuthorize("@ss.hasPermi('store:returnReport:list')")
+    public TableDataInfo orderList(FsExternalOrder fsExternalOrder) {
+        startPage();
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsExternalOrder.setCompanyId(loginUser.getCompany().getCompanyId());
+        List<FsReturnOrderReportVO> list = fsExternalOrderMapper.selectReturnOrderReport(fsExternalOrder);
+        return getDataTable(list);
+    }
+
+    /**
+     * 回款明细 - 订单维度导出
+     */
+    @GetMapping("/orderExport")
+    @Log(title = "回款明细报表订单维度导出", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('store:returnReport:list')")
+    public AjaxResult orderExport(FsExternalOrder fsExternalOrder) {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsExternalOrder.setCompanyId(loginUser.getCompany().getCompanyId());
+        List<FsReturnOrderReportVO> list = fsExternalOrderMapper.selectReturnOrderReport(fsExternalOrder);
+        ExcelUtil<FsReturnOrderReportVO> util = new ExcelUtil<>(FsReturnOrderReportVO.class);
+        return util.exportExcel(list, "回款明细订单报表");
+    }
+
+    /**
+     * 回款明细 - 产品维度列表
+     */
+    @GetMapping("/productList")
+    @Log(title = "回款明细报表产品维度", businessType = BusinessType.OTHER)
+    @PreAuthorize("@ss.hasPermi('store:returnReport:list')")
+    public TableDataInfo productList(FsExternalOrder fsExternalOrder) {
+        startPage();
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsExternalOrder.setCompanyId(loginUser.getCompany().getCompanyId());
+        List<FsReturnProductReportVO> list = fsExternalOrderMapper.selectReturnProductReport(fsExternalOrder);
+        return getDataTable(list);
+    }
+
+    /**
+     * 回款明细 - 产品维度导出
+     */
+    @GetMapping("/productExport")
+    @Log(title = "回款明细报表产品维度导出", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('store:returnReport:list')")
+    public AjaxResult productExport(FsExternalOrder fsExternalOrder) {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsExternalOrder.setCompanyId(loginUser.getCompany().getCompanyId());
+        List<FsReturnProductReportVO> list = fsExternalOrderMapper.selectReturnProductReport(fsExternalOrder);
+        ExcelUtil<FsReturnProductReportVO> util = new ExcelUtil<>(FsReturnProductReportVO.class);
+        return util.exportExcel(list, "回款明细产品报表");
+    }
+}

+ 53 - 0
fs-company/src/main/java/com/fs/company/controller/store/FsSignDetailReportController.java

@@ -0,0 +1,53 @@
+package com.fs.company.controller.store;
+
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.his.domain.FsExternalOrder;
+import com.fs.his.domain.vo.FsSignDetailReportVO;
+import com.fs.his.service.IFsExternalOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 签收情况明细表
+ */
+@RestController
+@RequestMapping("/store/signDetailReport")
+public class FsSignDetailReportController extends BaseController {
+
+    @Autowired
+    private IFsExternalOrderService fsExternalOrderService;
+
+    /**
+     * 签收情况明细列表(所有公司、部门维度统计)
+     */
+    @GetMapping("/list")
+    @Log(title = "签收情况明细表查询", businessType = BusinessType.OTHER)
+    @PreAuthorize("@ss.hasPermi('store:signDetailReport:list')")
+    public TableDataInfo list(FsExternalOrder fsExternalOrder) {
+        startPage();
+        List<FsSignDetailReportVO> list = fsExternalOrderService.selectSignDetailReport(fsExternalOrder);
+        return getDataTable(list);
+    }
+
+    /**
+     * 签收情况明细导出
+     */
+    @GetMapping("/export")
+    @Log(title = "签收情况明细表导出", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('store:signDetailReport:list')")
+    public AjaxResult export(FsExternalOrder fsExternalOrder) {
+        List<FsSignDetailReportVO> list = fsExternalOrderService.selectSignDetailReport(fsExternalOrder);
+        ExcelUtil<FsSignDetailReportVO> util = new ExcelUtil<>(FsSignDetailReportVO.class);
+        return util.exportExcel(list, "签收情况明细表");
+    }
+}

+ 60 - 0
fs-company/src/main/java/com/fs/company/controller/store/FsSignReportController.java

@@ -0,0 +1,60 @@
+package com.fs.company.controller.store;
+
+import com.fs.common.annotation.DataScope;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.framework.security.LoginUser;
+import com.fs.framework.security.SecurityUtils;
+import com.fs.his.domain.FsExternalOrder;
+import com.fs.his.domain.vo.FsSignOrderReportVO;
+import com.fs.his.service.IFsExternalOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 签收未回款查询报表
+ */
+@RestController
+@RequestMapping("/store/signReport")
+public class FsSignReportController extends BaseController {
+
+    @Autowired
+    private IFsExternalOrderService fsExternalOrderService;
+
+    /**
+     * 签收未回款列表
+     */
+    @GetMapping("/list")
+    @Log(title = "签收未回款查询列表", businessType = BusinessType.OTHER)
+    @PreAuthorize("@ss.hasPermi('store:signReport:list')")
+    public TableDataInfo list(FsExternalOrder fsExternalOrder) {
+        startPage();
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsExternalOrder.setCompanyId(loginUser.getCompany().getCompanyId());
+        List<FsSignOrderReportVO> list = fsExternalOrderService.selectSignOrderReport(fsExternalOrder);
+        return getDataTable(list);
+    }
+
+    /**
+     * 签收未回款导出
+     */
+    @GetMapping("/export")
+    @Log(title = "签收未回款查询导出", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('store:signReport:list')")
+    public AjaxResult export(FsExternalOrder fsExternalOrder) {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsExternalOrder.setCompanyId(loginUser.getCompany().getCompanyId());
+        List<FsSignOrderReportVO> list = fsExternalOrderService.selectSignOrderReport(fsExternalOrder);
+        ExcelUtil<FsSignOrderReportVO> util = new ExcelUtil<>(FsSignOrderReportVO.class);
+        return util.exportExcel(list, "签收未回款报表");
+    }
+}

+ 1 - 11
fs-service/src/main/java/com/fs/course/service/impl/FsCourseLinkServiceImpl.java

@@ -840,17 +840,7 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService
         if (StringUtils.isNotBlank(appId) && appIdList.contains(appId)) {
             currentIndex = appIdList.indexOf(appId);
         }
-
-        String cacheKey = buildUrlLinkCacheKey(linkStr, appIdList, appIdList.get(currentIndex));
-        String cached = redisCache.getCacheObject(cacheKey);
-        if (StringUtils.isNotEmpty(cached)) {
-            log.info("Scheme Link命中缓存,linkStr:{},appIdList:{}", linkStr, appIdList);
-            return cached;
-        }
-
-        String result = generateWxAppLinkWithRetry(linkStr, appIdList, currentIndex);
-        cacheUrlLinkIfSuccess(cacheKey, result);
-        return result;
+        return generateWxAppLinkWithRetry(linkStr, appIdList, currentIndex);
     }
 
     @Override

+ 17 - 0
fs-service/src/main/java/com/fs/his/domain/FsExternalOrder.java

@@ -139,6 +139,15 @@ public class FsExternalOrder extends BaseEntity
     @Excel(name = "退款日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date refundTime;
 
+    /** 拒收回退时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "拒收回退时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date rejectReturnTime;
+
+    /** 是否还货 1是 2否 */
+    @Excel(name = "是否还货", readConverterExp = "1=是,2=否")
+    private Integer isReturnGoods;
+
     /** 订单类型  1.外部订单  2。套餐包订单 3.问诊订单 4.积分订单*/
     @Excel(name = "订单类型", readConverterExp = "1=外部订单,2=套餐包,3=问诊,4=积分")
     private Integer orderType;
@@ -173,4 +182,12 @@ public class FsExternalOrder extends BaseEntity
     /** 发货结束时间 */
     @TableField(exist = false)
     private String deliveryEndTime;
+
+    /** 产品名筛选 */
+    @TableField(exist = false)
+    private String productName;
+
+    /** 部门id筛选 */
+    @TableField(exist = false)
+    private Long deptId;
 }

+ 3 - 0
fs-service/src/main/java/com/fs/his/domain/vo/FsExternalOrderListVO.java

@@ -82,6 +82,9 @@ public class FsExternalOrderListVO {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date refundTime;
 
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date rejectReturnTime;
+
     private String remark;
 
     private String auditor;

+ 41 - 0
fs-service/src/main/java/com/fs/his/domain/vo/FsRejectNoReturnReportVO.java

@@ -0,0 +1,41 @@
+package com.fs.his.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 拒收未还货查询表
+ */
+@Data
+public class FsRejectNoReturnReportVO {
+
+    @Excel(name = "订单编号")
+    private String orderCode;
+
+    @Excel(name = "运单号")
+    private String deliverySn;
+
+    @Excel(name = "会员姓名")
+    private String userName;
+
+    @Excel(name = "地址")
+    private String userAddress;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "发货日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date deliveryTime;
+
+    @Excel(name = "金额")
+    private BigDecimal totalPrice;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "跟单时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date followTime;
+
+    @Excel(name = "快递公司")
+    private String deliveryName;
+}

+ 64 - 0
fs-service/src/main/java/com/fs/his/domain/vo/FsRejectOrderReportVO.java

@@ -0,0 +1,64 @@
+package com.fs.his.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 拒收明细报表 - 拒收退回日期时间维度
+ */
+@Data
+public class FsRejectOrderReportVO {
+
+    @Excel(name = "订单编号")
+    private String orderCode;
+
+    @Excel(name = "快递单号")
+    private String deliverySn;
+
+    @Excel(name = "会员姓名")
+    private String userName;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "订单日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date externalCreateTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "发货日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date deliveryTime;
+
+    @Excel(name = "金额")
+    private BigDecimal totalPrice;
+
+    @Excel(name = "快递公司")
+    private String deliveryName;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "跟单时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date followTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "拒收退回日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date rejectReturnTime;
+
+    @Excel(name = "拒收人")
+    private String rejectUser;
+
+    @Excel(name = "电话1")
+    private String userPhone;
+
+    @Excel(name = "电话2")
+    private String memberPhone;
+
+    @Excel(name = "销售姓名")
+    private String companyUserName;
+
+    @Excel(name = "订购产品")
+    private String productNames;
+
+    @Excel(name = "地址")
+    private String userAddress;
+}

+ 28 - 0
fs-service/src/main/java/com/fs/his/domain/vo/FsRejectProductReportVO.java

@@ -0,0 +1,28 @@
+package com.fs.his.domain.vo;
+
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 拒收明细报表 - 拒收产品维度
+ */
+@Data
+public class FsRejectProductReportVO {
+
+    @Excel(name = "订购产品")
+    private String productName;
+
+    @Excel(name = "快递公司")
+    private String deliveryName;
+
+    @Excel(name = "数量")
+    private Long num;
+
+    @Excel(name = "金额")
+    private BigDecimal totalPrice;
+
+    /** 分组用,不导出 */
+    private Long productId;
+}

+ 66 - 0
fs-service/src/main/java/com/fs/his/domain/vo/FsReturnOrderReportVO.java

@@ -0,0 +1,66 @@
+package com.fs.his.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 回款明细报表 - 回款时间维度
+ */
+@Data
+public class FsReturnOrderReportVO {
+
+    @Excel(name = "订单编号")
+    private String orderCode;
+
+    @Excel(name = "快递单号")
+    private String deliverySn;
+
+    @Excel(name = "姓名")
+    private String userName;
+
+    @Excel(name = "地址")
+    private String userAddress;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "订单日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date externalCreateTime;
+
+    @Excel(name = "定金")
+    private BigDecimal payPrice;
+
+    @Excel(name = "金额")
+    private BigDecimal totalPrice;
+
+    @Excel(name = "快递公司")
+    private String deliveryName;
+
+    @Excel(name = "回款人")
+    private String returnUser;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "回款日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date returnTime;
+
+    @Excel(name = "电话1")
+    private String userPhone;
+
+    @Excel(name = "电话2")
+    private String memberPhone;
+
+    @Excel(name = "销售")
+    private String companyUserName;
+
+    @Excel(name = "部门")
+    private String deptName;
+
+    @Excel(name = "订购产品")
+    private String productNames;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "发货日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date deliveryTime;
+}

+ 31 - 0
fs-service/src/main/java/com/fs/his/domain/vo/FsReturnProductReportVO.java

@@ -0,0 +1,31 @@
+package com.fs.his.domain.vo;
+
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 回款明细报表 - 回款产品维度
+ */
+@Data
+public class FsReturnProductReportVO {
+
+    @Excel(name = "部门")
+    private String deptName;
+
+    @Excel(name = "快递公司")
+    private String deliveryName;
+
+    @Excel(name = "订购产品")
+    private String productName;
+
+    /** 分组用,不导出 */
+    private Long productId;
+
+    @Excel(name = "数量")
+    private Long num;
+
+    @Excel(name = "金额")
+    private BigDecimal totalPrice;
+}

+ 40 - 0
fs-service/src/main/java/com/fs/his/domain/vo/FsSignDetailReportVO.java

@@ -0,0 +1,40 @@
+package com.fs.his.domain.vo;
+
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 签收情况明细表
+ */
+@Data
+public class FsSignDetailReportVO {
+
+    @Excel(name = "订单类型", readConverterExp = "1=外部订单,2=套餐包,3=问诊,4=积分")
+    private Integer orderType;
+
+    @Excel(name = "发货数量")
+    private Integer deliveryCount;
+
+    @Excel(name = "发货金额")
+    private BigDecimal deliveryAmount;
+
+    @Excel(name = "签收数量")
+    private Integer signCount;
+
+    @Excel(name = "签收金额")
+    private BigDecimal signAmount;
+
+    @Excel(name = "单数签收率")
+    private String orderSignRate;
+
+    @Excel(name = "金额签收率")
+    private String amountSignRate;
+
+    @Excel(name = "部门")
+    private String deptName;
+
+    @Excel(name = "公司")
+    private String companyName;
+}

+ 53 - 0
fs-service/src/main/java/com/fs/his/domain/vo/FsSignOrderReportVO.java

@@ -0,0 +1,53 @@
+package com.fs.his.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 签收未回款查询表 - 订单维度
+ */
+@Data
+public class FsSignOrderReportVO {
+
+    @Excel(name = "订单编号")
+    private String orderCode;
+
+    @Excel(name = "运单号")
+    private String deliverySn;
+
+    @Excel(name = "会员姓名")
+    private String userName;
+
+    @Excel(name = "地址")
+    private String userAddress;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "发货日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date deliveryTime;
+
+    @Excel(name = "定金")
+    private BigDecimal payPrice;
+
+    @Excel(name = "代收金额")
+    private BigDecimal collectionPrice;
+
+    @Excel(name = "订单总金额")
+    private BigDecimal totalPrice;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "跟单时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date followTime;
+
+    @Excel(name = "快递公司")
+    private String deliveryName;
+
+    @Excel(name = "部门")
+    private String deptName;
+
+    @Excel(name = "公司")
+    private String companyName;
+}

+ 21 - 0
fs-service/src/main/java/com/fs/his/mapper/FsExternalOrderMapper.java

@@ -5,6 +5,13 @@ import java.util.List;
 import com.fs.his.domain.FsExternalOrder;
 import com.fs.his.domain.vo.FsExternalOrderListVO;
 import com.fs.his.domain.vo.FsFinanceOrderListVO;
+import com.fs.his.domain.vo.FsReturnOrderReportVO;
+import com.fs.his.domain.vo.FsReturnProductReportVO;
+import com.fs.his.domain.vo.FsRejectOrderReportVO;
+import com.fs.his.domain.vo.FsRejectProductReportVO;
+import com.fs.his.domain.vo.FsRejectNoReturnReportVO;
+import com.fs.his.domain.vo.FsSignOrderReportVO;
+import com.fs.his.domain.vo.FsSignDetailReportVO;
 import com.fs.his.vo.FsExternalOrderDetailVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -42,4 +49,18 @@ public interface FsExternalOrderMapper {
     List<FsExternalOrder> selectSignedOrdersWithoutAudit();
 
     List<FsFinanceOrderListVO> selectFinanceOrderListVO(FsExternalOrder fsExternalOrder);
+
+    List<FsReturnOrderReportVO> selectReturnOrderReport(FsExternalOrder fsExternalOrder);
+
+    List<FsReturnProductReportVO> selectReturnProductReport(FsExternalOrder fsExternalOrder);
+
+    List<FsRejectOrderReportVO> selectRejectOrderReport(FsExternalOrder fsExternalOrder);
+
+    List<FsRejectProductReportVO> selectRejectProductReport(FsExternalOrder fsExternalOrder);
+
+    List<FsSignOrderReportVO> selectSignOrderReport(FsExternalOrder fsExternalOrder);
+
+    List<FsRejectNoReturnReportVO> selectRejectNoReturnReport(FsExternalOrder fsExternalOrder);
+
+    List<FsSignDetailReportVO> selectSignDetailReport(FsExternalOrder fsExternalOrder);
 }

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

@@ -69,4 +69,14 @@ public interface IFsExternalOrderService {
      * 同步外部订单物流状态
      */
     R syncExpress(Long orderId);
+
+    List<com.fs.his.domain.vo.FsRejectOrderReportVO> selectRejectOrderReport(FsExternalOrder fsExternalOrder);
+
+    List<com.fs.his.domain.vo.FsRejectProductReportVO> selectRejectProductReport(FsExternalOrder fsExternalOrder);
+
+    List<com.fs.his.domain.vo.FsSignOrderReportVO> selectSignOrderReport(FsExternalOrder fsExternalOrder);
+
+    List<com.fs.his.domain.vo.FsRejectNoReturnReportVO> selectRejectNoReturnReport(FsExternalOrder fsExternalOrder);
+
+    List<com.fs.his.domain.vo.FsSignDetailReportVO> selectSignDetailReport(FsExternalOrder fsExternalOrder);
 }

+ 25 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsExternalOrderServiceImpl.java

@@ -910,4 +910,29 @@ public class FsExternalOrderServiceImpl implements IFsExternalOrderService {
         
         return null;
     }
+
+    @Override
+    public List<com.fs.his.domain.vo.FsRejectOrderReportVO> selectRejectOrderReport(FsExternalOrder fsExternalOrder) {
+        return fsExternalOrderMapper.selectRejectOrderReport(fsExternalOrder);
+    }
+
+    @Override
+    public List<com.fs.his.domain.vo.FsRejectProductReportVO> selectRejectProductReport(FsExternalOrder fsExternalOrder) {
+        return fsExternalOrderMapper.selectRejectProductReport(fsExternalOrder);
+    }
+
+    @Override
+    public List<com.fs.his.domain.vo.FsSignOrderReportVO> selectSignOrderReport(FsExternalOrder fsExternalOrder) {
+        return fsExternalOrderMapper.selectSignOrderReport(fsExternalOrder);
+    }
+
+    @Override
+    public List<com.fs.his.domain.vo.FsRejectNoReturnReportVO> selectRejectNoReturnReport(FsExternalOrder fsExternalOrder) {
+        return fsExternalOrderMapper.selectRejectNoReturnReport(fsExternalOrder);
+    }
+
+    @Override
+    public List<com.fs.his.domain.vo.FsSignDetailReportVO> selectSignDetailReport(FsExternalOrder fsExternalOrder) {
+        return fsExternalOrderMapper.selectSignDetailReport(fsExternalOrder);
+    }
 }

+ 5 - 0
fs-service/src/main/java/com/fs/his/vo/FsExternalOrderDetailVO.java

@@ -100,6 +100,9 @@ public class FsExternalOrderDetailVO implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date refundTime;
 
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date rejectReturnTime;
+
     private String auditor;
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -107,6 +110,8 @@ public class FsExternalOrderDetailVO implements Serializable {
 
     private String diseaseName;
 
+    private Integer isReturnGoods;
+
     private String companyName;
 
     private String deptName;

+ 237 - 2
fs-service/src/main/resources/mapper/his/FsExternalOrderMapper.xml

@@ -48,10 +48,12 @@
         <result property="refundPrice"         column="refund_price"         />
         <result property="returnPrice"        column="return_price"        />
         <result property="refundTime"          column="refund_time"          />
+        <result property="rejectReturnTime"    column="reject_return_time"   />
         <result property="orderType"           column="order_type"           />
         <result property="auditor"             column="auditor"              />
         <result property="auditTime"           column="audit_time"           />
         <result property="diseaseName"         column="disease_name"         />
+        <result property="isReturnGoods"      column="is_return_goods"      />
     </resultMap>
 
     <sql id="selectFsExternalOrderVo">
@@ -62,7 +64,7 @@
                remark, external_create_time, is_sync, sync_msg, create_time, create_by, update_time, update_by,
                extend_order_id, store_id, receiver_phone,
                collection_price, follow_time,
-               refund_price, return_price, refund_time, order_type, auditor, audit_time, disease_name
+               refund_price, return_price, refund_time, reject_return_time, order_type, auditor, audit_time, disease_name, is_return_goods
         from fs_external_order
     </sql>
 
@@ -143,10 +145,12 @@
             <if test="refundPrice != null">refund_price,</if>
             <if test="returnPrice != null">return_price,</if>
             <if test="refundTime != null">refund_time,</if>
+            <if test="rejectReturnTime != null">reject_return_time,</if>
             <if test="orderType != null">order_type,</if>
             <if test="auditor != null and auditor != ''">auditor,</if>
             <if test="auditTime != null">audit_time,</if>
             <if test="diseaseName != null and diseaseName != ''">disease_name,</if>
+            <if test="isReturnGoods != null">is_return_goods,</if>
             create_by,
             create_time
         </trim>
@@ -189,10 +193,12 @@
             <if test="refundPrice != null">#{refundPrice},</if>
             <if test="returnPrice != null">#{returnPrice},</if>
             <if test="refundTime != null">#{refundTime},</if>
+            <if test="rejectReturnTime != null">#{rejectReturnTime},</if>
             <if test="orderType != null">#{orderType},</if>
             <if test="auditor != null and auditor != ''">#{auditor},</if>
             <if test="auditTime != null">#{auditTime},</if>
             <if test="diseaseName != null and diseaseName != ''">#{diseaseName},</if>
+            <if test="isReturnGoods != null">#{isReturnGoods},</if>
             #{createBy},
             sysdate()
         </trim>
@@ -239,10 +245,12 @@
             <if test="refundPrice != null">refund_price = #{refundPrice},</if>
             <if test="returnPrice != null">return_price = #{returnPrice},</if>
             <if test="refundTime != null">refund_time = #{refundTime},</if>
+            <if test="rejectReturnTime != null">reject_return_time = #{rejectReturnTime},</if>
             <if test="orderType != null">order_type = #{orderType},</if>
             <if test="auditor != null and auditor != ''">auditor = #{auditor},</if>
             <if test="auditTime != null">audit_time = #{auditTime},</if>
             <if test="diseaseName != null">disease_name = #{diseaseName},</if>
+            <if test="isReturnGoods != null">is_return_goods = #{isReturnGoods},</if>
             update_by = #{updateBy},
             update_time = #{updateTime}
         </trim>
@@ -301,6 +309,7 @@
             o.deposit_return_time AS depositReturnTime,
             o.refund_price AS refundPrice,
             o.refund_time AS refundTime,
+            o.reject_return_time AS rejectReturnTime,
             o.remark,
             o.auditor,
             o.audit_time AS auditTime,
@@ -397,9 +406,11 @@
             o.deposit_return_time AS depositReturnTime,
             o.refund_price AS refundPrice,
             o.refund_time AS refundTime,
+            o.reject_return_time AS rejectReturnTime,
             o.auditor,
             o.audit_time AS auditTime,
             o.disease_name AS diseaseName,
+            o.is_return_goods AS isReturnGoods,
             o.external_create_time AS externalCreateTime,
             o.create_time AS createTime,
             c.company_name AS companyName,
@@ -468,11 +479,235 @@
             </if>
             <if test="deliveryStartTime != null and deliveryStartTime != ''"> AND o.delivery_time >= #{deliveryStartTime}</if>
             <if test="deliveryEndTime != null and deliveryEndTime != ''"> AND o.delivery_time &lt;= #{deliveryEndTime}</if>
-            ${params.dataScope}
         </where>
         GROUP BY o.order_id
         ORDER BY o.create_time DESC
     </select>
 
+    <!-- 回款明细报表 - 回款时间维度 -->
+    <select id="selectReturnOrderReport" parameterType="FsExternalOrder" resultType="com.fs.his.domain.vo.FsReturnOrderReportVO">
+        SELECT
+            o.order_code AS orderCode,
+            o.delivery_sn AS deliverySn,
+            o.user_name AS userName,
+            o.user_address AS userAddress,
+            o.create_time AS externalCreateTime,
+            o.pay_price AS payPrice,
+            o.total_price AS totalPrice,
+            o.delivery_name AS deliveryName,
+            o.update_by AS returnUser,
+            o.update_time AS returnTime,
+            o.user_phone AS userPhone,
+            o.receiver_phone AS memberPhone,
+            cu.nick_name AS companyUserName,
+            d.dept_name AS deptName,
+            GROUP_CONCAT(oi.product_name SEPARATOR ',') AS productNames,
+            o.delivery_time AS deliveryTime
+        FROM fs_external_order o
+        LEFT JOIN company c ON o.company_id = c.company_id
+        LEFT JOIN company_user cu ON o.company_user_id = cu.user_id
+        LEFT JOIN company_dept d ON cu.dept_id = d.dept_id
+        LEFT JOIN fs_external_order_item oi ON o.order_id = oi.order_id
+        LEFT JOIN fs_user u ON o.user_id = u.user_id
+        <where>
+            o.status = 4
+            <if test="orderCode != null and orderCode != ''"> AND o.order_code = #{orderCode}</if>
+            <if test="deliverySn != null and deliverySn != ''"> AND o.delivery_sn = #{deliverySn}</if>
+            <if test="userName != null and userName != ''"> AND o.user_name LIKE CONCAT('%', #{userName}, '%')</if>
+            <if test="userAddress != null and userAddress != ''">
+                AND o.user_address LIKE CONCAT('%', #{userAddress}, '%')
+            </if>
+            <if test="deliveryStartTime != null and deliveryStartTime != ''"> AND o.delivery_time >= #{deliveryStartTime}</if>
+            <if test="deliveryEndTime != null and deliveryEndTime != ''"> AND o.delivery_time &lt;= #{deliveryEndTime}</if>
+            <if test="companyId != null"> AND o.company_id = #{companyId}</if>
+        </where>
+        GROUP BY o.order_id,o.update_time
+        ORDER BY o.order_id DESC
+    </select>
+
+    <!-- 回款明细报表 - 回款产品维度 -->
+    <select id="selectReturnProductReport" parameterType="FsExternalOrder" resultType="com.fs.his.domain.vo.FsReturnProductReportVO">
+        SELECT
+            d.dept_name AS deptName,
+            o.delivery_name AS deliveryName,
+            oi.product_name AS productName,
+            oi.product_id AS productId,
+            SUM(oi.num) AS num,
+            SUM(oi.price * oi.num) AS totalPrice
+        FROM fs_external_order o
+        LEFT JOIN company_user cu ON o.company_user_id = cu.user_id
+        LEFT JOIN company_dept d ON cu.dept_id = d.dept_id
+        INNER JOIN fs_external_order_item oi ON o.order_id = oi.order_id
+        <where>
+            o.status = 4
+            <if test="productName != null and productName != ''"> AND oi.product_name LIKE CONCAT('%', #{productName}, '%')</if>
+        </where>
+        GROUP BY d.dept_name, o.delivery_name, oi.product_id, oi.product_name
+        ORDER BY d.dept_name, o.delivery_name, oi.product_name
+    </select>
+
+    <!-- 拒收明细报表 - 拒收退回日期时间维度 -->
+    <select id="selectRejectOrderReport" parameterType="FsExternalOrder" resultType="com.fs.his.domain.vo.FsRejectOrderReportVO">
+        SELECT
+            o.order_code AS orderCode,
+            o.delivery_sn AS deliverySn,
+            o.user_name AS userName,
+            o.create_time AS externalCreateTime,
+            o.delivery_time AS deliveryTime,
+            o.total_price AS totalPrice,
+            o.delivery_name AS deliveryName,
+            o.follow_time AS followTime,
+            o.reject_return_time AS rejectReturnTime,
+            o.update_by AS rejectUser,
+            o.user_phone AS userPhone,
+            o.receiver_phone AS memberPhone,
+            cu.nick_name AS companyUserName,
+            GROUP_CONCAT(oi.product_name SEPARATOR ',') AS productNames,
+            o.user_address AS userAddress
+        FROM fs_external_order o
+        LEFT JOIN company c ON o.company_id = c.company_id
+        LEFT JOIN company_user cu ON o.company_user_id = cu.user_id
+        LEFT JOIN company_dept d ON cu.dept_id = d.dept_id
+        LEFT JOIN fs_external_order_item oi ON o.order_id = oi.order_id
+        LEFT JOIN fs_user u ON o.user_id = u.user_id
+        <where>
+            o.delivery_status IN (4, 5, 6)
+            <if test="orderCode != null and orderCode != ''"> AND o.order_code = #{orderCode}</if>
+            <if test="deliverySn != null and deliverySn != ''"> AND o.delivery_sn = #{deliverySn}</if>
+            <if test="userName != null and userName != ''"> AND o.user_name LIKE CONCAT('%', #{userName}, '%')</if>
+            <if test="userAddress != null and userAddress != ''">
+                AND o.user_address LIKE CONCAT('%', #{userAddress}, '%')
+            </if>
+            <if test="deliveryStartTime != null and deliveryStartTime != ''"> AND o.delivery_time >= #{deliveryStartTime}</if>
+            <if test="deliveryEndTime != null and deliveryEndTime != ''"> AND o.delivery_time &lt;= #{deliveryEndTime}</if>
+            <if test="companyId != null"> AND o.company_id = #{companyId}</if>
+        </where>
+        GROUP BY o.order_id,o.reject_return_time
+        ORDER BY o.order_id DESC
+    </select> 
+
+    <!-- 拒收明细报表 - 拒收产品维度 -->
+    <select id="selectRejectProductReport" parameterType="FsExternalOrder" resultType="com.fs.his.domain.vo.FsRejectProductReportVO">
+        SELECT
+            oi.product_name AS productName,
+            o.delivery_name AS deliveryName,
+            SUM(oi.num) AS num,
+            SUM(oi.price * oi.num) AS totalPrice,
+            oi.product_id AS productId
+        FROM fs_external_order o
+        LEFT JOIN company_user cu ON o.company_user_id = cu.user_id
+        LEFT JOIN company_dept d ON cu.dept_id = d.dept_id
+        INNER JOIN fs_external_order_item oi ON o.order_id = oi.order_id
+        <where>
+            o.delivery_status IN (4, 5, 6)
+            <if test="productName != null and productName != ''"> AND oi.product_name LIKE CONCAT('%', #{productName}, '%')</if>
+            <if test="companyId != null"> AND o.company_id = #{companyId}</if>
+        </where>
+        GROUP BY o.delivery_name, oi.product_id, oi.product_name
+        ORDER BY o.delivery_name, oi.product_name
+    </select>
+
+    <!-- 签收未回款报表 -->
+    <select id="selectSignOrderReport" parameterType="FsExternalOrder" resultType="com.fs.his.domain.vo.FsSignOrderReportVO">
+        SELECT
+            o.order_code AS orderCode,
+            o.delivery_sn AS deliverySn,
+            o.user_name AS userName,
+            o.user_address AS userAddress,
+            o.delivery_time AS deliveryTime,
+            o.pay_price AS payPrice,
+            o.collection_price AS collectionPrice,
+            o.total_price AS totalPrice,
+            o.follow_time AS followTime,
+            o.delivery_name AS deliveryName,
+            d.dept_name AS deptName,
+            c.company_name AS companyName
+        FROM fs_external_order o
+        LEFT JOIN company c ON o.company_id = c.company_id
+        LEFT JOIN company_user cu ON o.company_user_id = cu.user_id
+        LEFT JOIN company_dept d ON cu.dept_id = d.dept_id
+        <where>
+            o.delivery_status = 3 AND o.status != 4
+            <if test="orderCode != null and orderCode != ''"> AND o.order_code = #{orderCode}</if>
+            <if test="deliverySn != null and deliverySn != ''"> AND o.delivery_sn = #{deliverySn}</if>
+            <if test="userName != null and userName != ''"> AND o.user_name LIKE CONCAT('%', #{userName}, '%')</if>
+            <if test="userAddress != null and userAddress != ''"> AND o.user_address LIKE CONCAT('%', #{userAddress}, '%')</if>
+            <if test="deliveryStartTime != null and deliveryStartTime != ''"> AND o.delivery_time &gt;= #{deliveryStartTime}</if>
+            <if test="deliveryEndTime != null and deliveryEndTime != ''"> AND o.delivery_time &lt;= #{deliveryEndTime}</if>
+            <if test="companyId != null"> AND o.company_id = #{companyId}</if>
+        </where>
+        ORDER BY o.order_id DESC
+    </select>
+
+    <!-- 拒收未还货报表 -->
+    <select id="selectRejectNoReturnReport" parameterType="FsExternalOrder" resultType="com.fs.his.domain.vo.FsRejectNoReturnReportVO">
+        SELECT
+            o.order_code AS orderCode,
+            o.delivery_sn AS deliverySn,
+            o.user_name AS userName,
+            o.user_address AS userAddress,
+            o.delivery_time AS deliveryTime,
+            o.total_price AS totalPrice,
+            o.follow_time AS followTime,
+            o.delivery_name AS deliveryName
+        FROM fs_external_order o
+        LEFT JOIN company c ON o.company_id = c.company_id
+        LEFT JOIN company_user cu ON o.company_user_id = cu.user_id
+        LEFT JOIN company_dept d ON cu.dept_id = d.dept_id
+        <where>
+            o.delivery_status = 4 AND (o.is_return_goods IS NULL OR o.is_return_goods = 2)
+            <if test="orderCode != null and orderCode != ''"> AND o.order_code = #{orderCode}</if>
+            <if test="deliverySn != null and deliverySn != ''"> AND o.delivery_sn = #{deliverySn}</if>
+            <if test="userName != null and userName != ''"> AND o.user_name LIKE CONCAT('%', #{userName}, '%')</if>
+            <if test="userAddress != null and userAddress != ''"> AND o.user_address LIKE CONCAT('%', #{userAddress}, '%')</if>
+            <if test="deliveryStartTime != null and deliveryStartTime != ''"> AND o.delivery_time &gt;= #{deliveryStartTime}</if>
+            <if test="deliveryEndTime != null and deliveryEndTime != ''"> AND o.delivery_time &lt;= #{deliveryEndTime}</if>
+            <if test="companyId != null"> AND o.company_id = #{companyId}</if>
+        </where>
+        ORDER BY o.order_id DESC
+    </select>
+
+    <!-- 签收情况明细表 -->
+    <select id="selectSignDetailReport" parameterType="FsExternalOrder" resultType="com.fs.his.domain.vo.FsSignDetailReportVO">
+        SELECT
+            t.order_type AS orderType,
+            t.delivery_count AS deliveryCount,
+            t.delivery_amount AS deliveryAmount,
+            t.sign_count AS signCount,
+            t.sign_amount AS signAmount,
+            CASE WHEN t.delivery_count &gt; 0
+                 THEN CONCAT(ROUND(t.sign_count * 100.0 / t.delivery_count, 2), '%')
+                 ELSE '0%' END AS orderSignRate,
+            CASE WHEN t.delivery_amount &gt; 0
+                 THEN CONCAT(ROUND(t.sign_amount * 100.0 / t.delivery_amount, 2), '%')
+                 ELSE '0%' END AS amountSignRate,
+            t.dept_name AS deptName,
+            t.company_name AS companyName
+        FROM (
+            SELECT
+                o.order_type AS order_type,
+                COUNT(o.order_id) AS delivery_count,
+                COALESCE(SUM(o.total_price), 0) AS delivery_amount,
+                COUNT(CASE WHEN o.delivery_status = 3 THEN 1 END) AS sign_count,
+                COALESCE(SUM(CASE WHEN o.delivery_status = 3 THEN o.total_price ELSE 0 END), 0) AS sign_amount,
+                d.dept_name AS dept_name,
+                c.company_name AS company_name
+            FROM fs_external_order o
+            LEFT JOIN company c ON o.company_id = c.company_id
+            LEFT JOIN company_user cu ON o.company_user_id = cu.user_id
+            LEFT JOIN company_dept d ON cu.dept_id = d.dept_id
+            <where>
+                o.status &gt;= 3
+                <if test="orderType != null"> AND o.order_type = #{orderType}</if>
+                <if test="companyId != null"> AND o.company_id = #{companyId}</if>
+                <if test="deptId != null"> AND cu.dept_id = #{deptId}</if>
+                <if test="sTime != null and sTime != ''"> AND o.external_create_time &gt;= #{sTime}</if>
+                <if test="eTime != null and eTime != ''"> AND o.external_create_time &lt;= #{eTime}</if>
+            </where>
+            GROUP BY d.dept_id, d.dept_name, c.company_id, c.company_name
+        ) t
+        ORDER BY t.company_name, t.dept_name, t.order_type
+    </select>
+
 </mapper>