yangdamao преди 1 година
родител
ревизия
ef5081c3eb
променени са 38 файла, в които са добавени 1218 реда и са изтрити 113 реда
  1. 89 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderHandleController.java
  2. 52 3
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderInvoiceController.java
  3. 8 4
      zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderHandleController.java
  4. 2 2
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserHandleController.java
  5. 22 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/CompanyInvoiceBatchBo.java
  6. 30 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/CompanyInvoiceCheckBo.java
  7. 49 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/CompanyOrderInvoiceBo.java
  8. 21 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleCheckBo.java
  9. 12 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleQueryBo.java
  10. 31 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleRefundBo.java
  11. 18 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderInvoiceAddBo.java
  12. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderGoodsRefund.java
  13. 9 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderHandle.java
  14. 21 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderInvoice.java
  15. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderInvoiceOrder.java
  16. 7 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderInvoiceMapper.java
  17. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderGoodsRefundService.java
  18. 9 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderHandleService.java
  19. 13 3
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderInvoiceService.java
  20. 3 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsRefundServiceImpl.java
  21. 320 56
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderHandleServiceImpl.java
  22. 143 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderInvoiceServiceImpl.java
  23. 71 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/CompanyOrderInvoiceVo.java
  24. 31 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/CompanyStatisticsVo.java
  25. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderHandleGoodsVo.java
  26. 28 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderHandleStatisticsVo.java
  27. 31 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderHandleVo.java
  28. 22 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderInvoiceVo.java
  29. 7 7
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserHandleBo.java
  30. 6 6
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserHandleImportBo.java
  31. 6 6
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserHandle.java
  32. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserHandleService.java
  33. 13 9
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserHandleServiceImpl.java
  34. 6 6
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserHandleVo.java
  35. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/IWxPayService.java
  36. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/impl/WxPayServiceImpl.java
  37. 34 1
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderHandleMapper.xml
  38. 78 3
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderInvoiceMapper.xml

+ 89 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderHandleController.java

@@ -0,0 +1,89 @@
+package com.zhongzheng.controller.order;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.modules.order.bo.OrderHandleCheckBo;
+import com.zhongzheng.modules.order.bo.OrderHandleQueryBo;
+import com.zhongzheng.modules.order.service.IOrderHandleService;
+import com.zhongzheng.modules.order.service.IOrderService;
+import com.zhongzheng.modules.order.vo.OrderHandleGoodsVo;
+import com.zhongzheng.modules.order.vo.OrderHandleStatisticsVo;
+import com.zhongzheng.modules.order.vo.OrderHandleVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 经办录单Controller
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Api(value = "经办录单控制器", tags = {"经办录单管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/order/handle")
+public class OrderHandleController extends BaseController {
+
+    private final IOrderHandleService iOrderHandleService;
+
+    private final IOrderService iOrderService;
+
+    /**
+     * 查询经办录单列表
+     */
+    @ApiOperation("查询经办录单列表")
+    @PreAuthorize("@ss.hasPermi('system:handle:list')")
+    @GetMapping("/list")
+    public TableDataInfo<OrderHandleVo> list(OrderHandleQueryBo bo) {
+        startPage();
+        List<OrderHandleVo> list = iOrderHandleService.selectList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询经办录单统计
+     */
+    @ApiOperation("查询经办录单统计")
+    @PreAuthorize("@ss.hasPermi('system:handle:list')")
+    @GetMapping("/statistics")
+    public AjaxResult<OrderHandleStatisticsVo> statistics(OrderHandleQueryBo bo) {
+        return AjaxResult.success(iOrderHandleService.statistics(bo));
+    }
+
+    @ApiOperation("查询经办录单详情")
+    @PreAuthorize("@ss.hasPermi('system:handle:list')")
+    @GetMapping("/detail")
+    public AjaxResult<OrderHandleVo> detail(OrderHandleQueryBo bo) {
+        List<OrderHandleVo> list = iOrderHandleService.selectList(bo);
+        return AjaxResult.success(list.get(0));
+    }
+
+
+    @ApiOperation("查询经办录单商品列表")
+    @PreAuthorize("@ss.hasPermi('system:handle:list')")
+    @GetMapping("/goodsList")
+    public TableDataInfo<OrderHandleGoodsVo> goodsList(OrderHandleQueryBo bo) {
+        startPage();
+        List<OrderHandleGoodsVo> list = iOrderHandleService.selectOrderGoodsList(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("经办录单审核")
+    @PostMapping("/check")
+    public AjaxResult<Void> checkOrderHandle(@RequestBody OrderHandleCheckBo bo) {
+        return toAjax(iOrderHandleService.checkOrderHandle(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("经办录单退款审核")
+    @PostMapping("/refund/check")
+    public AjaxResult<Void> refundOrderHandle(@RequestBody OrderHandleCheckBo bo) {
+        return toAjax(iOrderHandleService.refundOrderHandle(bo) ? 1 : 0);
+    }
+}

+ 52 - 3
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderInvoiceController.java

@@ -4,10 +4,10 @@ import java.util.List;
 import java.util.Map;
 
 import cn.hutool.core.lang.Validator;
-import com.zhongzheng.modules.order.bo.OrderInvoiceAddBo;
-import com.zhongzheng.modules.order.bo.OrderInvoiceEditBo;
-import com.zhongzheng.modules.order.bo.OrderInvoiceQueryBo;
+import com.zhongzheng.modules.order.bo.*;
 import com.zhongzheng.modules.order.service.IOrderInvoiceService;
+import com.zhongzheng.modules.order.vo.CompanyOrderInvoiceVo;
+import com.zhongzheng.modules.order.vo.CompanyStatisticsVo;
 import com.zhongzheng.modules.order.vo.OrderInvoiceVo;
 import com.zhongzheng.modules.tencentcloud.bo.InvoiceQueryBo;
 import com.zhongzheng.modules.tencentcloud.service.IFaceOcrService;
@@ -96,4 +96,53 @@ public class OrderInvoiceController extends BaseController {
         Map<String, String> rs = iFaceOcrService.VatInvoiceOCR(bo);
         return AjaxResult.success(rs);
     }
+
+    /**
+     * 查询企业订单发票列表
+     */
+    @ApiOperation("查询企业订单发票列表")
+    @GetMapping("/company/list")
+    public TableDataInfo<CompanyOrderInvoiceVo> listCompanyOrderInvoice(CompanyOrderInvoiceBo bo) {
+        startPage();
+        List<CompanyOrderInvoiceVo> list = iOrderInvoiceService.listCompanyOrderInvoice(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询企业订单发票统计
+     */
+    @ApiOperation("查询企业订单发票统计")
+    @GetMapping("/company/statistics")
+    public AjaxResult<CompanyStatisticsVo> listCompanyStatistics(CompanyOrderInvoiceBo bo) {
+        CompanyStatisticsVo vo = iOrderInvoiceService.listCompanyStatistics(bo);
+        return AjaxResult.success(vo);
+    }
+
+    /**
+     * 查询企业订单发票详情
+     */
+    @ApiOperation("查询企业订单发票详情")
+    @GetMapping("/company/detail/{invoiceId}")
+    public AjaxResult<OrderInvoiceVo> getCompanyInvoiceDetail(@PathVariable("invoiceId")Long invoiceId) {
+        OrderInvoiceVo vo = iOrderInvoiceService.getCompanyInvoiceDetail(invoiceId);
+        return AjaxResult.success(vo);
+    }
+
+    /**
+     * 企业订单发票审核
+     */
+    @ApiOperation("企业订单发票审核")
+    @PostMapping("/company/check")
+    public AjaxResult<Void> companyInvoiceCheck(@RequestBody CompanyInvoiceCheckBo bo) {
+        return toAjax(iOrderInvoiceService.companyInvoiceCheck(bo) ? 1 : 0);
+    }
+
+    /**
+     * 企业订单发票批量处理
+     */
+    @ApiOperation("企业订单发票批量处理")
+    @PostMapping("/company/batch/handle")
+    public AjaxResult<Void> companyBatchHandle(@RequestBody CompanyInvoiceBatchBo bo) {
+        return toAjax(iOrderInvoiceService.companyBatchHandle(bo) ? 1 : 0);
+    }
 }

+ 8 - 4
zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderHandleController.java

@@ -9,10 +9,7 @@ import com.zhongzheng.common.core.domain.model.LoginUser;
 import com.zhongzheng.common.utils.SecurityUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.framework.web.service.WxTokenService;
-import com.zhongzheng.modules.order.bo.OrderAddBo;
-import com.zhongzheng.modules.order.bo.OrderHandleAddBo;
-import com.zhongzheng.modules.order.bo.OrderHandleEditBo;
-import com.zhongzheng.modules.order.bo.OrderHandleQueryBo;
+import com.zhongzheng.modules.order.bo.*;
 import com.zhongzheng.modules.order.service.IOrderHandleService;
 import com.zhongzheng.modules.order.service.IOrderService;
 import com.zhongzheng.modules.order.vo.OrderHandleGoodsVo;
@@ -132,4 +129,11 @@ public class OrderHandleController extends BaseController {
         bo.setCreateUserId(loginUser.getUser().getUserId());
         return toAjax(iOrderHandleService.closeOrder(bo) ? 1 : 0);
     }
+
+
+    @ApiOperation("经办订单退款申请")
+    @PostMapping("/refund/apply")
+    public AjaxResult<Void> refundApply(@RequestBody OrderHandleRefundBo bo) {
+        return toAjax(iOrderHandleService.refundApply(bo) ? 1 : 0);
+    }
 }

+ 2 - 2
zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserHandleController.java

@@ -55,9 +55,9 @@ public class UserHandleController extends BaseController {
      */
     @ApiOperation("新增用户经办名单")
     @PostMapping("/save")
-    public AjaxResult<Void> save(@RequestBody UserHandleBo bo) {
+    public AjaxResult<Void> save(@RequestBody List<UserHandleBo> bo) {
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
-        bo.setUserId(loginUser.getUser().getUserId());
+        bo.stream().forEach(item -> item.setUserId(loginUser.getUser().getUserId()));
         return toAjax(iUserHandleService.saveUserHandle(bo) ? 1 : 0);
     }
 

+ 22 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/CompanyInvoiceBatchBo.java

@@ -0,0 +1,22 @@
+package com.zhongzheng.modules.order.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月24日 10:11
+ */
+@Data
+public class CompanyInvoiceBatchBo implements Serializable {
+
+    private List<Long> invoiceIds;
+
+    private String handleRemark;
+
+    private Integer washStatus;
+
+    private String remark;
+}

+ 30 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/CompanyInvoiceCheckBo.java

@@ -0,0 +1,30 @@
+package com.zhongzheng.modules.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月24日 9:30
+ */
+@Data
+public class CompanyInvoiceCheckBo implements Serializable {
+
+    @ApiModelProperty("")
+    private Long invoiceId;
+
+    @ApiModelProperty("发票图片地址集合")
+    private String invoiceUrlList;
+
+    @ApiModelProperty("处理备注")
+    private String handleRemark;
+
+    @ApiModelProperty("审核结果:1通过 2不通过")
+    private Integer checkResult;
+
+    @ApiModelProperty("审核原因")
+    private String checkReason;
+}

+ 49 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/CompanyOrderInvoiceBo.java

@@ -0,0 +1,49 @@
+package com.zhongzheng.modules.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月23日 10:26
+ */
+@Data
+public class CompanyOrderInvoiceBo implements Serializable {
+
+    /** 分页大小 */
+    @ApiModelProperty("分页大小")
+    private Integer pageSize;
+    /** 当前页数 */
+    @ApiModelProperty("当前页数")
+    private Integer pageNum;
+    /** 排序列 */
+    @ApiModelProperty("排序列")
+    private String orderByColumn;
+    /** 排序的方向desc或者asc */
+    @ApiModelProperty(value = "排序的方向", example = "asc,desc")
+    private String isAsc;
+
+    @ApiModelProperty("商品类型:1课程 2题库")
+    private Integer goodsType;
+
+    @ApiModelProperty("教育层次ID")
+    private Long educationTypeId;
+
+    @ApiModelProperty("业务层次ID")
+    private Long businessId;
+
+    @ApiModelProperty("发票状态:1待审核 2已开票 3不通过")
+    private Integer invoiceStatus;
+
+    @ApiModelProperty("冲红状态:1待冲红 2已冲红")
+    private Integer washStatus;
+
+    @ApiModelProperty("收票方式:1在线下载 2邮件接收 3纸质快递")
+    private Integer invoiceMode;
+
+    @ApiModelProperty("关键字")
+    private String keyword;
+
+}

+ 21 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleCheckBo.java

@@ -0,0 +1,21 @@
+package com.zhongzheng.modules.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月26日 9:25
+ */
+@Data
+public class OrderHandleCheckBo implements Serializable {
+
+    @ApiModelProperty("订单号")
+    private String orderHandleSn;
+    @ApiModelProperty("审核结果:1通过 2不通过")
+    private Integer checkResult;
+    @ApiModelProperty("审核原因")
+    private String checkReason;
+}

+ 12 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleQueryBo.java

@@ -69,5 +69,17 @@ public class OrderHandleQueryBo extends BaseEntity {
 
 	private String searchKey;
 
+	@ApiModelProperty("退款状态:0待审核 1已退款 2不通过")
+	private Integer refundStatus;
+
+	@ApiModelProperty("发票状态:1待审核 2已开票 3不通过")
+	private Integer invoiceStatus;
+
+	@ApiModelProperty("开始时间")
+	private Long startTime;
+
+	@ApiModelProperty("结束时间")
+	private Long endTime;
+
 
 }

+ 31 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleRefundBo.java

@@ -0,0 +1,31 @@
+package com.zhongzheng.modules.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月25日 15:42
+ */
+@Data
+public class OrderHandleRefundBo implements Serializable {
+
+    @ApiModelProperty("收款人")
+    private String payee;
+    @ApiModelProperty("收款银行")
+    private String payeeBank;
+    @ApiModelProperty("收款账号")
+    private String payeeBankAccount;
+    @ApiModelProperty("退款原因")
+    private String refundReason;
+    @ApiModelProperty("订单号")
+    private String handleOrderSn;
+    @ApiModelProperty("退款金额")
+    private BigDecimal refundPrice;
+    @ApiModelProperty("订单商品IDs")
+    private List<Long> orderGoodsIds;
+}

+ 18 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderInvoiceAddBo.java

@@ -111,4 +111,22 @@ public class OrderInvoiceAddBo {
     private List<Long> orderGoodsIds;
     @ApiModelProperty("发票备注")
     private String invoiceRemark;
+    /** 发票类型:0,C端个人发票  1,C端企业发票 */
+    @ApiModelProperty("发票类型:1,C端个人发票  2,C端企业发票")
+    private Integer invoiceType;
+    /** 收票姓名 */
+    @ApiModelProperty("收票姓名")
+    private String consignee;
+    @ApiModelProperty("收票电话")
+    private String collectionTelephone;
+    /** 收票地址 */
+    @ApiModelProperty("收票地址")
+    private String shippingAddress;
+    /** 收票方式:1在线下载 2邮件接收 3纸质快递 (多个用逗号隔开) */
+    @ApiModelProperty("收票方式:1在线下载 2邮件接收 3纸质快递 (多个用逗号隔开)")
+    private String invoiceMode;
+    @ApiModelProperty("订单号")
+    private String orderSn;
+    @ApiModelProperty("开票备注")
+    private String openRemark;
 }

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderGoodsRefund.java

@@ -1,6 +1,7 @@
 package com.zhongzheng.modules.order.domain;
 
 import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
@@ -79,4 +80,10 @@ private static final long serialVersionUID=1L;
     private Integer divideModel;
     /** 待扣分成钱 */
     private BigDecimal divideMoney;
+    /** 收款人 */
+    private String payee;
+    /** 收款银行 */
+    private String payeeBank;
+    /** 收款账号 */
+    private String payeeBankAccount;
 }

+ 9 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderHandle.java

@@ -1,7 +1,6 @@
 package com.zhongzheng.modules.order.domain;
 
 import com.baomidou.mybatisplus.annotation.*;
-import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
@@ -72,6 +71,15 @@ private static final long serialVersionUID=1L;
 
     private Long closeTime;
 
+    private String checkReason;
+    /** 退款状态: 0待审核 1已退款 2不通过 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Integer refundStatus;
+    /** 退款金额 */
+    private BigDecimal refundPrice;
+    /** 审核时间 */
+    private Long checkTime;
+
 
     private String recCompanyName;
 

+ 21 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderInvoice.java

@@ -41,16 +41,17 @@ private static final long serialVersionUID=1L;
     /** 纳税登记号 */
     private String taxRegistryNumber;
     /** 添加时间 */
-    @TableField(fill = FieldFill.INSERT)
+//    @TableField(fill = FieldFill.INSERT)
     private Long createTime;
     /** 修改时间 */
-    @TableField(fill = FieldFill.INSERT_UPDATE)
+//    @TableField(fill = FieldFill.INSERT_UPDATE)
     private Long updateTime;
     /** 状态 1有效 0无效 */
     private Integer status;
     /** 发票状态 1未开票 2已开票 -1 已退票 */
     private Integer invoiceStatus;
     /** 发票金额 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private BigDecimal amount;
     /** 发票代码 */
     private String invoiceCode;
@@ -88,4 +89,22 @@ private static final long serialVersionUID=1L;
     private Long periodTime;
     /** 流水号 */
     private String serialNumber;
+    /** 发票类型:0,C端个人发票  1,C端企业发票 */
+    private Integer invoiceType;
+    /** 发票备注 */
+    private String invoiceRemark;
+    /** 收票姓名 */
+    private String consignee;
+    /** 收票电话 */
+    private String collectionTelephone;
+    /** 收票地址 */
+    private String shippingAddress;
+    /** 收票方式:1在线下载 2邮件接收 3纸质快递 (多个用逗号隔开) */
+    private String invoiceMode;
+    /** 冲红状态:1待冲红 2已冲红 */
+    private Integer washStatus;
+    /** 开票备注 */
+    private String openRemark;
+    /** 处理备注 */
+    private String handleRemark;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderInvoiceOrder.java

@@ -30,4 +30,6 @@ private static final long serialVersionUID=1L;
     private Long invoiceId;
     /** 订单商品ID */
     private Long orderGoodsId;
+    /** 订单号 */
+    private String orderSn;
 }

+ 7 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderInvoiceMapper.java

@@ -1,10 +1,13 @@
 package com.zhongzheng.modules.order.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.order.bo.CompanyOrderInvoiceBo;
 import com.zhongzheng.modules.order.bo.OrderInvoiceQueryBo;
 import com.zhongzheng.modules.order.domain.OrderInvoice;
+import com.zhongzheng.modules.order.vo.CompanyOrderInvoiceVo;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderInvoiceVo;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -15,7 +18,10 @@ import java.util.List;
  * @date 2022-03-29
  */
 public interface OrderInvoiceMapper extends BaseMapper<OrderInvoice> {
-    List<OrderInvoiceVo> selectList(OrderInvoiceQueryBo bo);
+    List<OrderInvoiceVo> selectListByBo(OrderInvoiceQueryBo bo);
     Long checkHave(Long orderGoodsId);
 
+    List<CompanyOrderInvoiceVo> listCompanyOrderInvoice(CompanyOrderInvoiceBo bo);
+
+    List<OrderInvoice> listWashInvoice(@Param("orderSn") String orderSn,@Param("invoiceId") Long invoiceId);
 }

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderGoodsRefundService.java

@@ -3,11 +3,14 @@ package com.zhongzheng.modules.order.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zhongzheng.modules.grade.bo.UserPeriodEditBo;
 import com.zhongzheng.modules.order.bo.*;
+import com.zhongzheng.modules.order.domain.Order;
+import com.zhongzheng.modules.order.domain.OrderGoods;
 import com.zhongzheng.modules.order.domain.OrderGoodsRefund;
 import com.zhongzheng.modules.order.vo.OrderGoodsRefundVo;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.top.goods.domain.TopOldOrderRefund;
 
+import java.math.BigDecimal;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -41,6 +44,10 @@ public interface IOrderGoodsRefundService extends IService<OrderGoodsRefund> {
 
 	Boolean placeRefundInputOrder(List<OrderGoodsRefundAddBo> bos);
 
+	Boolean refundCall(String WxpayRefundId, Long refundId, Long orderGoodsId, Order order, Integer goodsType, Long gradeId, Long userId, Long goodsId);
+
+	Boolean shareClientCancelOldSys(Order order, OrderGoods orderGoods, BigDecimal refund_fee);
+
 	/**
 	 * 根据编辑业务对象修改订单商品退款
 	 * @param bo 订单商品退款编辑业务对象

+ 9 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderHandleService.java

@@ -5,6 +5,7 @@ import com.zhongzheng.modules.order.bo.*;
 import com.zhongzheng.modules.order.domain.OrderHandle;
 import com.zhongzheng.modules.order.domain.OrderInput;
 import com.zhongzheng.modules.order.vo.OrderHandleGoodsVo;
+import com.zhongzheng.modules.order.vo.OrderHandleStatisticsVo;
 import com.zhongzheng.modules.order.vo.OrderHandleVo;
 import com.zhongzheng.modules.order.vo.OrderInputVo;
 
@@ -67,4 +68,12 @@ public interface IOrderHandleService extends IService<OrderHandle> {
 	 * @return
 	 */
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+	boolean refundApply(OrderHandleRefundBo bo);
+
+	OrderHandleStatisticsVo statistics(OrderHandleQueryBo bo);
+
+	boolean checkOrderHandle(OrderHandleCheckBo bo);
+
+	boolean refundOrderHandle(OrderHandleCheckBo bo);
 }

+ 13 - 3
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderInvoiceService.java

@@ -1,10 +1,10 @@
 package com.zhongzheng.modules.order.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.zhongzheng.modules.order.bo.OrderInvoiceAddBo;
-import com.zhongzheng.modules.order.bo.OrderInvoiceEditBo;
-import com.zhongzheng.modules.order.bo.OrderInvoiceQueryBo;
+import com.zhongzheng.modules.order.bo.*;
 import com.zhongzheng.modules.order.domain.OrderInvoice;
+import com.zhongzheng.modules.order.vo.CompanyOrderInvoiceVo;
+import com.zhongzheng.modules.order.vo.CompanyStatisticsVo;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderInvoiceVo;
 
@@ -52,4 +52,14 @@ public interface IOrderInvoiceService extends IService<OrderInvoice> {
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
 	List<OrderInvoiceVo> selectList(OrderInvoiceQueryBo bo);
+
+	List<CompanyOrderInvoiceVo> listCompanyOrderInvoice(CompanyOrderInvoiceBo bo);
+
+    CompanyStatisticsVo listCompanyStatistics(CompanyOrderInvoiceBo bo);
+
+	OrderInvoiceVo getCompanyInvoiceDetail(Long invoiceId);
+
+	boolean companyInvoiceCheck(CompanyInvoiceCheckBo bo);
+
+	boolean companyBatchHandle(CompanyInvoiceBatchBo bo);
 }

+ 3 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsRefundServiceImpl.java

@@ -517,6 +517,7 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
         return true;
     }
 
+    @Override
     public Boolean refundCall(String WxpayRefundId,Long refundId,Long orderGoodsId,Order order,Integer goodsType,Long gradeId,Long userId,Long goodsId){
         OrderGoodsRefund update = new OrderGoodsRefund();
         update.setRefundId(refundId);
@@ -563,7 +564,8 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
      * @param orderGoods
      * @return
      */
-    public boolean shareClientCancelOldSys(Order order, OrderGoods orderGoods, BigDecimal refund_fee) {
+    @Override
+    public Boolean shareClientCancelOldSys(Order order, OrderGoods orderGoods, BigDecimal refund_fee) {
         if (Validator.isNotEmpty(order)) {
             OrderShareMoney shareMoney = iOrderShareMoneyService.getOne(new LambdaQueryWrapper<OrderShareMoney>()
                     .eq(OrderShareMoney::getStatus, 1)

+ 320 - 56
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderHandleServiceImpl.java

@@ -3,21 +3,24 @@ package com.zhongzheng.modules.order.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.modules.course.domain.CourseBusiness;
+import com.zhongzheng.modules.goods.domain.Goods;
+import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.order.bo.*;
-import com.zhongzheng.modules.order.domain.Order;
-import com.zhongzheng.modules.order.domain.OrderHandle;
-import com.zhongzheng.modules.order.domain.OrderInput;
+import com.zhongzheng.modules.order.domain.*;
 import com.zhongzheng.modules.order.mapper.OrderHandleMapper;
-import com.zhongzheng.modules.order.service.IOrderHandleService;
-import com.zhongzheng.modules.order.service.IOrderPayService;
-import com.zhongzheng.modules.order.service.IOrderService;
+import com.zhongzheng.modules.order.service.*;
 import com.zhongzheng.modules.order.vo.OrderHandleGoodsVo;
+import com.zhongzheng.modules.order.vo.OrderHandleStatisticsVo;
 import com.zhongzheng.modules.order.vo.OrderHandleVo;
 import com.zhongzheng.modules.system.domain.SysTenant;
 import com.zhongzheng.modules.system.service.ISysTenantService;
@@ -68,15 +71,31 @@ public class OrderHandleServiceImpl extends ServiceImpl<OrderHandleMapper, Order
     @Autowired
     private ISysTenantService sysTenantService;
 
+    @Autowired
+    private IOrderInvoiceOrderService iOrderInvoiceOrderService;
+
+    @Autowired
+    private IOrderInvoiceService iOrderInvoiceService;
+
+    @Autowired
+    private IOrderGoodsRefundService iOrderGoodsRefundService;
+
+    @Autowired
+    private IOrderGoodsService iOrderGoodsService;
+
+    @Autowired
+    private IGoodsService iGoodsService;
+
+
     @Override
-    public OrderHandleVo queryById(Long id){
+    public OrderHandleVo queryById(Long id) {
         OrderHandle db = this.baseMapper.selectById(id);
         return BeanUtil.toBean(db, OrderHandleVo.class);
     }
 
     @Override
     public OrderHandle queryBySn(String handleOrderSn) {
-        return getOne(new LambdaQueryWrapper<OrderHandle>().eq(OrderHandle::getHandleOrderSn,handleOrderSn));
+        return getOne(new LambdaQueryWrapper<OrderHandle>().eq(OrderHandle::getHandleOrderSn, handleOrderSn));
     }
 
     @Override
@@ -97,17 +116,62 @@ public class OrderHandleServiceImpl extends ServiceImpl<OrderHandleMapper, Order
 
     @Override
     public List<OrderHandleVo> selectList(OrderHandleQueryBo bo) {
-        return this.baseMapper.selectList(bo);
+        List<OrderHandleVo> orderHandleVos = baseMapper.selectList(bo);
+        if (CollectionUtils.isEmpty(orderHandleVos)) {
+            return new ArrayList<>();
+        }
+        orderHandleVos.forEach(item -> {
+            //发票
+            List<OrderInvoiceOrder> list = iOrderInvoiceOrderService
+                    .list(new LambdaQueryWrapper<OrderInvoiceOrder>()
+                            .eq(OrderInvoiceOrder::getOrderSn, item.getHandleOrderSn()));
+            if (CollectionUtils.isNotEmpty(list)) {
+                List<OrderInvoice> invoices = iOrderInvoiceService.list(new LambdaQueryWrapper<OrderInvoice>()
+                        .in(OrderInvoice::getInvoiceId, list.stream().map(OrderInvoiceOrder::getInvoiceId).collect(Collectors.toList()))
+                        .and(x -> x.isNull(OrderInvoice::getWashStatus).or().eq(OrderInvoice::getWashStatus, 1)
+                                .eq(OrderInvoice::getStatus, 1))
+                        .orderByDesc(OrderInvoice::getCreateTime));
+                if (CollectionUtils.isNotEmpty(invoices)) {
+                    OrderInvoice invoice = invoices.get(0);
+                    if (invoice.getInvoiceStatus() == 2) {
+                        item.setInvoiceStatus(invoice.getInvoiceStatus());
+                    } else if (invoice.getPeriodStatus() == 1) {
+                        item.setInvoiceStatus(invoice.getPeriodStatus());
+                    } else if (invoice.getPeriodStatus() == 2) {
+                        item.setInvoiceStatus(3);
+                    }
+                    item.setHandleRemark(invoice.getHandleRemark());
+                    item.setInvoiceMode(invoice.getInvoiceMode());
+                    item.setInvoiceStatus(invoice.getPeriodReason());
+                    item.setInvoiceUrl(invoices.stream().filter(x -> StringUtils.isNotBlank(x.getInvoiceImg())).map(OrderInvoice::getInvoiceImg).collect(Collectors.joining(",")));
+                }
+            }
+            //退款
+            if (ObjectUtils.isNotNull(item.getRefundStatus()) && item.getRefundStatus() == 0 && item.getPayType() == 2) {
+                List<Order> orders = iOrderService.list(new LambdaQueryWrapper<Order>().eq(Order::getHandleOrderSn, item.getHandleOrderSn()));
+                List<OrderGoodsRefund> list1 = iOrderGoodsRefundService.list(new LambdaQueryWrapper<OrderGoodsRefund>()
+                        .in(OrderGoodsRefund::getOrderSn, orders.stream().map(Order::getOrderSn).collect(Collectors.toList()))
+                        .eq(OrderGoodsRefund::getStatus, 1)
+                        .eq(OrderGoodsRefund::getPeriodStatus, 0));
+                if (CollectionUtils.isNotEmpty(list1)) {
+                    OrderGoodsRefund refund = list1.get(0);
+                    item.setPayee(refund.getPayee());
+                    item.setPayeeBank(refund.getPayeeBank());
+                    item.setPayeeBankAccount(refund.getPayeeBankAccount());
+                }
+            }
+        });
+        return orderHandleVos;
     }
 
     @Override
     public List<OrderHandleGoodsVo> selectOrderGoodsList(OrderHandleQueryBo bo) {
         List<OrderHandleGoodsVo> list = this.baseMapper.selectOrderGoodsList(bo);
-        for(OrderHandleGoodsVo vo : list){
+        for (OrderHandleGoodsVo vo : list) {
             Long secLong = 0L;
             Long studyLong = 0L;
 
-            if(vo.getPayStatus()>1){
+            if (vo.getPayStatus() > 1) {
                 SubjectStudyRecordQueryBo subjectStudyRecordQueryBo = new SubjectStudyRecordQueryBo();
                 subjectStudyRecordQueryBo.setGoodsId(vo.getGoodsId());
                 subjectStudyRecordQueryBo.setUserId(vo.getUserId());
@@ -122,24 +186,36 @@ public class OrderHandleServiceImpl extends ServiceImpl<OrderHandleMapper, Order
                 vo.setSecAllNum(secLong);
                 vo.setStuAllNum(studyLong);
             }
+            //退款
+            OrderGoodsRefund refund = iOrderGoodsRefundService
+                    .getOne(new LambdaQueryWrapper<OrderGoodsRefund>()
+                            .eq(OrderGoodsRefund::getOrderGoodsId, vo.getOrderGoodsId())
+                            .eq(OrderGoodsRefund::getStatus, 1)
+                            .orderByDesc(OrderGoodsRefund::getCreateTime)
+                            .last("limit 1"));
+            if (ObjectUtils.isNotNull(refund)) {
+                vo.setRefundStatus(refund.getPeriodStatus());
+                vo.setRefundReason(refund.getApplyReason());
+                vo.setPeriodReason(refund.getPeriodReason());
+            }
         }
         return list;
     }
 
     /**
-    * 实体类转化成视图对象
-    *
-    * @param collection 实体类集合
-    * @return
-    */
+     * 实体类转化成视图对象
+     *
+     * @param collection 实体类集合
+     * @return
+     */
     private List<OrderHandleVo> entity2Vo(Collection<OrderHandle> collection) {
         List<OrderHandleVo> voList = collection.stream()
                 .map(any -> BeanUtil.toBean(any, OrderHandleVo.class))
                 .collect(Collectors.toList());
         if (collection instanceof Page) {
-            Page<OrderHandle> page = (Page<OrderHandle>)collection;
+            Page<OrderHandle> page = (Page<OrderHandle>) collection;
             Page<OrderHandleVo> pageVo = new Page<>();
-            BeanUtil.copyProperties(page,pageVo);
+            BeanUtil.copyProperties(page, pageVo);
             pageVo.addAll(voList);
             voList = pageVo;
         }
@@ -148,7 +224,7 @@ public class OrderHandleServiceImpl extends ServiceImpl<OrderHandleMapper, Order
 
     @Override
     public String insertByAddBo(OrderHandleAddBo bo) {
-        if(Validator.isEmpty(bo.getBusinessId())||Validator.isEmpty(bo.getGoodsType())||Validator.isEmpty(bo.getInputFrom())||Validator.isEmpty(bo.getPayType())){
+        if (Validator.isEmpty(bo.getBusinessId()) || Validator.isEmpty(bo.getGoodsType()) || Validator.isEmpty(bo.getInputFrom()) || Validator.isEmpty(bo.getPayType())) {
             throw new CustomException("参数缺失");
         }
         OrderHandle add = BeanUtil.toBean(bo, OrderHandle.class);
@@ -156,8 +232,8 @@ public class OrderHandleServiceImpl extends ServiceImpl<OrderHandleMapper, Order
         add.setCreateTime(DateUtils.getNowTime());
         add.setUpdateTime(DateUtils.getNowTime());
         add.setHandleOrderSn(DateUtils.getTagOrderSn("HD"));
-        add.setOverTime(DateUtils.getNowTime()+7*24*3600);
-        if(Validator.isEmpty(add.getInputFrom())){
+        add.setOverTime(DateUtils.getNowTime() + 7 * 24 * 3600);
+        if (Validator.isEmpty(add.getInputFrom())) {
             add.setInputFrom(1);
         }
         String tenantId = ServletUtils.getRequest().getHeader("TenantId");
@@ -165,12 +241,12 @@ public class OrderHandleServiceImpl extends ServiceImpl<OrderHandleMapper, Order
         //账号信息
         String information = tenant.getHandleBank();
         SysTenantHandleAccountVo accountVo = JSONObject.parseObject(information, SysTenantHandleAccountVo.class);
-        if(Validator.isNotEmpty(accountVo)){
+        if (Validator.isNotEmpty(accountVo)) {
             add.setRecCompanyAccount(accountVo.getRecCompanyAccount());
             add.setRecCompanyBank(accountVo.getRecCompanyBank());
             add.setRecCompanyName(accountVo.getRecCompanyName());
         }
-        if(this.save(add)){
+        if (this.save(add)) {
             return add.getHandleOrderSn();
         }
         return null;
@@ -180,13 +256,13 @@ public class OrderHandleServiceImpl extends ServiceImpl<OrderHandleMapper, Order
     public String submitOrder(OrderHandleAddBo bo) {
         String handleOrderSn = createOrder(bo);
         OrderHandle orderHandle = queryBySn(handleOrderSn);
-        if(orderHandle.getPayPrice().compareTo(BigDecimal.ZERO) == 0) {
+        if (orderHandle.getPayPrice().compareTo(BigDecimal.ZERO) == 0) {
             LambdaUpdateWrapper<OrderHandle> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
             objectLambdaUpdateWrapper.eq(OrderHandle::getId, orderHandle.getId());
-            objectLambdaUpdateWrapper.set(OrderHandle::getUpdateTime,DateUtils.getNowTime());
-            objectLambdaUpdateWrapper.set(OrderHandle::getPayTime,DateUtils.getNowTime());
-            objectLambdaUpdateWrapper.set(OrderHandle::getPayStatus,1);
-            objectLambdaUpdateWrapper.set(OrderHandle::getPayType,1);
+            objectLambdaUpdateWrapper.set(OrderHandle::getUpdateTime, DateUtils.getNowTime());
+            objectLambdaUpdateWrapper.set(OrderHandle::getPayTime, DateUtils.getNowTime());
+            objectLambdaUpdateWrapper.set(OrderHandle::getPayStatus, 1);
+            objectLambdaUpdateWrapper.set(OrderHandle::getPayType, 1);
             this.update(null, objectLambdaUpdateWrapper);
         }
         return handleOrderSn;
@@ -197,16 +273,16 @@ public class OrderHandleServiceImpl extends ServiceImpl<OrderHandleMapper, Order
     public String createOrder(OrderHandleAddBo bo) {
         String handleOrderSn = insertByAddBo(bo);
         String importNo = ServletUtils.getEncoded("IMPORT");
-        for(OrderHandleItemAddBo itemAddBo : bo.getUserGoodsList()){
-            if(Validator.isEmpty(itemAddBo.getUser().getUserId())){
-                if(Validator.isEmpty(itemAddBo.getUser().getEduLevel())||Validator.isEmpty(itemAddBo.getUser().getCompanyName())||Validator.isEmpty(itemAddBo.getUser().getSex())){
+        for (OrderHandleItemAddBo itemAddBo : bo.getUserGoodsList()) {
+            if (Validator.isEmpty(itemAddBo.getUser().getUserId())) {
+                if (Validator.isEmpty(itemAddBo.getUser().getEduLevel()) || Validator.isEmpty(itemAddBo.getUser().getCompanyName()) || Validator.isEmpty(itemAddBo.getUser().getSex())) {
                     throw new CustomException("用户参数缺失");
                 }
-                Long userId = iUserService.importUser(itemAddBo.getUser(),importNo);
+                Long userId = iUserService.importUser(itemAddBo.getUser(), importNo);
                 itemAddBo.getUser().setUserId(userId);
             }
         }
-        for(OrderHandleItemAddBo itemAddBo : bo.getUserGoodsList()){
+        for (OrderHandleItemAddBo itemAddBo : bo.getUserGoodsList()) {
             OrderAddBo addBo = new OrderAddBo();
             addBo.setUserId(itemAddBo.getUser().getUserId());
             addBo.setGoodsList(itemAddBo.getGoodsList());
@@ -229,16 +305,16 @@ public class OrderHandleServiceImpl extends ServiceImpl<OrderHandleMapper, Order
         if (Validator.isEmpty(orderHandle)) {
             throw new CustomException("录单单号不存在");
         }
-        if (orderHandle.getPayStatus()!=0) {
+        if (orderHandle.getPayStatus() != 0) {
             throw new CustomException("非支付状态");
         }
-        if (orderHandle.getOverTime()<DateUtils.getNowTime()) {
+        if (orderHandle.getOverTime() < DateUtils.getNowTime()) {
             throw new CustomException("已超时关闭");
         }
         UserVo userVo = iUserService.queryById(bo.getCreateUserId());
-        if(bo.getPayType()==1){
+        if (bo.getPayType() == 1) {
             Map<String, String> payResult = new HashMap<>();
-            if(orderHandle.getPayPrice().compareTo(BigDecimal.ZERO) != 0) {
+            if (orderHandle.getPayPrice().compareTo(BigDecimal.ZERO) != 0) {
                 OrderPayAddBo payAddBo = new OrderPayAddBo();
                 //生成支付单号
                 String pay_no = DateUtils.getPayOrderSn();
@@ -248,31 +324,30 @@ public class OrderHandleServiceImpl extends ServiceImpl<OrderHandleMapper, Order
                 payAddBo.setPayPrice(orderHandle.getPayPrice());
                 payAddBo.setOrderFrom(2);
                 iOrderPayService.insertByAddBo(payAddBo);
-                String body = "中正云-订单:"+orderHandle.getHandleOrderSn();
+                String body = "中正云-订单:" + orderHandle.getHandleOrderSn();
                 payResult = iWxPayService.paymentPc(pay_no, userVo.getOpenId(), body, orderHandle.getPayPrice());
                 payResult.put("orderSn", orderHandle.getHandleOrderSn());
                 return payResult;
             }
-        }
-        else if(bo.getPayType()==2){
-            if(Validator.isEmpty(bo.getCompanyName())||Validator.isEmpty(bo.getCompanyTel())||Validator.isEmpty(bo.getCompanyPayImg())){
+        } else if (bo.getPayType() == 2) {
+            if (Validator.isEmpty(bo.getCompanyName()) || Validator.isEmpty(bo.getCompanyTel()) || Validator.isEmpty(bo.getCompanyPayImg())) {
                 throw new CustomException("对公凭证缺失");
             }
             LambdaUpdateWrapper<OrderHandle> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
             objectLambdaUpdateWrapper.eq(OrderHandle::getId, orderHandle.getId());
             objectLambdaUpdateWrapper.set(OrderHandle::getCompanyName, bo.getCompanyName());
-            objectLambdaUpdateWrapper.set(OrderHandle::getCompanyTel,bo.getCompanyTel());
-            objectLambdaUpdateWrapper.set(OrderHandle::getCompanyRemark,bo.getCompanyRemark());
-            objectLambdaUpdateWrapper.set(OrderHandle::getCompanyPayImg,bo.getCompanyPayImg());
-            objectLambdaUpdateWrapper.set(OrderHandle::getUpdateTime,DateUtils.getNowTime());
-            objectLambdaUpdateWrapper.set(OrderHandle::getPayStatus,2);
-            objectLambdaUpdateWrapper.set(OrderHandle::getPayType,2);
+            objectLambdaUpdateWrapper.set(OrderHandle::getCompanyTel, bo.getCompanyTel());
+            objectLambdaUpdateWrapper.set(OrderHandle::getCompanyRemark, bo.getCompanyRemark());
+            objectLambdaUpdateWrapper.set(OrderHandle::getCompanyPayImg, bo.getCompanyPayImg());
+            objectLambdaUpdateWrapper.set(OrderHandle::getUpdateTime, DateUtils.getNowTime());
+            objectLambdaUpdateWrapper.set(OrderHandle::getPayStatus, 2);
+            objectLambdaUpdateWrapper.set(OrderHandle::getPayType, 2);
             this.update(null, objectLambdaUpdateWrapper);
 
             LambdaUpdateWrapper<Order> objectLambdaUpdateWrapper2 = Wrappers.lambdaUpdate();
             objectLambdaUpdateWrapper2.eq(Order::getHandleOrderSn, orderHandle.getHandleOrderSn());
             objectLambdaUpdateWrapper2.set(Order::getPayType, 7);
-            objectLambdaUpdateWrapper2.set(Order::getUpdateTime,DateUtils.getNowTime());
+            objectLambdaUpdateWrapper2.set(Order::getUpdateTime, DateUtils.getNowTime());
             iOrderService.update(null, objectLambdaUpdateWrapper2);
 
             Map<String, String> payResult = new HashMap<>();
@@ -289,21 +364,21 @@ public class OrderHandleServiceImpl extends ServiceImpl<OrderHandleMapper, Order
         if (Validator.isEmpty(orderHandle)) {
             throw new CustomException("录单单号不存在");
         }
-        if(orderHandle.getCreateUserId()!=bo.getCreateUserId()){
+        if (orderHandle.getCreateUserId() != bo.getCreateUserId()) {
             throw new CustomException("非法操作");
         }
-        if(orderHandle.getPayStatus()!=0){
+        if (orderHandle.getPayStatus() != 0) {
             throw new CustomException("非待支付状态");
         }
         LambdaUpdateWrapper<OrderHandle> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
         objectLambdaUpdateWrapper.eq(OrderHandle::getId, orderHandle.getId());
-        objectLambdaUpdateWrapper.set(OrderHandle::getUpdateTime,DateUtils.getNowTime());
-        objectLambdaUpdateWrapper.set(OrderHandle::getCloseTime,DateUtils.getNowTime());
-        objectLambdaUpdateWrapper.set(OrderHandle::getPayStatus,-1);
+        objectLambdaUpdateWrapper.set(OrderHandle::getUpdateTime, DateUtils.getNowTime());
+        objectLambdaUpdateWrapper.set(OrderHandle::getCloseTime, DateUtils.getNowTime());
+        objectLambdaUpdateWrapper.set(OrderHandle::getPayStatus, -1);
         this.update(null, objectLambdaUpdateWrapper);
 
         List<Order> list = iOrderService.list(new LambdaQueryWrapper<Order>().eq(Order::getHandleOrderSn, orderHandle.getHandleOrderSn()));
-        for(Order order : list){
+        for (Order order : list) {
             OrderEditBo editBo = new OrderEditBo();
             editBo.setOrderId(order.getOrderId());
             editBo.setOrderStatus(-1);
@@ -347,15 +422,204 @@ public class OrderHandleServiceImpl extends ServiceImpl<OrderHandleMapper, Order
      *
      * @param entity 实体类数据
      */
-    private void validEntityBeforeSave(OrderHandle entity){
+    private void validEntityBeforeSave(OrderHandle entity) {
         //TODO 做一些数据校验,如唯一约束
     }
 
     @Override
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
-        if(isValid){
+        if (isValid) {
             //TODO 做一些业务上的校验,判断是否需要校验
         }
         return this.removeByIds(ids);
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean refundApply(OrderHandleRefundBo bo) {
+        if (ObjectUtils.isNull(bo.getHandleOrderSn())) {
+            throw new CustomException("请先选择订单");
+        }
+        OrderHandle orderHandle = getOne(new LambdaQueryWrapper<OrderHandle>().eq(OrderHandle::getHandleOrderSn, bo.getHandleOrderSn()));
+        if (ObjectUtils.isNull(orderHandle)) {
+            throw new CustomException("订单信息有误");
+        }
+        if (ObjectUtils.isNotNull(orderHandle.getRefundStatus()) && orderHandle.getRefundStatus() == 0) {
+            throw new CustomException("当前订单存在退款审核,请先处理");
+        }
+        if (orderHandle.getPayType() == 2) {
+            //对公
+            if (ObjectUtils.isNull(bo.getPayee()) || ObjectUtils.isNull(bo.getPayeeBank()) || ObjectUtils.isNull(bo.getPayeeBankAccount())) {
+                throw new CustomException("请先填写收款信息");
+            }
+        }
+        bo.getOrderGoodsIds().forEach(orderGoodsId -> {
+            OrderGoods orderGoods = iOrderGoodsService.getById(orderGoodsId);
+            orderGoods.setRefundStatus(1);//申请退款
+            iOrderGoodsService.updateById(orderGoods);
+            Order order = iOrderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, orderGoods.getOrderSn()));
+            order.setOrderRefundStatus(0);
+            iOrderService.updateById(order);
+            //创建退款信息
+            OrderGoodsRefund refund = new OrderGoodsRefund();
+            refund.setCreateTime(DateUtils.getNowTime());
+            refund.setUpdateTime(DateUtils.getNowTime());
+            //退款单号
+            String out_trade_no = DateUtils.getDateOrderSn();
+            refund.setRefundSn(out_trade_no);
+            refund.setUserId(order.getUserId());
+            refund.setOrderSn(order.getOrderSn());
+            refund.setGoodsId(orderGoods.getGoodsId());
+            refund.setRefundFee(orderGoods.getGoodsPrice());
+            refund.setRealRefundFee(orderGoods.getGoodsRealPrice());
+            refund.setApplyReason(bo.getRefundReason());
+            refund.setType(3);//企业订单
+            refund.setOrderGoodsId(orderGoods.getOrderGoodsId());
+            refund.setPeriodStatus(0);//待审核
+            refund.setPayee(bo.getPayee());
+            refund.setPayeeBank(bo.getPayeeBank());
+            refund.setPayeeBankAccount(bo.getPayeeBankAccount());
+            iOrderGoodsRefundService.save(refund);
+        });
+        orderHandle.setRefundStatus(0);//待审核
+        orderHandle.setRefundPrice(bo.getRefundPrice());
+        return updateById(orderHandle);
+    }
+
+    @Override
+    public OrderHandleStatisticsVo statistics(OrderHandleQueryBo bo) {
+        List<OrderHandleVo> orderHandleVos = baseMapper.selectList(bo);
+        BigDecimal payPrice = orderHandleVos.stream().filter(x -> ObjectUtils.isNotNull(x.getOrderPrice())).map(OrderHandleVo::getOrderPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal refundPrice = orderHandleVos.stream().filter(x -> ObjectUtils.isNotNull(x.getRefundPrice())).map(OrderHandleVo::getRefundPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal orderPrice = payPrice.subtract(refundPrice);
+        Integer orderNum = orderHandleVos.size();
+        Set<Long> userIds = new HashSet<>();
+        orderHandleVos.forEach(item -> {
+            List<Order> list = iOrderService.list(new LambdaQueryWrapper<Order>().eq(Order::getHandleOrderSn, item.getHandleOrderSn()).eq(Order::getStatus, 1));
+            if (CollectionUtils.isNotEmpty(list)) {
+                list.forEach(x -> userIds.add(x.getUserId()));
+            }
+        });
+        Integer unCheckOrderNum = orderHandleVos.stream().filter(x -> ObjectUtils.isNotNull(x.getPayStatus()) && x.getPayStatus() == 0).collect(Collectors.toList()).size();
+        Integer unRefundNum = orderHandleVos.stream().filter(x -> ObjectUtils.isNotNull(x.getRefundStatus()) && x.getRefundStatus() == 0).collect(Collectors.toList()).size();
+
+        OrderHandleStatisticsVo vo = new OrderHandleStatisticsVo();
+        vo.setOrderPrice(orderPrice);
+        vo.setRefundPrice(refundPrice);
+        vo.setPayPrice(payPrice);
+        vo.setOrderNum(orderNum);
+        vo.setUnCheckOrderNum(unCheckOrderNum);
+        vo.setUnRefundNum(unRefundNum);
+        vo.setOrderUserNum(userIds.size());
+        return vo;
+    }
+
+    @Override
+    public boolean checkOrderHandle(OrderHandleCheckBo bo) {
+        OrderHandle orderHandle = getOne(new LambdaQueryWrapper<OrderHandle>().eq(OrderHandle::getHandleOrderSn, bo.getOrderHandleSn()));
+        if (ObjectUtils.isNull(orderHandle)) {
+            throw new CustomException("订单不存在,请检查");
+        }
+        if (orderHandle.getPayStatus() != 2) {
+            throw new CustomException("订单不需要审核,请检查");
+        }
+        switch (bo.getCheckResult()) {
+            case 1://通过
+                List<Order> list = iOrderService.list(new LambdaQueryWrapper<Order>().eq(Order::getHandleOrderSn, bo.getOrderHandleSn()).eq(Order::getStatus, 1));
+                list.forEach(item -> {
+                    iWxPayService.dealOrder(item.getOrderSn(), "");
+                });
+                orderHandle.setPayStatus(1);//已通过
+                orderHandle.setPayTime(DateUtils.getNowTime());
+                orderHandle.setCheckTime(DateUtils.getNowTime());
+                orderHandle.setUpdateTime(DateUtils.getNowTime());
+                updateById(orderHandle);
+                break;
+            case 2://不通过
+                orderHandle.setPayStatus(-2);//不通过
+                orderHandle.setCheckReason(bo.getCheckReason());
+                orderHandle.setCheckTime(DateUtils.getNowTime());
+                updateById(orderHandle);
+                break;
+            default:
+                break;
+        }
+        return true;
+    }
+
+    @Override
+    public boolean refundOrderHandle(OrderHandleCheckBo bo) {
+        OrderHandle orderHandle = getOne(new LambdaQueryWrapper<OrderHandle>().eq(OrderHandle::getHandleOrderSn, bo.getOrderHandleSn()));
+        if (ObjectUtils.isNull(orderHandle)) {
+            throw new CustomException("订单不存在,请检查");
+        }
+        if (orderHandle.getRefundStatus() != 0) {
+            throw new CustomException("订单不需要退款审核,请检查");
+        }
+        List<Order> orderList = iOrderService
+                .list(new LambdaQueryWrapper<Order>().eq(Order::getHandleOrderSn, bo.getOrderHandleSn())
+                        .eq(Order::getOrderRefundStatus, 0));
+        if (CollectionUtils.isEmpty(orderList)) {
+            throw new CustomException("未找到待审核退款订单,请检查");
+        }
+        List<OrderGoods> orderGoodsList = iOrderGoodsService.list(new LambdaQueryWrapper<OrderGoods>()
+                .in(OrderGoods::getOrderSn, orderList.stream().map(Order::getOrderSn).collect(Collectors.toList()))
+                .eq(OrderGoods::getRefundStatus, 1)
+                .eq(OrderGoods::getStatus, 1));
+
+        List<OrderGoodsRefund> goodsRefundList = iOrderGoodsRefundService.list(new LambdaQueryWrapper<OrderGoodsRefund>()
+                .in(OrderGoodsRefund::getOrderGoodsId, orderGoodsList.stream().map(OrderGoods::getOrderGoodsId).collect(Collectors.toList()))
+                .eq(OrderGoodsRefund::getStatus, 1)
+                .eq(OrderGoodsRefund::getPeriodStatus, 0));
+
+        switch (bo.getCheckResult()) {
+            case 1://通过
+                if (orderHandle.getPayType() == 1) {
+                    //微信支付
+                    goodsRefundList.forEach(refund -> {
+                        Order order = iOrderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, refund.getOrderSn()));
+                        Map<String, String> payResult = iWxPayService.refund(refund.getRefundSn(), order.getTransid(), refund.getRealRefundFee(), order.getPayPrice());
+                        if ("OK".equals(payResult.get("return_msg")) && Validator.isNotEmpty(payResult.get("refund_id"))) {
+                            OrderGoods orderGoods = iOrderGoodsService.getById(refund.getOrderGoodsId());
+                            Goods goods = iGoodsService.getById(orderGoods.getGoodsId());
+                            iOrderGoodsRefundService.refundCall(payResult.get("refund_id"), refund.getRefundId(), orderGoods.getOrderGoodsId(), order, goods.getGoodsType(), orderGoods.getGradeId(), order.getUserId(), goods.getGoodsId());
+                            //关闭C端用户的分销返利
+                            iOrderGoodsRefundService.shareClientCancelOldSys(order, orderGoods, refund.getRealRefundFee());
+                        } else {
+                            throw new CustomException("退款错误" + JSON.toJSONString(payResult));
+                        }
+                    });
+                } else {
+                    //对公转账
+                    goodsRefundList.forEach(refund -> {
+                        Order order = iOrderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, refund.getOrderSn()));
+                        OrderGoods orderGoods = iOrderGoodsService.getById(refund.getOrderGoodsId());
+                        Goods goods = iGoodsService.getById(orderGoods.getGoodsId());
+                        iOrderGoodsRefundService.refundCall("", refund.getRefundId(), orderGoods.getOrderGoodsId(), order, goods.getGoodsType(), orderGoods.getGradeId(), order.getUserId(), goods.getGoodsId());
+                        //关闭C端用户的分销返利
+                        iOrderGoodsRefundService.shareClientCancelOldSys(order, orderGoods, refund.getRealRefundFee());
+                    });
+                }
+                orderHandle.setRefundStatus(1);//已退款
+                updateById(orderHandle);
+                //是否存在发票
+                List<OrderInvoiceOrder> list = iOrderInvoiceOrderService
+                        .list(new LambdaQueryWrapper<OrderInvoiceOrder>().eq(OrderInvoiceOrder::getOrderSn, orderHandle.getHandleOrderSn()));
+                if (CollectionUtils.isNotEmpty(list)){
+                   iOrderInvoiceService.update(new LambdaUpdateWrapper<OrderInvoice>()
+                   .set(OrderInvoice::getWashStatus,1)//带冲红
+                   .in(OrderInvoice::getInvoiceId,list.stream().map(OrderInvoiceOrder::getInvoiceId).collect(Collectors.toList())));
+                }
+                break;
+            case 2://不通过
+                orderHandle.setRefundStatus(2);//不通过
+                orderHandle.setCheckReason(bo.getCheckReason());
+                orderHandle.setUpdateTime(DateUtils.getNowTime());
+                updateById(orderHandle);
+                break;
+            default:
+                break;
+        }
+        return true;
+    }
 }

+ 143 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderInvoiceServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.zhongzheng.common.exception.CustomException;
@@ -16,10 +17,17 @@ import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.modules.course.bo.CourseChapterBusinessAddBo;
 import com.zhongzheng.modules.course.mapper.CourseChapterMapper;
 import com.zhongzheng.modules.order.bo.*;
+import com.zhongzheng.modules.order.domain.Order;
+import com.zhongzheng.modules.order.domain.OrderHandle;
 import com.zhongzheng.modules.order.domain.OrderInvoice;
+import com.zhongzheng.modules.order.domain.OrderInvoiceOrder;
 import com.zhongzheng.modules.order.mapper.OrderInvoiceMapper;
+import com.zhongzheng.modules.order.service.IOrderHandleService;
 import com.zhongzheng.modules.order.service.IOrderInvoiceOrderService;
 import com.zhongzheng.modules.order.service.IOrderInvoiceService;
+import com.zhongzheng.modules.order.service.IOrderService;
+import com.zhongzheng.modules.order.vo.CompanyOrderInvoiceVo;
+import com.zhongzheng.modules.order.vo.CompanyStatisticsVo;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderInvoiceVo;
 import com.zhongzheng.modules.system.domain.SysOldOrg;
@@ -37,6 +45,7 @@ import com.github.pagehelper.Page;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -58,6 +67,13 @@ public class OrderInvoiceServiceImpl extends ServiceImpl<OrderInvoiceMapper, Ord
     @Autowired
     private IUserService userService;
 
+    @Autowired
+    private IOrderService iOrderService;
+
+    @Autowired
+    private IOrderHandleService iOrderHandleService;
+
+
     @Value("${invoice.host}")
     private String INVOICE_PATH;
 
@@ -121,6 +137,31 @@ public class OrderInvoiceServiceImpl extends ServiceImpl<OrderInvoiceMapper, Ord
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean insertByAddBo(OrderInvoiceAddBo bo) {
+        if (ObjectUtils.isNotNull(bo.getInvoiceType()) && bo.getInvoiceType() == 2){
+            //C端企业订单发票
+            if (ObjectUtils.isNull(bo.getOrderSn())){
+                throw new CustomException("请先选择订单");
+            }
+            OrderHandle order = iOrderHandleService.getOne(new LambdaQueryWrapper<OrderHandle>()
+                    .eq(OrderHandle::getHandleOrderSn, bo.getOrderSn())
+                    .eq(OrderHandle::getStatus,1));
+            if (ObjectUtils.isNull(order)){
+                throw new CustomException("订单信息有误");
+            }
+            OrderInvoice add = BeanUtil.toBean(bo, OrderInvoice.class);
+            add.setPeriodStatus(1);//发票待审核
+            add.setInvoiceStatus(1);
+            add.setCreateTime(DateUtils.getNowTime());
+            add.setUpdateTime(DateUtils.getNowTime());
+            add.setApplyTime(DateUtils.getNowTime());
+            save(add);
+            OrderInvoiceOrder orderInvoiceOrder = new OrderInvoiceOrder();
+            orderInvoiceOrder.setInvoiceId(add.getInvoiceId());
+            orderInvoiceOrder.setOrderSn(order.getHandleOrderSn());
+            iOrderInvoiceOrderService.save(orderInvoiceOrder);
+            return true;
+
+        }
         OrderInvoice add = BeanUtil.toBean(bo, OrderInvoice.class);
         if(Validator.isEmpty(bo.getOrderGoodsIds())||bo.getOrderGoodsIds().size()==0){
             throw new CustomException("请选择订单商品");
@@ -274,6 +315,107 @@ public class OrderInvoiceServiceImpl extends ServiceImpl<OrderInvoiceMapper, Ord
 
     @Override
     public List<OrderInvoiceVo> selectList(OrderInvoiceQueryBo bo) {
-        return baseMapper.selectList(bo);
+        return baseMapper.selectListByBo(bo);
+    }
+
+    @Override
+    public List<CompanyOrderInvoiceVo> listCompanyOrderInvoice(CompanyOrderInvoiceBo bo) {
+        return baseMapper.listCompanyOrderInvoice(bo);
+    }
+
+    @Override
+    public CompanyStatisticsVo listCompanyStatistics(CompanyOrderInvoiceBo bo) {
+        List<CompanyOrderInvoiceVo> invoiceVoList = baseMapper.listCompanyOrderInvoice(bo);
+        if (CollectionUtils.isEmpty(invoiceVoList)){
+            return null;
+        }
+        BigDecimal applyMoney = invoiceVoList.stream().map(CompanyOrderInvoiceVo::getInvoicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+        List<CompanyOrderInvoiceVo> collect = invoiceVoList.stream().filter(x -> ObjectUtils.isNotNull(x.getInvoiceStatus()) && x.getInvoiceStatus() == 1).collect(Collectors.toList());
+        BigDecimal unApplyMoney = collect.stream().map(CompanyOrderInvoiceVo::getInvoicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal refuseMoney = invoiceVoList.stream().filter(x -> ObjectUtils.isNotNull(x.getInvoiceStatus()) && x.getInvoiceStatus() == 3)
+                .map(CompanyOrderInvoiceVo::getInvoicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+        CompanyStatisticsVo statisticsVo = new CompanyStatisticsVo();
+        statisticsVo.setApplyMoney(applyMoney);
+        statisticsVo.setUnCheckMoney(unApplyMoney);
+        statisticsVo.setCheckMoney(applyMoney.subtract(unApplyMoney).subtract(refuseMoney));
+        statisticsVo.setApplyNum(invoiceVoList.size());
+        statisticsVo.setUnApplyNum(collect.size());
+        return statisticsVo;
+    }
+
+    @Override
+    public OrderInvoiceVo getCompanyInvoiceDetail(Long invoiceId) {
+        OrderInvoice orderInvoice = getById(invoiceId);
+        OrderInvoiceVo orderInvoiceVo = BeanUtil.toBean(orderInvoice, OrderInvoiceVo.class);
+        return orderInvoiceVo;
+    }
+
+    @Override
+    public boolean companyInvoiceCheck(CompanyInvoiceCheckBo bo) {
+        OrderInvoice invoice = getById(bo.getInvoiceId());
+        if (ObjectUtils.isNull(invoice)){
+            throw new CustomException("发票不存在,请检查!");
+        }
+        switch (bo.getCheckResult()){
+            case 1://通过
+                if (StringUtils.isBlank(bo.getInvoiceUrlList())){
+                    throw new CustomException("发票不存在,请检查!");
+                }
+                invoice.setInvoiceImg(bo.getInvoiceUrlList());
+                invoice.setHandleRemark(bo.getHandleRemark());
+                invoice.setPeriodStatus(3);
+                invoice.setInvoiceStatus(2);
+                invoice.setMakeOutTime(DateUtils.getNowTime());
+                invoice.setPeriodTime(DateUtils.getNowTime());
+                updateById(invoice);
+                //查询是否存在待冲红发票
+                OrderInvoiceOrder orderInvoice = iOrderInvoiceOrderService
+                        .getOne(new LambdaQueryWrapper<OrderInvoiceOrder>()
+                        .eq(OrderInvoiceOrder::getInvoiceId, invoice.getInvoiceId())
+                        .last("limit 1"));
+                if (ObjectUtils.isNotNull(orderInvoice)){
+                    List<OrderInvoice> invoices = baseMapper.listWashInvoice(orderInvoice.getOrderSn(),invoice.getInvoiceId());
+                    if (CollectionUtils.isNotEmpty(invoices)){
+                        //冲红
+                        invoices.forEach(x -> x.setWashStatus(2));
+                        updateBatchById(invoices);
+                    }
+                }
+                break;
+            case 2://不通过
+                invoice.setPeriodStatus(2);
+                invoice.setPeriodReason(bo.getCheckReason());
+                updateById(invoice);
+                break;
+            default :
+                break;
+        }
+        return true;
+    }
+
+    @Override
+    public boolean companyBatchHandle(CompanyInvoiceBatchBo bo) {
+        if (CollectionUtils.isEmpty(bo.getInvoiceIds())){
+            throw new CustomException("请先选择发票");
+        }
+        List<OrderInvoice> invoices = listByIds(bo.getInvoiceIds());
+        if (CollectionUtils.isEmpty(invoices)){
+            throw new CustomException("发票信息有误,请检查");
+        }
+        invoices.forEach(item -> {
+            if (ObjectUtils.isNotNull(bo.getWashStatus())){
+                if (ObjectUtils.isNull(item.getWashStatus()) || item.getWashStatus() != 1){
+                    throw new CustomException("存在不需要冲红的发票");
+                }
+                item.setWashStatus(bo.getWashStatus());
+            }
+            if (StringUtils.isNotBlank(bo.getHandleRemark())){
+                item.setHandleRemark(bo.getHandleRemark());
+            }
+            if (StringUtils.isNotBlank(bo.getRemark())){
+                item.setInvoiceRemark(bo.getRemark());
+            }
+        });
+        return updateBatchById(invoices);
     }
 }

+ 71 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/CompanyOrderInvoiceVo.java

@@ -0,0 +1,71 @@
+package com.zhongzheng.modules.order.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月23日 10:34
+ */
+@Data
+public class CompanyOrderInvoiceVo implements Serializable {
+
+    public Long invoiceId;
+
+    @ApiModelProperty("发票状态:1待审核 2已开票 3不通过")
+    private Integer invoiceStatus;
+
+    @ApiModelProperty("申请时间")
+    private Long applyTime;
+
+    @ApiModelProperty("开票时间")
+    private Long invoiceTime;
+
+    @ApiModelProperty("订单号")
+    private String orderSn;
+
+    @ApiModelProperty("发票金额")
+    private BigDecimal invoicePrice;
+
+    @ApiModelProperty("发票类型:1普通发票 2 增值税专用发票")
+    private Integer type;
+
+    @ApiModelProperty("发票抬头")
+    private String invoiceTitle;
+
+    @ApiModelProperty("发票主体:1个人 2企业")
+    private Integer subject;
+
+    @ApiModelProperty("纳税登记号")
+    private String taxRegistryNumber;
+
+    @ApiModelProperty("发票备注")
+    private String invoiceRemark;
+
+    @ApiModelProperty("收票姓名")
+    private String consignee;
+
+    @ApiModelProperty("收票地址")
+    private String shippingAddress;
+
+    @ApiModelProperty("邮箱")
+    private String email;
+
+    @ApiModelProperty("冲红状态:1待冲红 2已冲红")
+    private Integer washStatus;
+
+    @ApiModelProperty("收票方式:1在线下载 2邮件接收 3纸质快递 (多个用逗号隔开)")
+    private String invoiceMode;
+
+    @ApiModelProperty("开票备注")
+    private String openRemark;
+
+    @ApiModelProperty("处理备注")
+    private String handleRemark;
+
+    @ApiModelProperty("备注")
+    private String remark;
+}

+ 31 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/CompanyStatisticsVo.java

@@ -0,0 +1,31 @@
+package com.zhongzheng.modules.order.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月23日 10:34
+ */
+@Data
+public class CompanyStatisticsVo implements Serializable {
+
+    @ApiModelProperty("申请金额")
+    private BigDecimal applyMoney;
+
+    @ApiModelProperty("已审金额")
+    private BigDecimal checkMoney;
+
+    @ApiModelProperty("待审金额")
+    private BigDecimal unCheckMoney;
+
+    @ApiModelProperty("申请数量")
+    private Integer applyNum;
+
+    @ApiModelProperty("待审发票")
+    private Integer unApplyNum;
+
+}

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderHandleGoodsVo.java

@@ -79,5 +79,11 @@ public class OrderHandleGoodsVo {
 
 	private Long gradeId;
 	private Integer payStatus;
+	@ApiModelProperty("退款状态:0待审核 1已退款 2不通过")
+	private Integer refundStatus;
+	@ApiModelProperty("退款原因")
+	private String refundReason;
+	@ApiModelProperty("审核意见")
+	private String periodReason;
 
 }

+ 28 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderHandleStatisticsVo.java

@@ -0,0 +1,28 @@
+package com.zhongzheng.modules.order.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月25日 17:41
+ */
+@Data
+public class OrderHandleStatisticsVo implements Serializable {
+
+    private BigDecimal payPrice;
+
+    private BigDecimal refundPrice;
+
+    private BigDecimal orderPrice;
+
+    private Integer orderNum;
+
+    private Integer orderUserNum;
+
+    private Integer unCheckOrderNum;
+
+    private Integer unRefundNum;
+}

+ 31 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderHandleVo.java

@@ -117,4 +117,35 @@ public class OrderHandleVo {
 	@ApiModelProperty("收款公司账号")
 	private String recCompanyAccount;
 
+	@ApiModelProperty("审核意见")
+	private String checkReason;
+
+	@ApiModelProperty("发票状态:1待审核 2已开票 3不通过")
+	private Integer invoiceStatus;
+
+	@ApiModelProperty("发票审核意见")
+	private String invoiceReason;
+
+	@ApiModelProperty("发票地址")
+	private String invoiceUrl;
+
+	@ApiModelProperty("处理备注")
+	private String handleRemark;
+
+	@ApiModelProperty("退款金额")
+	private BigDecimal refundPrice;
+
+	@ApiModelProperty("退款状态: 0待审核 1已退款 2不通过")
+	private Integer refundStatus;
+
+	@ApiModelProperty("收票方式:1在线下载 2邮件接收 3纸质快递 (多个用逗号隔开)")
+	private String invoiceMode;
+
+	@ApiModelProperty("收款人")
+	private String payee;
+	@ApiModelProperty("收款人银行")
+	private String payeeBank;
+	@ApiModelProperty("收款人账号")
+	private String payeeBankAccount;
+
 }

+ 22 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderInvoiceVo.java

@@ -139,4 +139,26 @@ public class OrderInvoiceVo {
 	@Excel(name = "审核时间")
 	@ApiModelProperty("审核时间")
 	private Long periodTime;
+	/** 发票类型:0,C端个人发票  1,C端企业发票 */
+	@ApiModelProperty("发票类型:1,C端个人发票  2,C端企业发票")
+	private Integer invoiceType;
+	@ApiModelProperty("发票备注")
+	private String invoiceRemark;
+	/** 收票姓名 */
+	@ApiModelProperty("收票姓名")
+	private String consignee;
+	/** 收票地址 */
+	@ApiModelProperty("收票地址")
+	private String shippingAddress;
+	/** 收票方式:1在线下载 2邮件接收 3纸质快递 (多个用逗号隔开) */
+	@ApiModelProperty("收票方式:1在线下载 2邮件接收 3纸质快递 (多个用逗号隔开)")
+	private String invoiceMode;
+	@ApiModelProperty("订单号")
+	private String orderSn;
+	@ApiModelProperty("冲红状态:1待冲红 2已冲红")
+	private Integer washStatus;
+	@ApiModelProperty("开票备注")
+	private String openRemark;
+	@ApiModelProperty("处理备注")
+	private String handleRemark;
 }

+ 7 - 7
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserHandleBo.java

@@ -18,20 +18,20 @@ public class UserHandleBo implements Serializable {
     private Long userId;
     /** 经办姓名 */
     @ApiModelProperty("经办姓名")
-    private String handleName;
+    private String realname;
     /** 经办性别:1男,2女 */
-    @ApiModelProperty("经办性别:1男,2女")
-    private Integer handleSex;
+    @ApiModelProperty("经办姓别")
+    private String sex;
     /** 经办身份证 */
     @ApiModelProperty("经办身份证")
-    private String handleCard;
+    private String idCard;
     /** 经办手机号 */
     @ApiModelProperty("经办手机号")
-    private String handlePhone;
+    private String telphone;
     /** 经办学历 */
     @ApiModelProperty("经办学历")
-    private String handleEdu;
+    private String eduLevel;
     /** 经办公司 */
     @ApiModelProperty("经办公司")
-    private String handleCompany;
+    private String companyName;
 }

+ 6 - 6
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserHandleImportBo.java

@@ -24,30 +24,30 @@ public class UserHandleImportBo implements Serializable {
     /** 经办姓名 */
     @ApiModelProperty("经办姓名")
     @Excel(name = "*姓名")
-    private String handleName;
+    private String realname;
 
     /** 经办性别:1男,2女 */
     @ApiModelProperty("经办姓名")
     @Excel(name = "*性别")
-    private String handleSexStr;
+    private String sex;
 
     /** 经办身份证 */
     @ApiModelProperty("经办身份证")
     @Excel(name = "*身份证号")
-    private String handleCard;
+    private String idCard;
 
     /** 经办手机号 */
     @ApiModelProperty("经办手机号")
     @Excel(name = "*手机号码")
-    private String handlePhone;
+    private String telphone;
 
     /** 经办学历 */
     @ApiModelProperty("经办学历")
     @Excel(name = "*教育层数")
-    private String handleEdu;
+    private String eduLevel;
 
     /** 经办公司 */
     @ApiModelProperty("经办公司")
     @Excel(name = "*所属公司")
-    private String handleCompany;
+    private String companyName;
 }

+ 6 - 6
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserHandle.java

@@ -30,17 +30,17 @@ private static final long serialVersionUID=1L;
     /** 用户ID */
     private Long userId;
     /** 经办姓名 */
-    private String handleName;
+    private String realname;
     /** 经办性别:1男,2女 */
-    private Integer handleSex;
+    private String sex;
     /** 经办身份证 */
-    private String handleCard;
+    private String idCard;
     /** 经办手机号 */
-    private String handlePhone;
+    private String telphone;
     /** 经办学历 */
-    private String handleEdu;
+    private String eduLevel;
     /** 经办公司 */
-    private String handleCompany;
+    private String companyName;
     /** 状态 1正常 0关闭 -1删除*/
     private Integer status;
     /** 创建时间 */

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserHandleService.java

@@ -19,7 +19,7 @@ public interface IUserHandleService extends IService<UserHandle> {
 
     List<UserHandleVo> queryUserHandleList(UserHandleQueryBo bo);
 
-    boolean saveUserHandle(UserHandleBo bo);
+    boolean saveUserHandle(List<UserHandleBo> bo);
 
     boolean editUserHandle(UserHandleBo bo);
 

+ 13 - 9
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserHandleServiceImpl.java

@@ -35,9 +35,9 @@ public class UserHandleServiceImpl extends ServiceImpl<UserHandleMapper, UserHan
     public List<UserHandleVo> queryUserHandleList(UserHandleQueryBo bo) {
         List<UserHandle> list = list(new LambdaQueryWrapper<UserHandle>()
                 .eq(UserHandle::getStatus, 1)
-                .eq(StringUtils.isNotBlank(bo.getEdu()), UserHandle::getHandleEdu, bo.getEdu())
-                .and(ObjectUtils.isNotNull(bo.getKeyWord()), x -> x.like(UserHandle::getHandleName, bo.getKeyWord())
-                        .or().like(UserHandle::getHandleCard, bo.getKeyWord()).or().like(UserHandle::getHandlePhone, bo.getKeyWord()))
+                .eq(StringUtils.isNotBlank(bo.getEdu()), UserHandle::getEduLevel, bo.getEdu())
+                .and(ObjectUtils.isNotNull(bo.getKeyWord()), x -> x.like(UserHandle::getRealname, bo.getKeyWord())
+                        .or().like(UserHandle::getIdCard, bo.getKeyWord()).or().like(UserHandle::getTelphone, bo.getKeyWord()))
                 .orderByDesc(UserHandle::getCreateTime));
         if (CollectionUtils.isEmpty(list)){
             return new ArrayList<>();
@@ -46,11 +46,15 @@ public class UserHandleServiceImpl extends ServiceImpl<UserHandleMapper, UserHan
     }
 
     @Override
-    public boolean saveUserHandle(UserHandleBo bo) {
-        UserHandle userHandle = BeanUtil.toBean(bo, UserHandle.class);
-        userHandle.setCreateTime(DateUtils.getNowTime());
-        userHandle.setUpdateTime(DateUtils.getNowTime());
-        return save(userHandle);
+    public boolean saveUserHandle(List<UserHandleBo> bo) {
+        List<UserHandle> collect = bo.stream().map(item -> {
+            UserHandle userHandle = BeanUtil.toBean(item, UserHandle.class);
+            userHandle.setCreateTime(DateUtils.getNowTime());
+            userHandle.setUpdateTime(DateUtils.getNowTime());
+            return userHandle;
+        }).collect(Collectors.toList());
+
+        return saveBatch(collect);
     }
 
     @Override
@@ -75,7 +79,7 @@ public class UserHandleServiceImpl extends ServiceImpl<UserHandleMapper, UserHan
         }
         List<UserHandle> handles = userHandles.stream().map(item -> {
             UserHandle userHandle = BeanUtil.toBean(item, UserHandle.class);
-            userHandle.setHandleSex(StringUtils.isNotBlank(item.getHandleSexStr()) && item.getHandleSexStr().equals("男") ? 1 : 2);
+            userHandle.setSex(item.getSex());
             userHandle.setUserId(userId);
             userHandle.setCreateTime(DateUtils.getNowTime());
             userHandle.setUpdateTime(DateUtils.getNowTime());

+ 6 - 6
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserHandleVo.java

@@ -24,22 +24,22 @@ public class UserHandleVo implements Serializable {
     private Long userId;
     /** 经办姓名 */
     @ApiModelProperty("经办姓名")
-    private String handleName;
+    private String realname;
     /** 经办性别:1男,2女 */
     @ApiModelProperty("经办姓名")
-    private Integer handleSex;
+    private String sex;
     /** 经办身份证 */
     @ApiModelProperty("经办身份证")
-    private String handleCard;
+    private String idCard;
     /** 经办手机号 */
     @ApiModelProperty("经办手机号")
-    private String handlePhone;
+    private String telphone;
     /** 经办学历 */
     @ApiModelProperty("经办学历")
-    private String handleEdu;
+    private String eduLevel;
     /** 经办公司 */
     @ApiModelProperty("经办公司")
-    private String handleCompany;
+    private String companyName;
     /** 是否完成 1完成 0未完成 */
     @ApiModelProperty("是否完成 1完成 0未完成")
     private Integer status;

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/IWxPayService.java

@@ -49,4 +49,6 @@ public interface IWxPayService {
 
 	boolean shareToOldSys(Order order,List<OrderGoods> goodsList);
 
+	boolean dealOrder(String out_trade_no, String transaction_id);
+
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/impl/WxPayServiceImpl.java

@@ -526,6 +526,7 @@ public class WxPayServiceImpl implements IWxPayService {
         return true;
     }
 
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean dealOrder(String out_trade_no, String transaction_id) {
         String key = out_trade_no;

+ 34 - 1
zhongzheng-system/src/main/resources/mapper/modules/order/OrderHandleMapper.xml

@@ -51,14 +51,44 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="handleOrderSn != null and handleOrderSn != ''">
             AND oh.handle_order_sn = #{handleOrderSn}
         </if>
+        <if test="refundStatus != null and refundStatus != ''">
+            AND oh.refund_status = #{refundStatus}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            AND oh.check_time &gt;= #{refundStatus}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            AND oh.check_time &lt;= #{refundStatus}
+        </if>
         <if test="payStatus != null and payStatus != ''">
             AND oh.pay_status = #{payStatus}
         </if>)u
-
+        <if test="invoiceStatus != null and invoiceStatus != ''">
+         LEFT JOIN
+            (SELECT
+            oi.*
+            FROM
+            order_invoice_order oio
+            LEFT JOIN order_invoice oi ON oio.invoice_id = oi.invoice_id
+            WHERE
+            oio.order_sn = u.handle_order_sn
+            ORDER BY
+            oi.create_time DESC
+            LIMIT 1) o
+        </if>
         LEFT JOIN course_education_type cet ON u.education_type_id = cet.id
         LEFT JOIN course_project_type cpt ON u.project_id = cpt.id
         LEFT JOIN course_business cb ON u.business_id = cb.id
         where 1=1
+        <if test="invoiceStatus != null and invoiceStatus == 1">
+            AND o.period_status = 1
+        </if>
+        <if test="invoiceStatus != null and invoiceStatus == 2">
+            AND o.invoice_status = 2
+        </if>
+        <if test="invoiceStatus != null and invoiceStatus == 3">
+            AND o.period_status = 2
+        </if>
         ORDER BY u.create_time DESC
     </select>
 
@@ -83,5 +113,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 LEFT JOIN goods g ON og.goods_id = g.goods_id
         WHERE
             o.handle_order_sn = #{handleOrderSn}
+            <if test="refundStatus != null and invoiceStatus == 0">
+                AND og.refund_status = 1
+            </if>
     </select>
 </mapper>

+ 78 - 3
zhongzheng-system/src/main/resources/mapper/modules/order/OrderInvoiceMapper.xml

@@ -90,12 +90,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             oio.invoice_id = #{invoice_id}
     </select>
 
-    <select id="selectList" parameterType="com.zhongzheng.modules.order.bo.OrderInvoiceQueryBo" resultMap="OrderInvoiceVoResult">
+    <select id="selectListByBo" parameterType="com.zhongzheng.modules.order.bo.OrderInvoiceQueryBo" resultMap="OrderInvoiceVoResult">
         SELECT
         oi.*,u.id_card,u.realname
         FROM
         order_invoice oi LEFT JOIN `user` u on oi.user_id = u.user_id
-        where 1=1 and oi.`status` != -1
+        where 1=1 and oi.`status` != -1 and oi.`invoice_type` = 1
         <if test="type != null and type != ''">
             AND oi.type = #{type}
         </if>
@@ -140,7 +140,82 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
           AND oi.period_status != 2 and  oi.`status` = 1
     </select>
 
+    <select id="listCompanyOrderInvoice" parameterType="com.zhongzheng.modules.order.bo.CompanyOrderInvoiceBo"
+            resultType="com.zhongzheng.modules.order.vo.CompanyOrderInvoiceVo">
+        SELECT
+            oi.invoice_id,
+            CASE
+                WHEN oi.period_status = 1 THEN
+                    1
+                WHEN oi.period_status = 2 THEN
+                    3
+                WHEN oi.invoice_status = 2 THEN
+                    2 ELSE 0
+                END invoiceStatus,
+            oi.apply_time AS applyTime,
+            oi.make_out_time AS invoiceTime,
+            oh.handle_order_sn AS orderSn,
+            oi.amount AS invoicePrice,
+            oi.type,
+            oi.invoice_title,
+            oi.`subject`,
+            oi.tax_registry_number,
+            oi.invoice_remark as remark,
+            oi.consignee,
+            oi.shipping_address,
+            oi.email,
+            oi.`status`,
+            oi.invoice_mode,
+            oi.open_remark,
+            oi.wash_status,
+            oi.handle_remark
+        FROM
+            order_invoice oi
+                LEFT JOIN order_invoice_order oio ON oi.invoice_id = oio.invoice_id
+                LEFT JOIN order_handle oh ON oio.order_sn = oh.handle_order_sn
+                LEFT JOIN `user` u ON oh.create_user_id = u.user_id
+        WHERE
+            oi.invoice_type = 2
+            <if test="goodsType != null and goodsType != ''">
+                AND oh.goods_type = #{goodsType}
+            </if>
+            <if test="educationTypeId != null and educationTypeId != ''">
+                AND oh.education_type_id = #{goodsType}
+            </if>
+            <if test="businessId != null and businessId != ''">
+                AND oh.business_id = #{businessId}
+            </if>
+            <if test="invoiceStatus != null and invoiceStatus == 1">
+                AND oi.period_status = 1
+            </if>
+            <if test="invoiceStatus != null and invoiceStatus == 2">
+                AND oi.invoice_status = 2
+            </if>
+            <if test="invoiceStatus != null and invoiceStatus == 3">
+                AND oi.period_status = 2
+            </if>
+            <if test="washStatus != null">
+                AND oi.wash_status = #{washStatus}
+            </if>
+            <if test="invoiceMode != null">
+                AND INSTR( oi.invoice_mode, #{invoiceMode})
+            </if>
+            <if test="keyword != null and keyword != ''">
+                AND ( oio.order_sn = #{keyword} OR u.realname like concat('%', #{keyword}, '%') OR u.id_card = #{keyword,typeHandler=com.zhongzheng.common.type.EncryptHandler} )
+            </if>
+            ORDER BY oi.create_time DESC
+    </select>
 
-
+    <select id="listWashInvoice" parameterType="map" resultType="com.zhongzheng.modules.order.domain.OrderInvoice">
+        SELECT
+            oi.*
+        FROM
+            order_invoice_order oio
+                LEFT JOIN order_invoice oi ON oio.invoice_id = oi.invoice_id
+        WHERE
+            oio.order_sn = #{orderSn}
+            AND oio.invoice_id != #{invoiceId}
+	        AND oi.wash_status = 1
+    </select>
 
 </mapper>