Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

24282 2 лет назад
Родитель
Сommit
ab9ff92817
100 измененных файлов с 3149 добавлено и 56 удалено
  1. 17 0
      code/src/test/java/ItemDataSource.java
  2. 17 0
      code/src/test/java/victoriatouristDataSource.java
  3. 0 0
      hx-account/src/main/java/com/fjhx/account/a-json/AccountPaymentApi.json
  4. 75 0
      hx-account/src/main/java/com/fjhx/account/controller/account/AccountPaymentController.java
  5. 4 1
      hx-account/src/main/java/com/fjhx/account/controller/account/AccountRequestFundsController.java
  6. 1 1
      hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountManagementSelectDto.java
  7. 25 0
      hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountPaymentDto.java
  8. 17 0
      hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountPaymentSelectDto.java
  9. 12 0
      hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountRequestFundsSelectDto.java
  10. 5 0
      hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountRunningWaterSelectDto.java
  11. 58 0
      hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountPayment.java
  12. 0 4
      hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountRequestFunds.java
  13. 17 0
      hx-account/src/main/java/com/fjhx/account/entity/account/vo/AccountPaymentVo.java
  14. 13 0
      hx-account/src/main/java/com/fjhx/account/entity/account/vo/AccountRequestFundsVo.java
  15. 0 1
      hx-account/src/main/java/com/fjhx/account/flow/AccountRequestFundsFlow.java
  16. 34 0
      hx-account/src/main/java/com/fjhx/account/mapper/account/AccountPaymentMapper.java
  17. 48 0
      hx-account/src/main/java/com/fjhx/account/service/account/AccountPaymentService.java
  18. 12 4
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountManagementServiceImpl.java
  19. 156 0
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentServiceImpl.java
  20. 26 6
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRequestFundsServiceImpl.java
  21. 5 1
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRunningWaterServiceImpl.java
  22. 49 0
      hx-account/src/main/resources/mapper/account/AccountPaymentMapper.xml
  23. 3 2
      hx-account/src/main/resources/mapper/account/AccountRequestFundsMapper.xml
  24. 1 1
      hx-account/src/main/resources/mapper/account/AccountRunningWaterMapper.xml
  25. 5 0
      hx-admin/pom.xml
  26. 4 0
      hx-admin/src/main/resources/application-dev.yml
  27. 4 0
      hx-admin/src/main/resources/application-prod.yml
  28. 4 0
      hx-admin/src/main/resources/application-test.yml
  29. 1 0
      hx-common/src/main/java/com/fjhx/common/constant/SourceConstant.java
  30. 68 0
      hx-item/src/main/java/com/fjhx/item/controller/product/ProductSpuController.java
  31. 23 0
      hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductSpuDto.java
  32. 17 0
      hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductSpuSelectDto.java
  33. 4 0
      hx-item/src/main/java/com/fjhx/item/entity/product/po/ProductInfo.java
  34. 37 0
      hx-item/src/main/java/com/fjhx/item/entity/product/po/ProductSpu.java
  35. 28 0
      hx-item/src/main/java/com/fjhx/item/entity/product/vo/ProductSpuVo.java
  36. 26 0
      hx-item/src/main/java/com/fjhx/item/mapper/product/ProductSpuMapper.java
  37. 46 0
      hx-item/src/main/java/com/fjhx/item/service/product/ProductSpuService.java
  38. 91 0
      hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductSpuServiceImpl.java
  39. 22 0
      hx-item/src/main/resources/mapper/product/ProductSpuMapper.xml
  40. 16 5
      hx-oa/src/main/java/com/fjhx/oa/controller/netdisk/NetdiskController.java
  41. 5 0
      hx-oa/src/main/java/com/fjhx/oa/entity/netdisk/vo/NetdiskVo.java
  42. 5 3
      hx-oa/src/main/java/com/fjhx/oa/service/netdisk/NetdiskService.java
  43. 33 8
      hx-oa/src/main/java/com/fjhx/oa/service/netdisk/impl/NetdiskServiceImpl.java
  44. 71 0
      hx-purchase/src/main/java/com/fjhx/purchase/controller/quality/QualityController.java
  45. 71 0
      hx-purchase/src/main/java/com/fjhx/purchase/controller/quality/QualityDetailController.java
  46. 71 0
      hx-purchase/src/main/java/com/fjhx/purchase/controller/sales/SalesReturnController.java
  47. 71 0
      hx-purchase/src/main/java/com/fjhx/purchase/controller/sales/SalesReturnDetailController.java
  48. 51 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/enums/ArrivalDetailStatusEnum.java
  49. 0 10
      hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/po/ArrivalDetail.java
  50. 17 1
      hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/vo/ArrivalDetailVo.java
  51. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/quality/dto/QualityDetailDto.java
  52. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/quality/dto/QualityDetailSelectDto.java
  53. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/quality/dto/QualityDto.java
  54. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/quality/dto/QualitySelectDto.java
  55. 51 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/quality/po/Quality.java
  56. 58 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/quality/po/QualityDetail.java
  57. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/quality/vo/QualityDetailVo.java
  58. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/quality/vo/QualityVo.java
  59. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/dto/SalesReturnDetailDto.java
  60. 21 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/dto/SalesReturnDetailSelectDto.java
  61. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/dto/SalesReturnDto.java
  62. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/dto/SalesReturnSelectDto.java
  63. 54 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/enums/SalesReturnDetailStatusEnum.java
  64. 51 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/enums/SalesReturnStatusEnum.java
  65. 60 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/po/SalesReturn.java
  66. 48 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/po/SalesReturnDetail.java
  67. 61 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/vo/SalesReturnDetailVo.java
  68. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/vo/SalesReturnVo.java
  69. 6 5
      hx-purchase/src/main/java/com/fjhx/purchase/flow/PurchaseFlow.java
  70. 106 0
      hx-purchase/src/main/java/com/fjhx/purchase/flow/SalesReturnFlow.java
  71. 1 1
      hx-purchase/src/main/java/com/fjhx/purchase/flow/SubscribeFlow.java
  72. 34 0
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/quality/QualityDetailMapper.java
  73. 26 0
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/quality/QualityMapper.java
  74. 26 0
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/sales/SalesReturnDetailMapper.java
  75. 26 0
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/sales/SalesReturnMapper.java
  76. 5 1
      hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/impl/ArrivalDetailServiceImpl.java
  77. 54 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/quality/QualityDetailService.java
  78. 46 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/quality/QualityService.java
  79. 72 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/quality/impl/QualityDetailServiceImpl.java
  80. 112 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/quality/impl/QualityServiceImpl.java
  81. 46 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/sales/SalesReturnDetailService.java
  82. 46 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/sales/SalesReturnService.java
  83. 112 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/sales/impl/SalesReturnDetailServiceImpl.java
  84. 60 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/sales/impl/SalesReturnServiceImpl.java
  85. 6 0
      hx-purchase/src/main/java/com/fjhx/purchase/util/code/CodeEnum.java
  86. 4 1
      hx-purchase/src/main/resources/mapper/arrival/ArrivalDetailMapper.xml
  87. 31 0
      hx-purchase/src/main/resources/mapper/quality/QualityDetailMapper.xml
  88. 19 0
      hx-purchase/src/main/resources/mapper/quality/QualityMapper.xml
  89. 15 0
      hx-purchase/src/main/resources/mapper/sales/SalesReturnDetailMapper.xml
  90. 18 0
      hx-purchase/src/main/resources/mapper/sales/SalesReturnMapper.xml
  91. 25 0
      hx-victoriatourist/pom.xml
  92. 43 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/controller/abnormal/AbnormalDetailsController.java
  93. 34 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/controller/abnormal/AbnormalInfoController.java
  94. 17 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/abnormal/dto/AbnormalDetailsDto.java
  95. 22 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/abnormal/dto/AbnormalDetailsSelectDto.java
  96. 17 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/abnormal/dto/AbnormalInfoDto.java
  97. 22 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/abnormal/dto/AbnormalInfoSelectDto.java
  98. 57 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/abnormal/po/AbnormalDetails.java
  99. 62 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/abnormal/po/AbnormalInfo.java
  100. 19 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/abnormal/vo/AbnormalDetailsVo.java

+ 17 - 0
code/src/test/java/ItemDataSource.java

@@ -0,0 +1,17 @@
+import fly.generator.GeneratorApplication;
+
+public class ItemDataSource {
+
+    public static void main(String[] args) {
+        GeneratorApplication.builder()
+                .url("jdbc:mysql://36.134.91.96:17330/bytesailing_item?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true")
+                .username("fjhx2012mysql")
+                .password("3PN-Mzn#vnP&q6d")
+                .port(9989)
+                .module("hx-item")
+                .parent("com.fjhx.item")
+                .superServiceClass("com.ruoyi.common.core.service.BaseService")
+                .build();
+    }
+
+}

+ 17 - 0
code/src/test/java/victoriatouristDataSource.java

@@ -0,0 +1,17 @@
+import fly.generator.GeneratorApplication;
+
+public class victoriatouristDataSource {
+
+    public static void main(String[] args) {
+        GeneratorApplication.builder()
+                .url("jdbc:mysql://36.134.91.96:17330/bytesailing_victoriatourist?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true")
+                .username("fjhx2012mysql")
+                .password("3PN-Mzn#vnP&q6d")
+                .port(9989)
+                .module("hx-victoriatourist")
+                .parent("com.fjhx.victoriatourist")
+                .superServiceClass("com.ruoyi.common.core.service.BaseService")
+                .build();
+    }
+
+}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
hx-account/src/main/java/com/fjhx/account/a-json/AccountPaymentApi.json


+ 75 - 0
hx-account/src/main/java/com/fjhx/account/controller/account/AccountPaymentController.java

@@ -0,0 +1,75 @@
+package com.fjhx.account.controller.account;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.account.entity.account.dto.AccountRequestFundsSelectDto;
+import com.fjhx.account.entity.account.vo.AccountRequestFundsVo;
+import com.fjhx.common.constant.SourceConstant;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.account.vo.AccountPaymentVo;
+import com.fjhx.account.entity.account.dto.AccountPaymentSelectDto;
+import com.fjhx.account.entity.account.dto.AccountPaymentDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.account.service.account.AccountPaymentService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 打款表 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-04-11
+ */
+@DS(SourceConstant.ACCOUNT)
+@RestController
+@RequestMapping("/accountPayment")
+public class AccountPaymentController {
+
+    @Autowired
+    private AccountPaymentService accountPaymentService;
+
+    /**
+     * 打款表分页
+     */
+    @PostMapping("/page")
+    public Page<AccountRequestFundsVo> page(@RequestBody AccountRequestFundsSelectDto dto) {
+        return accountPaymentService.getPage(dto);
+    }
+
+    /**
+     * 打款表明细
+     */
+    @PostMapping("/detail")
+    public AccountPaymentVo detail(@RequestBody BaseSelectDto dto) {
+        return accountPaymentService.detail(dto.getId());
+    }
+
+    /**
+     * 打款功能
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody AccountPaymentDto accountPaymentDto) {
+        accountPaymentService.add(accountPaymentDto);
+    }
+
+    /**
+     * 打款表编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody AccountPaymentDto accountPaymentDto) {
+        accountPaymentService.edit(accountPaymentDto);
+    }
+
+    /**
+     * 打款表删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        accountPaymentService.delete(dto.getId());
+    }
+
+
+
+}

+ 4 - 1
hx-account/src/main/java/com/fjhx/account/controller/account/AccountRequestFundsController.java

@@ -1,5 +1,7 @@
 package com.fjhx.account.controller.account;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.account.entity.account.vo.AccountRequestFundsVo;
@@ -15,9 +17,10 @@ import org.springframework.beans.factory.annotation.Autowired;
  * 请款表 前端控制器
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-10
  */
+@DS(SourceConstant.ACCOUNT)
 @RestController
 @RequestMapping("/accountRequestFunds")
 public class AccountRequestFundsController {

+ 1 - 1
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountManagementSelectDto.java

@@ -18,7 +18,7 @@ public class AccountManagementSelectDto extends BaseSelectDto {
     /**
      * 账户名
      */
-    private String name;
+    private String keyword;
 
     /**
      * 开户银行

+ 25 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountPaymentDto.java

@@ -0,0 +1,25 @@
+package com.fjhx.account.entity.account.dto;
+
+import com.fjhx.account.entity.account.po.AccountPayment;
+import com.fjhx.file.entity.ObsFile;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 打款表新增编辑入参实体
+ *
+ * @author
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class AccountPaymentDto extends AccountPayment {
+
+    /**
+     * 附件信息
+     */
+    private List<ObsFile> fileList;
+
+}

+ 17 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountPaymentSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.account.entity.account.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 打款表列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class AccountPaymentSelectDto extends BaseSelectDto {
+
+}

+ 12 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountRequestFundsSelectDto.java

@@ -22,4 +22,16 @@ public class AccountRequestFundsSelectDto extends BaseSelectDto {
      * 流程状态(10。审批中  20 驳回  30 审批通过)
      */
     private String status;
+
+    /**
+     * 打款状态(字典payment_status)
+     */
+    private String paymentStatus;
+
+    /**
+     * 模糊查询时使用
+     */
+    private String keyword;
+
+
 }

+ 5 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountRunningWaterSelectDto.java

@@ -27,4 +27,9 @@ public class AccountRunningWaterSelectDto extends BaseSelectDto {
      * 收支类型:10 收入,20支出
      */
     private String status;
+
+    /**
+     * 模糊查询时使用
+     */
+    private String keyword;
 }

+ 58 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountPayment.java

@@ -0,0 +1,58 @@
+package com.fjhx.account.entity.account.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 打款表
+ * </p>
+ *
+ * @author
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+@TableName("account_payment")
+public class AccountPayment extends BasePo {
+
+    /**
+     * 账户表ID
+     */
+    private Long accountManagementId;
+
+    /**
+     * 请款表ID
+     */
+    private Long accountRequestFundsId;
+
+    /**
+     * 打款时间
+     */
+    private Date expensesTime;
+
+    /**
+     * 币种(字典account_currency)
+     */
+    private String currency;
+
+    /**
+     * 付款金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 打款状态(字典(payment_status)
+     */
+    private String status;
+
+    /**
+     * 摘要
+     */
+    private String remark;
+
+}

+ 0 - 4
hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountRequestFunds.java

@@ -25,10 +25,6 @@ public class AccountRequestFunds extends BasePo {
      */
     private Long departmentId;
 
-    /**
-     * 流程ID
-     */
-    private Long processInstanceId;
 
     /**
      * 归属公司ID

+ 17 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/vo/AccountPaymentVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.account.entity.account.vo;
+
+import com.fjhx.account.entity.account.po.AccountPayment;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 打款表列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class AccountPaymentVo extends AccountPayment {
+
+}

+ 13 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/vo/AccountRequestFundsVo.java

@@ -6,6 +6,7 @@ import com.fjhx.file.entity.ObsFile;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -32,6 +33,16 @@ public class AccountRequestFundsVo extends AccountRequestFunds {
      */
     private String userName;
 
+    /**
+     * 打款状态(字典payment_status)
+     */
+    private String accountPaymentStatus;
+
+    /**
+     * 打款金额
+     */
+    private BigDecimal accountPaymentAmount;
+
     //请款详情表的信息
     private List<AccountRequestFundsDetail> accountRequestFundsDetailList;
 
@@ -39,4 +50,6 @@ public class AccountRequestFundsVo extends AccountRequestFunds {
      * 附件信息
      */
     private List<ObsFile> fileList;
+
+
 }

+ 0 - 1
hx-account/src/main/java/com/fjhx/account/flow/AccountRequestFundsFlow.java

@@ -49,7 +49,6 @@ public class AccountRequestFundsFlow extends FlowDelegate {
         AccountRequestFundsDetailService accountRequestFundsDetailService = SpringUtil.getBean(AccountRequestFundsDetailService.class);
         AccountRequestFundsDto accountRequestFundsDto = submitData.toJavaObject( AccountRequestFundsDto.class);
         accountRequestFundsDto.setStatus(AccountRequestFundsStatusEnum.UNDER_REVIEW.getKey());
-        accountRequestFundsDto.setProcessInstanceId(flowId);
         //添加请款表的信息
         accountRequestFundsService.save(accountRequestFundsDto);
         //获取请款详情表的详细信息

+ 34 - 0
hx-account/src/main/java/com/fjhx/account/mapper/account/AccountPaymentMapper.java

@@ -0,0 +1,34 @@
+package com.fjhx.account.mapper.account;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fjhx.account.entity.account.po.AccountPayment;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.account.vo.AccountPaymentVo;
+import com.fjhx.account.entity.account.vo.AccountRequestFundsVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 打款表 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-04-11
+ */
+public interface AccountPaymentMapper extends BaseMapper<AccountPayment> {
+
+    /**
+     * 打款表分页
+     */
+    Page<AccountRequestFundsVo> getPage(@Param("page") Page<Object> page, @Param("ew") QueryWrapper<Object> wrapper);
+
+    /**
+     * 查询打款详情
+     * @param id
+     * @return
+     */
+    AccountPayment detail(Long id);
+}

+ 48 - 0
hx-account/src/main/java/com/fjhx/account/service/account/AccountPaymentService.java

@@ -0,0 +1,48 @@
+package com.fjhx.account.service.account;
+
+import com.fjhx.account.entity.account.dto.AccountRequestFundsSelectDto;
+import com.fjhx.account.entity.account.po.AccountPayment;
+import com.fjhx.account.entity.account.vo.AccountRequestFundsVo;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.account.vo.AccountPaymentVo;
+import com.fjhx.account.entity.account.dto.AccountPaymentSelectDto;
+import com.fjhx.account.entity.account.dto.AccountPaymentDto;
+
+
+/**
+ * <p>
+ * 打款表 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-11
+ */
+public interface AccountPaymentService extends BaseService<AccountPayment> {
+
+    /**
+     * 打款表分页
+     */
+    Page<AccountRequestFundsVo> getPage(AccountRequestFundsSelectDto dto);
+
+    /**
+     * 打款表明细
+     */
+    AccountPaymentVo detail(Long id);
+
+    /**
+     * 打款功能
+     */
+    void add(AccountPaymentDto accountPaymentDto);
+
+    /**
+     * 打款表编辑
+     */
+    void edit(AccountPaymentDto accountPaymentDto);
+
+    /**
+     * 打款表删除
+     */
+    void delete(Long id);
+
+}

+ 12 - 4
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountManagementServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fjhx.account.service.account.impl;
 
+import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -9,6 +10,7 @@ import com.fjhx.account.mapper.account.AccountManagementMapper;
 import com.fjhx.account.service.account.AccountManagementService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.account.service.account.AccountRemainderService;
+import com.obs.services.internal.ServiceException;
 import com.ruoyi.common.utils.StringUtils;
 import org.apache.poi.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -43,10 +45,10 @@ public class AccountManagementServiceImpl extends ServiceImpl<AccountManagementM
     public Page<AccountManagementVo> getPage(AccountManagementSelectDto dto) {
         LambdaQueryWrapper<AccountManagement> wrapper = Wrappers.<AccountManagement>lambdaQuery();
         //根据关键字查询(查询的字段有账户别名、账户名称、账号)
-        if (StringUtils.isNotEmpty(dto.getName())){
-            wrapper.like(AccountManagement::getName,dto.getName());
-            wrapper.like(AccountManagement::getAlias,dto.getName());
-            wrapper.like(AccountManagement::getAccountOpening,dto.getName());
+        if (StringUtils.isNotEmpty(dto.getKeyword())){
+            wrapper.like(AccountManagement::getName,dto.getKeyword());
+            wrapper.like(AccountManagement::getAlias,dto.getKeyword());
+            wrapper.like(AccountManagement::getAccountOpening,dto.getOpeningBank());
         }
         //根据开户银行查询
         wrapper.eq(ObjectUtil.isNotEmpty(dto.getOpeningBank()),AccountManagement::getOpeningBank,dto.getOpeningBank());
@@ -74,6 +76,12 @@ public class AccountManagementServiceImpl extends ServiceImpl<AccountManagementM
      */
     @Override
     public void add(AccountManagementDto accountManagementDto) {
+        //判断账户的别名是否已存在
+        List<AccountManagement> accountManagements = this.list(Wrappers.<AccountManagement>lambdaQuery()
+                .eq(AccountManagement::getAlias, accountManagementDto.getAlias()));
+        if (accountManagements.size()>0){
+            throw new ServiceException("数据错误:账户别名已存在请重新创建");
+        }
         //添加账户管理表的信息
         this.save(accountManagementDto);
         saveAccountRemainder(accountManagementDto);

+ 156 - 0
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentServiceImpl.java

@@ -0,0 +1,156 @@
+package com.fjhx.account.service.account.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.account.entity.account.dto.AccountRequestFundsSelectDto;
+import com.fjhx.account.entity.account.po.AccountPayment;
+import com.fjhx.account.entity.account.po.AccountRemainder;
+import com.fjhx.account.entity.account.vo.AccountRequestFundsVo;
+import com.fjhx.account.mapper.account.AccountPaymentMapper;
+import com.fjhx.account.service.account.AccountManagementService;
+import com.fjhx.account.service.account.AccountPaymentService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.account.service.account.AccountRemainderService;
+import com.fjhx.account.service.account.AccountRequestFundsDetailService;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.common.entity.corporation.po.Corporation;
+import com.fjhx.common.service.corporation.CorporationService;
+import com.fjhx.file.utils.ObsFileUtil;
+import com.obs.services.internal.ServiceException;
+import com.ruoyi.common.core.domain.BasePo;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.system.service.ISysDeptService;
+import com.ruoyi.system.utils.UserUtil;
+import org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.account.vo.AccountPaymentVo;
+import com.fjhx.account.entity.account.dto.AccountPaymentSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.account.entity.account.dto.AccountPaymentDto;
+import cn.hutool.core.bean.BeanUtil;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 打款表 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-11
+ */
+@Service
+public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper, AccountPayment> implements AccountPaymentService {
+    @Autowired
+    private CorporationService corporationService;
+
+    @Autowired
+    private ISysDeptService sysDeptService;
+
+    @Autowired
+    private AccountRemainderService accountRemainderService;
+
+    @Override
+    public Page<AccountRequestFundsVo> getPage(AccountRequestFundsSelectDto dto) {
+        QueryWrapper<Object> wrapper = Wrappers.query();
+        wrapper.eq(ObjectUtil.isNotEmpty(dto.getType()),"arf.type",dto.getType());
+        wrapper.eq(ObjectUtil.isNotEmpty(dto.getStatus()),"arf.status",dto.getStatus());
+        wrapper.eq(ObjectUtil.isNotEmpty(dto.getPaymentStatus()),"ap.status",dto.getPaymentStatus());
+        wrapper.like(ObjectUtil.isNotEmpty(dto.getKeyword()),"arf.payment_remarks",dto.getKeyword());
+        wrapper.orderByDesc("ap.status","arf.payment_time","arf.create_time");
+        Page<AccountRequestFundsVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+
+        //切换数据源
+        DynamicDataSourceContextHolder.push(SourceConstant.COMMON);
+        //查询公司名称信息
+        List<Corporation> corporationList = corporationService.list();
+        Map<Long, List<Corporation>> corporationMap = corporationList.stream().collect(Collectors.groupingBy(Corporation::getId));
+        DynamicDataSourceContextHolder.poll();
+
+
+        //切换数据源
+        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+        //查询部门信息
+        List<SysDept> sysDeptList = sysDeptService.list();
+        Map<Long, List<SysDept>> sysDeptMap = sysDeptList.stream().collect(Collectors.groupingBy(SysDept::getDeptId));
+
+
+        //赋值部门名称、归属公司名称
+        List<AccountRequestFundsVo> records = page.getRecords();
+        for (AccountRequestFundsVo record : records) {
+            List<SysDept> sysDepts = sysDeptMap.get(record.getDepartmentId());
+            if (ObjectUtil.isNotEmpty(sysDepts)){
+                record.setDeptName(sysDepts.get(0).getDeptName());
+            }
+            List<Corporation> corporations = corporationMap.get(record.getCorporationId());
+            if (ObjectUtil.isNotEmpty(corporations)){
+                record.setCorporationName(corporations.get(0).getName());
+            }
+
+        }
+
+        // 赋值用户名称
+        UserUtil.assignmentNickName(records, BasePo::getCreateUser,AccountRequestFundsVo::setUserName);
+
+        return page;
+    }
+
+    /**
+     * 打款表明细
+     */
+    @Override
+    public AccountPaymentVo detail(Long id) {
+        AccountPayment AccountPayment = baseMapper.detail(id);
+        AccountPaymentVo result = BeanUtil.toBean(AccountPayment, AccountPaymentVo.class);
+        return result;
+    }
+
+    /**
+     * 打款功能
+     * @param accountPaymentDto
+     */
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public void add(AccountPaymentDto accountPaymentDto) {
+        AccountRemainder accountRemainder = accountRemainderService.getOne(Wrappers.<AccountRemainder>lambdaQuery()
+                .eq(AccountRemainder::getAccountManagementId, accountPaymentDto.getAccountManagementId())
+                .eq(AccountRemainder::getCurrency, accountPaymentDto.getCurrency()));
+        //如果不存在这条数据则返回账户余额不足
+        if (ObjectUtil.isEmpty(accountRemainder)){
+            throw new ServiceException("账户余额不足");
+        }
+        //如果余额小于付款金额则返回账户余额不足
+        if (accountRemainder.getRemainder().compareTo(accountPaymentDto.getAmount()) == -1){
+            throw new ServiceException("账户余额不足");
+        }
+        this.save(accountPaymentDto);
+
+        //添加附件信息
+        ObsFileUtil.saveFile(accountPaymentDto.getFileList(),accountPaymentDto.getId());
+
+        //修改账户-余额表的中余额
+        accountRemainder.setRemainder( accountRemainder.getRemainder().subtract(accountPaymentDto.getAmount()));
+        accountRemainderService.updateById(accountRemainder);
+    }
+
+    @Override
+    public void edit(AccountPaymentDto accountPaymentDto) {
+        this.updateById(accountPaymentDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+
+}

+ 26 - 6
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRequestFundsServiceImpl.java

@@ -1,6 +1,7 @@
 package com.fjhx.account.service.account.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fjhx.account.entity.account.po.AccountRequestFunds;
@@ -9,6 +10,7 @@ import com.fjhx.account.mapper.account.AccountRequestFundsMapper;
 import com.fjhx.account.service.account.AccountRequestFundsDetailService;
 import com.fjhx.account.service.account.AccountRequestFundsService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.entity.corporation.po.Corporation;
 import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.file.utils.ObsFileUtil;
@@ -23,6 +25,7 @@ import org.abego.treelayout.internal.util.java.util.ListUtil;
 import org.apache.catalina.valves.Constants;
 import org.apache.commons.collections4.ListUtils;
 import org.checkerframework.checker.units.qual.A;
+import org.omg.DynamicAny.DynAnyFactoryHelper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -32,7 +35,9 @@ import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.fjhx.account.entity.account.dto.AccountRequestFundsDto;
 import cn.hutool.core.bean.BeanUtil;
 
+import javax.sql.DataSource;
 import javax.swing.plaf.ListUI;
+import javax.xml.crypto.Data;
 import java.rmi.ServerException;
 import java.util.List;
 import java.util.Map;
@@ -71,11 +76,21 @@ public class AccountRequestFundsServiceImpl extends ServiceImpl<AccountRequestFu
         QueryWrapper<Object> wrapper = Wrappers.query();
         wrapper.eq(ObjectUtil.isNotEmpty(dto.getType()),"arf.type",dto.getType());
         wrapper.eq(ObjectUtil.isNotEmpty(dto.getStatus()),"arf.status",dto.getStatus());
+        wrapper.eq(ObjectUtil.isNotEmpty(dto.getPaymentStatus()),"ap.status",dto.getPaymentStatus());
+        wrapper.like(ObjectUtil.isNotEmpty(dto.getKeyword()),"arf.payment_remarks",dto.getKeyword());
+        wrapper.orderByDesc("ap.status","arf.payment_time","arf.create_time");
         Page<AccountRequestFundsVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+
+        //切换数据源
+        DynamicDataSourceContextHolder.push(SourceConstant.COMMON);
         //查询公司名称信息
         List<Corporation> corporationList = corporationService.list();
         Map<Long, List<Corporation>> corporationMap = corporationList.stream().collect(Collectors.groupingBy(Corporation::getId));
+        DynamicDataSourceContextHolder.poll();
+
 
+        //切换数据源
+        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
         //查询部门信息
         List<SysDept> sysDeptList = sysDeptService.list();
         Map<Long, List<SysDept>> sysDeptMap = sysDeptList.stream().collect(Collectors.groupingBy(SysDept::getDeptId));
@@ -110,6 +125,15 @@ public class AccountRequestFundsServiceImpl extends ServiceImpl<AccountRequestFu
     public AccountRequestFundsVo detail(Long id){
         AccountRequestFunds accountRequestFunds = this.getById(id);
         AccountRequestFundsVo accountRequestFundsVo = BeanUtil.toBean(accountRequestFunds, AccountRequestFundsVo.class);
+
+        //获取到请款明细信息
+        List<AccountRequestFundsDetail> accountRequestFundsDetailList = accountRequestFundsDetailService
+                .list(Wrappers.<AccountRequestFundsDetail>lambdaQuery()
+                        .eq(AccountRequestFundsDetail::getAccountRequestFundsId, accountRequestFunds.getId()));
+        accountRequestFundsVo.setAccountRequestFundsDetailList(accountRequestFundsDetailList);
+
+        //切换数据源
+        DynamicDataSourceContextHolder.push(SourceConstant.COMMON);
         //查询归属公司的名称
         Corporation corporation = corporationService.getById(accountRequestFundsVo.getCorporationId());
         if (ObjectUtil.isNotEmpty(corporation)){
@@ -117,18 +141,14 @@ public class AccountRequestFundsServiceImpl extends ServiceImpl<AccountRequestFu
         }
         accountRequestFundsVo.setCorporationName(corporation.getName());
 
+        //切换数据源
+        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
         //查询部门名称信息
         SysDept sysDept = sysDeptService.getById(accountRequestFundsVo.getDepartmentId());
         if (ObjectUtil.isNotEmpty(sysDept)){
             throw new ServiceException("没有找到归属部门信息");
         }
         accountRequestFundsVo.setDeptName(sysDept.getDeptName());
-
-        //获取到请款明细信息
-        List<AccountRequestFundsDetail> accountRequestFundsDetailList = accountRequestFundsDetailService
-                .list(Wrappers.<AccountRequestFundsDetail>lambdaQuery()
-                .eq(AccountRequestFundsDetail::getAccountRequestFundsId, accountRequestFunds.getId()));
-        accountRequestFundsVo.setAccountRequestFundsDetailList(accountRequestFundsDetailList);
         return accountRequestFundsVo;
     }
 

+ 5 - 1
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRunningWaterServiceImpl.java

@@ -7,6 +7,7 @@ import com.fjhx.account.entity.account.po.AccountRunningWater;
 import com.fjhx.account.mapper.account.AccountRunningWaterMapper;
 import com.fjhx.account.service.account.AccountRunningWaterService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.StringUtils;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.account.entity.account.vo.AccountRunningWaterVo;
@@ -30,9 +31,12 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
     @Override
     public Page<AccountRunningWaterVo> getPage(AccountRunningWaterSelectDto dto) {
         QueryWrapper<Object> wrapper = Wrappers.query();
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getAccountManagementId()),"arw.accountManagementId",dto.getAccountManagementId());
+        wrapper.eq(ObjectUtil.isNotEmpty(dto.getAccountManagementId()),"arw.account_management_id",dto.getAccountManagementId());
         wrapper.eq(ObjectUtil.isNotEmpty(dto.getStatus()),"arw.status",dto.getStatus());
         wrapper.eq(ObjectUtil.isNotEmpty(dto.getCurrency()),"arw.currency",dto.getCurrency());
+        if (StringUtils.isNotEmpty(dto.getKeyword())){
+            wrapper.and(wrapper1 -> wrapper1.like("arw.remarks",dto.getKeyword()).or().like("am.name",dto.getKeyword()));
+        }
         Page<AccountRunningWaterVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         return page;
     }

+ 49 - 0
hx-account/src/main/resources/mapper/account/AccountPaymentMapper.xml

@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.account.mapper.account.AccountPaymentMapper">
+    <select id="getPage" resultType="com.fjhx.account.entity.account.vo.AccountRequestFundsVo">
+        select
+            arf.id,
+            arf.department_id,
+            arf.corporation_id,
+            arf.account_management_id,
+            arf.payment_time,
+            arf.payment_remarks,
+            arf.currency,
+            arf.status,
+            arf.type,
+            arf.total,
+            arf.quantity,
+            arf.payment_method,
+            arf.name,
+            arf.opening_bank,
+            arf.account_opening,
+            arf.interbank_number,
+            arf.remarks,
+            arf.create_user,
+            arf.create_time,
+            arf.update_user,
+            arf.update_time,
+            ap.`status` accountPaymentStatus,
+            ap.amount accountPaymentAmount
+        from account_request_funds arf
+                 left join account_payment ap on arf.id = ap.account_request_funds_id
+            ${ew.customSqlSegment}
+    </select>
+    <select id="detail" resultType="com.fjhx.account.entity.account.po.AccountPayment">
+        select
+            ap.id,
+            ap.account_management_id,
+            ap.expenses_time,
+            ap.currency,
+            ap.amount,
+            ap.status,
+            ap.remark,
+            ap.create_user,
+            ap.create_time,
+            ap.update_user,
+            ap.update_time
+        from account_payment ap
+    </select>
+
+</mapper>

+ 3 - 2
hx-account/src/main/resources/mapper/account/AccountRequestFundsMapper.xml

@@ -9,7 +9,6 @@
             arf.account_management_id,
             arf.payment_time,
             arf.payment_remarks,
-            arf.processInstance_id,
             arf.currency,
             arf.status,
             arf.type,
@@ -24,8 +23,10 @@
             arf.create_user,
             arf.create_time,
             arf.update_user,
-            arf.update_time
+            arf.update_time,
+            ap.`status` accountPaymentStatus
         from account_request_funds arf
+                 left join account_payment ap on arf.id = ap.account_request_funds_id
             ${ew.customSqlSegment}
     </select>
 

+ 1 - 1
hx-account/src/main/resources/mapper/account/AccountRunningWaterMapper.xml

@@ -17,7 +17,7 @@
             arw.create_time,
             arw.update_user,
             arw.update_time,
-            am.name accountManagementName
+            am.alias accountManagementName
         from account_running_water arw
                  left join  account_management am on arw.account_management_id = am.id
             ${ew.customSqlSegment}

+ 5 - 0
hx-admin/pom.xml

@@ -69,6 +69,11 @@
             <artifactId>hx-mail</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-victoriatourist</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 4 - 0
hx-admin/src/main/resources/application-dev.yml

@@ -6,6 +6,10 @@ spring:
             strict: true
             primary: base
             datasource:
+                victoriatourist:
+                    url: jdbc:mysql://36.134.91.96:17330/bytesailing_victoriatourist?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
+                    username: fjhx2012mysql
+                    password: 3PN-Mzn#vnP&q6d
                 common:
                     url: jdbc:mysql://36.134.91.96:17330/bytesailing_common?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
                     username: fjhx2012mysql

+ 4 - 0
hx-admin/src/main/resources/application-prod.yml

@@ -6,6 +6,10 @@ spring:
             strict: true
             primary: base
             datasource:
+                victoriatourist:
+                    url: jdbc:mysql://127.0.0.1:28643/bytesailing_victoriatourist?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
+                    username: fjhx2012mysql
+                    password: 3PN-Mzn#vnP&q6d
                 common:
                     url: jdbc:mysql://127.0.0.1:28643/bytesailing_common?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
                     username: fjhx2012mysql

+ 4 - 0
hx-admin/src/main/resources/application-test.yml

@@ -6,6 +6,10 @@ spring:
             strict: true
             primary: base
             datasource:
+                victoriatourist:
+                    url: jdbc:mysql://127.0.0.1:17330/bytesailing_victoriatourist?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
+                    username: fjhx2012mysql
+                    password: 3PN-Mzn#vnP&q6d
                 common:
                     url: jdbc:mysql://127.0.0.1:17330/bytesailing_common?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
                     username: fjhx2012mysql

+ 1 - 0
hx-common/src/main/java/com/fjhx/common/constant/SourceConstant.java

@@ -25,5 +25,6 @@ public interface SourceConstant {
     String MAIL = "mail";
 
     String COMMON = "common";
+    String VICTORIATOURIST = "victoriatourist";
 
 }

+ 68 - 0
hx-item/src/main/java/com/fjhx/item/controller/product/ProductSpuController.java

@@ -0,0 +1,68 @@
+package com.fjhx.item.controller.product;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.item.entity.product.vo.ProductSpuVo;
+import com.fjhx.item.entity.product.dto.ProductSpuSelectDto;
+import com.fjhx.item.entity.product.dto.ProductSpuDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.item.service.product.ProductSpuService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 产品spu 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@RestController
+@RequestMapping("/productSpu")
+public class ProductSpuController {
+
+    @Autowired
+    private ProductSpuService productSpuService;
+
+    /**
+     * 产品spu分页
+     */
+    @PostMapping("/page")
+    public Page<ProductSpuVo> page(@RequestBody ProductSpuSelectDto dto) {
+        return productSpuService.getPage(dto);
+    }
+
+    /**
+     * 产品spu明细
+     */
+    @PostMapping("/detail")
+    public ProductSpuVo detail(@RequestBody BaseSelectDto dto) {
+        return productSpuService.detail(dto.getId());
+    }
+
+    /**
+     * 产品spu新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody ProductSpuDto productSpuDto) {
+        productSpuService.add(productSpuDto);
+    }
+
+    /**
+     * 产品spu编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody ProductSpuDto productSpuDto) {
+        productSpuService.edit(productSpuDto);
+    }
+
+    /**
+     * 产品spu删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        productSpuService.delete(dto.getId());
+    }
+
+}

+ 23 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductSpuDto.java

@@ -0,0 +1,23 @@
+package com.fjhx.item.entity.product.dto;
+
+import com.fjhx.item.entity.product.po.ProductInfo;
+import com.fjhx.item.entity.product.po.ProductSpu;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 产品spu新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class ProductSpuDto extends ProductSpu {
+
+    /**产品列表*/
+    List<ProductInfo> productInfos;
+
+}

+ 17 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductSpuSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.item.entity.product.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 产品spu列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class ProductSpuSelectDto extends BaseSelectDto {
+
+}

+ 4 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/po/ProductInfo.java

@@ -68,6 +68,10 @@ public class ProductInfo extends BasePo {
      */
     private String remark;
 
+    /**维多利亚json*/
     private String victoriatouristJson;
 
+    /**产品spuid*/
+    private Long productSpuId;
+
 }

+ 37 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/po/ProductSpu.java

@@ -0,0 +1,37 @@
+package com.fjhx.item.entity.product.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 产品spu
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+@TableName("product_spu")
+public class ProductSpu extends BasePo {
+
+    /**
+     * spu编码
+     */
+    private String code;
+
+    /**
+     * spu名称
+     */
+    private String name;
+
+    /**
+     * 说明
+     */
+    private String remark;
+
+}

+ 28 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/vo/ProductSpuVo.java

@@ -0,0 +1,28 @@
+package com.fjhx.item.entity.product.vo;
+
+import com.fjhx.item.entity.product.po.ProductInfo;
+import com.fjhx.item.entity.product.po.ProductSpu;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 产品spu列表查询返回值实体
+ *
+ * @author
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class ProductSpuVo extends ProductSpu {
+
+    /**
+     * 产品列表
+     */
+    private List<ProductInfo> productInfoList;
+
+    /**关联产品数*/
+    private Integer count;
+
+}

+ 26 - 0
hx-item/src/main/java/com/fjhx/item/mapper/product/ProductSpuMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.item.mapper.product;
+
+import com.fjhx.item.entity.product.po.ProductSpu;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.item.entity.product.vo.ProductSpuVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 产品spu Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+public interface ProductSpuMapper extends BaseMapper<ProductSpu> {
+
+    /**
+     * 产品spu分页
+     */
+    Page<ProductSpuVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ProductSpu> wrapper);
+
+}

+ 46 - 0
hx-item/src/main/java/com/fjhx/item/service/product/ProductSpuService.java

@@ -0,0 +1,46 @@
+package com.fjhx.item.service.product;
+
+import com.fjhx.item.entity.product.po.ProductSpu;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.item.entity.product.vo.ProductSpuVo;
+import com.fjhx.item.entity.product.dto.ProductSpuSelectDto;
+import com.fjhx.item.entity.product.dto.ProductSpuDto;
+
+
+/**
+ * <p>
+ * 产品spu 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+public interface ProductSpuService extends BaseService<ProductSpu> {
+
+    /**
+     * 产品spu分页
+     */
+    Page<ProductSpuVo> getPage(ProductSpuSelectDto dto);
+
+    /**
+     * 产品spu明细
+     */
+    ProductSpuVo detail(Long id);
+
+    /**
+     * 产品spu新增
+     */
+    void add(ProductSpuDto productSpuDto);
+
+    /**
+     * 产品spu编辑
+     */
+    void edit(ProductSpuDto productSpuDto);
+
+    /**
+     * 产品spu删除
+     */
+    void delete(Long id);
+
+}

+ 91 - 0
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductSpuServiceImpl.java

@@ -0,0 +1,91 @@
+package com.fjhx.item.service.product.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.PageUtil;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.item.entity.product.po.ProductInfo;
+import com.fjhx.item.entity.product.po.ProductSpu;
+import com.fjhx.item.entity.product.vo.ProductInfoVo;
+import com.fjhx.item.mapper.product.ProductSpuMapper;
+import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.item.service.product.ProductSpuService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.item.entity.product.vo.ProductSpuVo;
+import com.fjhx.item.entity.product.dto.ProductSpuSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.item.entity.product.dto.ProductSpuDto;
+import cn.hutool.core.bean.BeanUtil;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 产品spu 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@DS(SourceConstant.ITEM)
+@Service
+public class ProductSpuServiceImpl extends ServiceImpl<ProductSpuMapper, ProductSpu> implements ProductSpuService {
+
+    @Autowired
+    ProductInfoService productInfoService;
+
+    @Override
+    public Page<ProductSpuVo> getPage(ProductSpuSelectDto dto) {
+        IWrapper<ProductSpu> wrapper = getWrapper();
+        wrapper.orderByDesc("ps", ProductSpu::getId);
+        Page<ProductSpuVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public ProductSpuVo detail(Long id) {
+        ProductSpu ProductSpu = this.getById(id);
+        ProductSpuVo result = BeanUtil.toBean(ProductSpu, ProductSpuVo.class);
+        List<ProductInfo> list = productInfoService.list(q -> q.eq(ProductInfo::getProductSpuId, id));
+        result.setProductInfoList(list);
+        return result;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(ProductSpuDto productSpuDto) {
+        this.save(productSpuDto);
+        List<ProductInfo> productInfos = productSpuDto.getProductInfos();
+        for (ProductInfo productInfo: productInfos){
+            productInfo.setProductSpuId(productSpuDto.getId());
+        }
+        productInfoService.updateBatchById(productInfos);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(ProductSpuDto productSpuDto) {
+        this.updateById(productSpuDto);
+        List<ProductInfo> productInfos = productSpuDto.getProductInfos();
+        if(ObjectUtil.isNotEmpty(productInfos)){
+            List<Long> productIds = productInfos.stream().map(ProductInfo::getId).collect(Collectors.toList());
+            List<ProductInfo> productInfos1 = productInfoService.list(q->q.notIn(ProductInfo::getId,productIds));
+            for (ProductInfo productInfo :productInfos1){
+                productInfo.setProductSpuId(null);
+            }
+            productInfoService.updateBatchById(productInfos1);
+        }
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 22 - 0
hx-item/src/main/resources/mapper/product/ProductSpuMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.item.mapper.product.ProductSpuMapper">
+    <select id="getPage" resultType="com.fjhx.item.entity.product.vo.ProductSpuVo">
+        SELECT
+            ps.id,
+            ps.CODE,
+            ps.NAME,
+            ps.remark,
+            ps.create_user,
+            ps.create_time,
+            ps.update_user,
+            ps.update_time,
+            count( pi.id ) AS count
+        FROM
+            product_spu ps
+            left JOIN product_info pi ON pi.product_spu_id = ps.id
+        GROUP BY ps.id
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 16 - 5
hx-oa/src/main/java/com/fjhx/oa/controller/netdisk/NetdiskController.java

@@ -1,13 +1,16 @@
 package com.fjhx.oa.controller.netdisk;
 
-import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.oa.entity.netdisk.vo.NetdiskVo;
-import com.fjhx.oa.entity.netdisk.dto.NetdiskSelectDto;
 import com.fjhx.oa.entity.netdisk.dto.NetdiskDto;
-import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.oa.entity.netdisk.dto.NetdiskSelectDto;
+import com.fjhx.oa.entity.netdisk.vo.NetdiskVo;
 import com.fjhx.oa.service.netdisk.NetdiskService;
+import com.ruoyi.common.core.domain.BaseSelectDto;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
 
@@ -17,7 +20,7 @@ import java.util.List;
  * 网盘 前端控制器
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-07
  */
 @RestController
@@ -36,6 +39,14 @@ public class NetdiskController {
     }
 
     /**
+     * 网盘子目录树
+     */
+    @PostMapping("/tree")
+    public List<NetdiskVo> tree(@RequestBody NetdiskSelectDto dto) {
+        return netdiskService.tree(dto);
+    }
+
+    /**
      * 网盘明细
      */
     @PostMapping("/detail")

+ 5 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/netdisk/vo/NetdiskVo.java

@@ -4,6 +4,8 @@ import com.fjhx.oa.entity.netdisk.po.Netdisk;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * 网盘列表查询返回值实体
  *
@@ -19,4 +21,7 @@ public class NetdiskVo extends Netdisk {
      */
     private String createUserName;
 
+    /**子目录列表*/
+    List<NetdiskVo> netdiskList;
+
 }

+ 5 - 3
hx-oa/src/main/java/com/fjhx/oa/service/netdisk/NetdiskService.java

@@ -25,9 +25,11 @@ public interface NetdiskService extends BaseService<Netdisk> {
      */
     Page<NetdiskVo> getPage(NetdiskSelectDto dto);
 
-    /**
-     * 网盘明细
-     */
+    List<NetdiskVo> tree(NetdiskSelectDto dto);
+
+        /**
+         * 网盘明细
+         */
     NetdiskVo detail(Long id);
 
     /**

+ 33 - 8
hx-oa/src/main/java/com/fjhx/oa/service/netdisk/impl/NetdiskServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -59,6 +60,27 @@ public class NetdiskServiceImpl extends ServiceImpl<NetdiskMapper, Netdisk> impl
         return page;
     }
 
+    //网盘目录子目录树
+    @Override
+    public List<NetdiskVo> tree(NetdiskSelectDto dto) {
+        QueryWrapper<Netdisk> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("type", 1);
+        if(ObjectUtil.isNotEmpty(dto.getKeyword())) {
+            queryWrapper.like("name", dto.getKeyword());
+        }
+        List<Netdisk> list = list(queryWrapper);
+        return treeRecursion(list,-1l);
+    }
+
+    private List<NetdiskVo> treeRecursion(List<Netdisk> list, Long id){
+        List<Netdisk> netdiskList = list.stream().filter(f -> f.getParentFolderId().equals(id)).collect(Collectors.toList());
+        List<NetdiskVo> netdiskVos = BeanUtil.copyToList(netdiskList, NetdiskVo.class);
+        for (NetdiskVo netdisk :netdiskVos){
+            netdisk.setNetdiskList(treeRecursion(list,netdisk.getId()));
+        }
+        return netdiskVos;
+    }
+
     @Override
     public NetdiskVo detail(Long id) {
         Netdisk Netdisk = this.getById(id);
@@ -117,15 +139,18 @@ public class NetdiskServiceImpl extends ServiceImpl<NetdiskMapper, Netdisk> impl
     @Override
     public void edit(NetdiskDto netdiskDto) {
         this.updateById(netdiskDto);
-        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
-        FileInfo fileInfo = fileInfoService.getOne(q -> q.eq(FileInfo::getBusinessId, netdiskDto.getId()));
-        if (ObjectUtil.isNotEmpty(fileInfo)) {
-            fileInfo.setFileName(netdiskDto.getName());
-            fileInfoService.updateById(fileInfo);
-        } else {
-            throw new ServiceException("文件信息不存在");
+        Netdisk byId = getById(netdiskDto.getId());
+        if(byId.getType()==2) {
+            DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+            FileInfo fileInfo = fileInfoService.getOne(q -> q.eq(FileInfo::getBusinessId, netdiskDto.getId()));
+            if (ObjectUtil.isNotEmpty(fileInfo)) {
+                fileInfo.setFileName(netdiskDto.getName());
+                fileInfoService.updateById(fileInfo);
+            } else {
+                throw new ServiceException("文件信息不存在");
+            }
+            DynamicDataSourceContextHolder.poll();
         }
-        DynamicDataSourceContextHolder.poll();
     }
 
     @GlobalTransactional

+ 71 - 0
hx-purchase/src/main/java/com/fjhx/purchase/controller/quality/QualityController.java

@@ -0,0 +1,71 @@
+package com.fjhx.purchase.controller.quality;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.quality.vo.QualityVo;
+import com.fjhx.purchase.entity.quality.dto.QualitySelectDto;
+import com.fjhx.purchase.entity.quality.dto.QualityDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.purchase.service.quality.QualityService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 质检 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@DS(SourceConstant.PURCHASE)
+@RestController
+@RequestMapping("/quality")
+public class QualityController {
+
+    @Autowired
+    private QualityService qualityService;
+
+    /**
+     * 质检分页
+     */
+    @PostMapping("/page")
+    public Page<QualityVo> page(@RequestBody QualitySelectDto dto) {
+        return qualityService.getPage(dto);
+    }
+
+    /**
+     * 质检明细
+     */
+    @PostMapping("/detail")
+    public QualityVo detail(@RequestBody BaseSelectDto dto) {
+        return qualityService.detail(dto.getId());
+    }
+
+    /**
+     * 质检新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody QualityDto qualityDto) {
+        qualityService.add(qualityDto);
+    }
+
+    /**
+     * 质检编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody QualityDto qualityDto) {
+        qualityService.edit(qualityDto);
+    }
+
+    /**
+     * 质检删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        qualityService.delete(dto.getId());
+    }
+
+}

+ 71 - 0
hx-purchase/src/main/java/com/fjhx/purchase/controller/quality/QualityDetailController.java

@@ -0,0 +1,71 @@
+package com.fjhx.purchase.controller.quality;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.quality.vo.QualityDetailVo;
+import com.fjhx.purchase.entity.quality.dto.QualityDetailSelectDto;
+import com.fjhx.purchase.entity.quality.dto.QualityDetailDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.purchase.service.quality.QualityDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 质检明细单 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@DS(SourceConstant.PURCHASE)
+@RestController
+@RequestMapping("/qualityDetail")
+public class QualityDetailController {
+
+    @Autowired
+    private QualityDetailService qualityDetailService;
+
+    /**
+     * 质检明细单分页
+     */
+    @PostMapping("/page")
+    public Page<QualityDetailVo> page(@RequestBody QualityDetailSelectDto dto) {
+        return qualityDetailService.getPage(dto);
+    }
+
+    /**
+     * 质检明细单明细
+     */
+    @PostMapping("/detail")
+    public QualityDetailVo detail(@RequestBody BaseSelectDto dto) {
+        return qualityDetailService.detail(dto.getId());
+    }
+
+    /**
+     * 质检明细单新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody QualityDetailDto qualityDetailDto) {
+        qualityDetailService.add(qualityDetailDto);
+    }
+
+    /**
+     * 质检明细单编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody QualityDetailDto qualityDetailDto) {
+        qualityDetailService.edit(qualityDetailDto);
+    }
+
+    /**
+     * 质检明细单删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        qualityDetailService.delete(dto.getId());
+    }
+
+}

+ 71 - 0
hx-purchase/src/main/java/com/fjhx/purchase/controller/sales/SalesReturnController.java

@@ -0,0 +1,71 @@
+package com.fjhx.purchase.controller.sales;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.sales.vo.SalesReturnVo;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnSelectDto;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.purchase.service.sales.SalesReturnService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 退货 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@DS(SourceConstant.PURCHASE)
+@RestController
+@RequestMapping("/salesReturn")
+public class SalesReturnController {
+
+    @Autowired
+    private SalesReturnService salesReturnService;
+
+    /**
+     * 退货分页
+     */
+    @PostMapping("/page")
+    public Page<SalesReturnVo> page(@RequestBody SalesReturnSelectDto dto) {
+        return salesReturnService.getPage(dto);
+    }
+
+    /**
+     * 退货明细
+     */
+    @PostMapping("/detail")
+    public SalesReturnVo detail(@RequestBody BaseSelectDto dto) {
+        return salesReturnService.detail(dto.getId());
+    }
+
+    /**
+     * 退货新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody SalesReturnDto salesReturnDto) {
+        salesReturnService.add(salesReturnDto);
+    }
+
+    /**
+     * 退货编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody SalesReturnDto salesReturnDto) {
+        salesReturnService.edit(salesReturnDto);
+    }
+
+    /**
+     * 退货删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        salesReturnService.delete(dto.getId());
+    }
+
+}

+ 71 - 0
hx-purchase/src/main/java/com/fjhx/purchase/controller/sales/SalesReturnDetailController.java

@@ -0,0 +1,71 @@
+package com.fjhx.purchase.controller.sales;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.sales.vo.SalesReturnDetailVo;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnDetailSelectDto;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnDetailDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.purchase.service.sales.SalesReturnDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 到货明细单 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@DS(SourceConstant.PURCHASE)
+@RestController
+@RequestMapping("/salesReturnDetail")
+public class SalesReturnDetailController {
+
+    @Autowired
+    private SalesReturnDetailService salesReturnDetailService;
+
+    /**
+     * 到货明细单分页
+     */
+    @PostMapping("/page")
+    public Page<SalesReturnDetailVo> page(@RequestBody SalesReturnDetailSelectDto dto) {
+        return salesReturnDetailService.getPage(dto);
+    }
+
+    /**
+     * 到货明细单明细
+     */
+    @PostMapping("/detail")
+    public SalesReturnDetailVo detail(@RequestBody BaseSelectDto dto) {
+        return salesReturnDetailService.detail(dto.getId());
+    }
+
+    /**
+     * 到货明细单新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody SalesReturnDetailDto salesReturnDetailDto) {
+        salesReturnDetailService.add(salesReturnDetailDto);
+    }
+
+    /**
+     * 到货明细单编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody SalesReturnDetailDto salesReturnDetailDto) {
+        salesReturnDetailService.edit(salesReturnDetailDto);
+    }
+
+    /**
+     * 到货明细单删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        salesReturnDetailService.delete(dto.getId());
+    }
+
+}

+ 51 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/enums/ArrivalDetailStatusEnum.java

@@ -0,0 +1,51 @@
+package com.fjhx.purchase.entity.arrival.enums;
+
+import org.apache.commons.collections4.MapUtils;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 到货质检状态枚举
+ * 质检状态 0未质检 10部分质检 20全部质检
+ */
+public enum ArrivalDetailStatusEnum {
+    STATUS_0(0, "未质检"),
+    STATUS_10(10, "部分质检"),
+    STATUS_20(20,"全部质检"),
+    ;
+    private int key;
+
+    private String value;
+
+    private static Map<Integer, String> map = new LinkedHashMap<>();
+
+    ArrivalDetailStatusEnum(int key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    /**
+     * 获取枚举map
+     *
+     * @return
+     */
+    public static Map<Integer, String> getMap() {
+        if (MapUtils.isNotEmpty(map)) {
+            return map;
+        }
+        for (ArrivalDetailStatusEnum ms : values()) {
+            map.put(ms.key, ms.value);
+        }
+        return map;
+    }
+
+    public int getKey() {
+        return key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+}

+ 0 - 10
hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/po/ArrivalDetail.java

@@ -46,16 +46,6 @@ public class ArrivalDetail extends BasePo {
     private Integer status;
 
     /**
-     * 合格数量
-     */
-    private BigDecimal qualifiedCount;
-
-    /**
-     * 不合格数量
-     */
-    private BigDecimal noQualifiedCount;
-
-    /**
      * 备注
      */
     private String remark;

+ 17 - 1
hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/vo/ArrivalDetailVo.java

@@ -1,10 +1,11 @@
 package com.fjhx.purchase.entity.arrival.vo;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.fjhx.purchase.entity.arrival.po.ArrivalDetail;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
+
 /**
  * 到货明细单列表查询返回值实体
  *
@@ -59,4 +60,19 @@ public class ArrivalDetailVo extends ArrivalDetail {
      * 货品规格型号
      */
     private String productSpec;
+
+    /**
+     * 合格数量
+     */
+    private BigDecimal qualifiedCount;
+
+    /**
+     * 不合格数量
+     */
+    private BigDecimal noQualifiedCount;
+
+    /**
+     * 质检总数
+     */
+    private BigDecimal sumQualityCount;
 }

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/quality/dto/QualityDetailDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.quality.dto;
+
+import com.fjhx.purchase.entity.quality.po.QualityDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 质检明细单新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class QualityDetailDto extends QualityDetail {
+
+}

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/quality/dto/QualityDetailSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.quality.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 质检明细单列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class QualityDetailSelectDto extends BaseSelectDto {
+
+}

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/quality/dto/QualityDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.quality.dto;
+
+import com.fjhx.purchase.entity.quality.po.Quality;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 质检新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class QualityDto extends Quality {
+
+}

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/quality/dto/QualitySelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.quality.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 质检列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class QualitySelectDto extends BaseSelectDto {
+
+}

+ 51 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/quality/po/Quality.java

@@ -0,0 +1,51 @@
+package com.fjhx.purchase.entity.quality.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import java.util.Date;
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 质检
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+@TableName("quality")
+public class Quality extends BasePo {
+
+    /**
+     * 质检单编码
+     */
+    private String code;
+
+    /**
+     * 供应商ID
+     */
+    private Long supplyId;
+
+    /**
+     * 到货单ID
+     */
+    private Long arrivalId;
+
+    /**
+     * 状态 备用字段
+     */
+    private Integer status;
+
+    /**
+     * 质检明细
+     */
+    @TableField(exist = false)
+    private List<QualityDetail> qualityDetailList;
+
+}

+ 58 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/quality/po/QualityDetail.java

@@ -0,0 +1,58 @@
+package com.fjhx.purchase.entity.quality.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 质检明细单
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+@TableName("quality_detail")
+public class QualityDetail extends BasePo {
+
+    /**
+     * 关联ID  产品ID/货品ID
+     */
+    private Long bussinessId;
+
+    /**
+     * 到货明细ID
+     */
+    private Long arrivalDetailId;
+
+    /**
+     * 质检主表ID
+     */
+    private Long qualityId;
+
+    /**
+     * 状态--备用
+     */
+    private Integer status;
+
+    /**
+     * 合格数量
+     */
+    private BigDecimal qualifiedCount;
+
+    /**
+     * 不合格数量
+     */
+    private BigDecimal noQualifiedCount;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/quality/vo/QualityDetailVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.quality.vo;
+
+import com.fjhx.purchase.entity.quality.po.QualityDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 质检明细单列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class QualityDetailVo extends QualityDetail {
+
+}

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/quality/vo/QualityVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.quality.vo;
+
+import com.fjhx.purchase.entity.quality.po.Quality;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 质检列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class QualityVo extends Quality {
+
+}

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/dto/SalesReturnDetailDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.sales.dto;
+
+import com.fjhx.purchase.entity.sales.po.SalesReturnDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 到货明细单新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class SalesReturnDetailDto extends SalesReturnDetail {
+
+}

+ 21 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/dto/SalesReturnDetailSelectDto.java

@@ -0,0 +1,21 @@
+package com.fjhx.purchase.entity.sales.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 到货明细单列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class SalesReturnDetailSelectDto extends BaseSelectDto {
+
+    /**
+     * 状态
+     */
+    private String status;
+}

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/dto/SalesReturnDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.sales.dto;
+
+import com.fjhx.purchase.entity.sales.po.SalesReturn;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 退货新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class SalesReturnDto extends SalesReturn {
+
+}

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/dto/SalesReturnSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.sales.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 退货列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class SalesReturnSelectDto extends BaseSelectDto {
+
+}

+ 54 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/enums/SalesReturnDetailStatusEnum.java

@@ -0,0 +1,54 @@
+package com.fjhx.purchase.entity.sales.enums;
+
+import org.apache.commons.collections4.MapUtils;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 退货明细状态枚举
+ */
+public enum SalesReturnDetailStatusEnum {
+    STATUS_10(10, "审批中"),
+    STATUS_15(15, "驳回"),
+    STATUS_20(20,"待退货"),
+    STATUS_30(30,"部分退货"),
+    STATUS_40(40,"已退货"),
+
+    STATUS_50(50,"结束"),
+    ;
+    private int key;
+
+    private String value;
+
+    private static Map<Integer, String> map = new LinkedHashMap<>();
+
+    SalesReturnDetailStatusEnum(int key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    /**
+     * 获取枚举map
+     *
+     * @return
+     */
+    public static Map<Integer, String> getMap() {
+        if (MapUtils.isNotEmpty(map)) {
+            return map;
+        }
+        for (SalesReturnDetailStatusEnum ms : values()) {
+            map.put(ms.key, ms.value);
+        }
+        return map;
+    }
+
+    public int getKey() {
+        return key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+}

+ 51 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/enums/SalesReturnStatusEnum.java

@@ -0,0 +1,51 @@
+package com.fjhx.purchase.entity.sales.enums;
+
+import org.apache.commons.collections4.MapUtils;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 退货状态枚举
+ */
+public enum SalesReturnStatusEnum {
+    DRAFT(0, "草稿"),
+    UNDER_REVIEW(10, "审批中"),
+    REJECT(20, "驳回"),
+    PASS(30,"待退货")
+    ;
+    private int key;
+
+    private String value;
+
+    private static Map<Integer, String> map = new LinkedHashMap<>();
+
+    SalesReturnStatusEnum(int key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    /**
+     * 获取枚举map
+     *
+     * @return
+     */
+    public static Map<Integer, String> getMap() {
+        if (MapUtils.isNotEmpty(map)) {
+            return map;
+        }
+        for (SalesReturnStatusEnum ms : values()) {
+            map.put(ms.key, ms.value);
+        }
+        return map;
+    }
+
+    public int getKey() {
+        return key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+}

+ 60 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/po/SalesReturn.java

@@ -0,0 +1,60 @@
+package com.fjhx.purchase.entity.sales.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 退货
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+@TableName("sales_return")
+public class SalesReturn extends BasePo {
+
+    /**
+     * 退货单编码
+     */
+    private String code;
+
+    /**
+     * 供应商ID
+     */
+    private Long supplyId;
+
+    /**
+     * 操作人
+     */
+    private String returnName;
+
+    /**
+     * 状态 10审批中  20待退货  30部分退货  40已退货  50结束
+     */
+    private Integer status;
+
+    /**
+     * 审核通过时间
+     */
+    private Date approvedDate;
+
+    /**
+     * 流程id
+     */
+    private String processInstanceId;
+
+    /**
+     * 退货明细列表
+     */
+    @TableField(exist = false)
+    private List<SalesReturnDetail> salesReturnDetailList;
+}

+ 48 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/po/SalesReturnDetail.java

@@ -0,0 +1,48 @@
+package com.fjhx.purchase.entity.sales.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 到货明细单
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+@TableName("sales_return_detail")
+public class SalesReturnDetail extends BasePo {
+
+    /**
+     * 关联ID  产品ID/货品ID
+     */
+    private Long bussinessId;
+
+    /**
+     * 退货主表ID
+     */
+    private Long salesReturnId;
+
+    /**
+     * 到货数量
+     */
+    private BigDecimal count;
+
+    /**
+     * 状态 --备用
+     */
+    private Integer status;
+
+    /**
+     * 退货原因
+     */
+    private String remark;
+
+}

+ 61 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/vo/SalesReturnDetailVo.java

@@ -0,0 +1,61 @@
+package com.fjhx.purchase.entity.sales.vo;
+
+import com.fjhx.purchase.entity.sales.po.SalesReturnDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 到货明细单列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class SalesReturnDetailVo extends SalesReturnDetail {
+
+    /**
+     * 供应商ID
+     */
+    private Long supplyId;
+
+    /**
+     * 供应商名称
+     */
+    private String supplyName;
+
+    /**
+     * 退货单号
+     */
+    private String code;
+
+    /**
+     * 货品类型
+     */
+    private Integer productType;
+
+    /**
+     * 所属分类
+     */
+    private String productCategory;
+
+    /**
+     * 货品编码
+     */
+    private String productCode;
+
+    /**
+     * 货品名称
+     */
+    private String productName;
+
+    /**
+     * 单位
+     */
+    private String productUnit;
+
+    /**
+     * 货品规格型号
+     */
+    private String productSpec;
+}

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/vo/SalesReturnVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.sales.vo;
+
+import com.fjhx.purchase.entity.sales.po.SalesReturn;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 退货列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class SalesReturnVo extends SalesReturn {
+
+}

+ 6 - 5
hx-purchase/src/main/java/com/fjhx/purchase/flow/PurchaseFlow.java

@@ -57,11 +57,12 @@ public class PurchaseFlow extends FlowDelegate {
         purchase.setCode(CodeEnum.PURCHASE.getCode());
         purchase.setPurchaseStatus(PurchaseStatusEnum.UNDER_REVIEW.getKey());
         purchaseService.save(purchase);
-        if(CollectionUtils.isNotEmpty(purchase.getPurchaseDetailList())){
-            for(PurchaseDetail s : purchase.getPurchaseDetailList()){
+        List<PurchaseDetail> purchaseDetailList = purchase.getPurchaseDetailList();
+        if(CollectionUtils.isNotEmpty(purchaseDetailList)){
+            for(PurchaseDetail s : purchaseDetailList){
                 s.setPurchaseId(purchase.getId());
             }
-            purchaseDetailService.saveBatch(purchase.getPurchaseDetailList());
+            purchaseDetailService.saveBatch(purchaseDetailList);
         }
         return purchase.getId();
     }
@@ -81,11 +82,11 @@ public class PurchaseFlow extends FlowDelegate {
         if(ObjectUtils.isEmpty(purchase)){
             throw new ServiceException("采购单不存在");
         }
-        //修改购状态为审批通过
+        //修改购状态为审批通过
         purchase.setPurchaseStatus(PurchaseStatusEnum.PASS.getKey());
         purchase.setApprovedDate(new Date());
         purchaseService.updateById(purchase);
-        //修改购明细为待采购
+        //修改购明细为待采购
         PurchaseDetail detail = new PurchaseDetail();
         detail.setStatus(PurchaseDetailStatusEnum.PASS.getKey());
         purchaseDetailService.update(detail,Wrappers.<PurchaseDetail>query()

+ 106 - 0
hx-purchase/src/main/java/com/fjhx/purchase/flow/SalesReturnFlow.java

@@ -0,0 +1,106 @@
+package com.fjhx.purchase.flow;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.flow.core.FlowDelegate;
+import com.fjhx.purchase.entity.sales.enums.SalesReturnDetailStatusEnum;
+import com.fjhx.purchase.entity.sales.enums.SalesReturnStatusEnum;
+import com.fjhx.purchase.entity.sales.po.SalesReturn;
+import com.fjhx.purchase.entity.sales.po.SalesReturnDetail;
+import com.fjhx.purchase.service.sales.SalesReturnDetailService;
+import com.fjhx.purchase.service.sales.SalesReturnService;
+import com.fjhx.purchase.util.code.CodeEnum;
+import com.fjhx.wms.entity.stock.po.StockWait;
+import com.fjhx.wms.service.stock.StockWaitService;
+import com.obs.services.internal.ServiceException;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 退货流程
+ * @Author:caozj
+ * @DATE:2023/4/3 17:38
+ */
+@DS(SourceConstant.PURCHASE)
+@Component
+public class SalesReturnFlow extends FlowDelegate {
+
+    @Override
+    public String getFlowKey() {
+        return "sales_return_flow";
+    }
+
+
+    /**
+     * 发起流程
+     * @param flowId 流程ID
+     * @param submitData 申购数据
+     * @return
+     */
+    @Override
+    public Long start(Long flowId, JSONObject submitData) {
+        SalesReturnService salesReturnService = SpringUtil.getBean(SalesReturnService.class);
+        SalesReturnDetailService salesReturnDetailService = SpringUtil.getBean(SalesReturnDetailService.class);
+        SalesReturn salesReturn = submitData.toJavaObject(SalesReturn.class);
+        salesReturn.setCode(CodeEnum.SALES_RETURN.getCode());
+        salesReturnService.save(salesReturn);
+        List<SalesReturnDetail> salesReturnDetailList = salesReturn.getSalesReturnDetailList();
+        if(CollectionUtils.isNotEmpty(salesReturnDetailList)){
+            for(SalesReturnDetail s : salesReturnDetailList){
+                s.setSalesReturnId(salesReturn.getId());
+            }
+            salesReturnDetailService.saveBatch(salesReturnDetailList);
+        }
+        return salesReturn.getId();
+    }
+
+    /**
+     * 结束流程
+     * @param flowId 流程ID
+     * @param businessId 业务ID
+     * @param submitData 数据
+     */
+    @Override
+    public void end(Long flowId, Long businessId, JSONObject submitData) {
+        SalesReturnService salesReturnService = SpringUtil.getBean(SalesReturnService.class);
+        SalesReturnDetailService salesReturnDetailService = SpringUtil.getBean(SalesReturnDetailService.class);
+        StockWaitService stockWaitService = SpringUtil.getBean(StockWaitService.class);
+        //通过业务ID查询退货数据
+        SalesReturn salesReturn = salesReturnService.getById(businessId);
+        if(ObjectUtils.isEmpty(salesReturn)){
+            throw new ServiceException("退货单单不存在");
+        }
+        //修改退货状态为待退货
+        salesReturn.setStatus(SalesReturnStatusEnum.PASS.getKey());
+        salesReturn.setApprovedDate(new Date());
+        salesReturnService.updateById(salesReturn);
+        //修改退货明细状态为待退货
+        SalesReturnDetail detail = new SalesReturnDetail();
+        detail.setStatus(SalesReturnDetailStatusEnum.STATUS_20.getKey());
+        salesReturnDetailService.update(detail,Wrappers.<SalesReturnDetail>query()
+                .lambda().eq(SalesReturnDetail::getSalesReturnId,salesReturn.getId()));
+        List<SalesReturnDetail> salesReturnDetailList = salesReturnDetailService.list(Wrappers.<SalesReturnDetail>query()
+                        .lambda().eq(SalesReturnDetail::getSalesReturnId,salesReturn.getId()));
+        //添加一份待出库数据
+        List<StockWait> stockWaitList = new ArrayList<>();
+        for(SalesReturnDetail s:salesReturnDetailList){
+            StockWait stockWait = new StockWait();
+            stockWait.setProductId(s.getBussinessId());
+            stockWait.setBusinessId(s.getId());//到货明细ID
+            stockWait.setType(2);//入库
+            stockWait.setStatus(0);//待入库
+            stockWait.setBusinessType(4);//退货出库
+            stockWait.setQuantity(s.getCount());
+            stockWaitList.add(stockWait);
+        }
+        stockWaitService.saveBatch(stockWaitList);
+    }
+}

+ 1 - 1
hx-purchase/src/main/java/com/fjhx/purchase/flow/SubscribeFlow.java

@@ -55,7 +55,7 @@ public class SubscribeFlow extends FlowDelegate {
             for(SubscribeDetail s : SubscribeDetails){
                 s.setSubscribeId(subscribe.getId());
             }
-            subscribeDetailService.saveBatch(subscribe.getSubscribeDetailList());
+            subscribeDetailService.saveBatch(SubscribeDetails);
         }
         return subscribe.getId();
     }

+ 34 - 0
hx-purchase/src/main/java/com/fjhx/purchase/mapper/quality/QualityDetailMapper.java

@@ -0,0 +1,34 @@
+package com.fjhx.purchase.mapper.quality;
+
+import com.fjhx.purchase.entity.quality.po.QualityDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.quality.vo.QualityDetailVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+
+
+/**
+ * <p>
+ * 质检明细单 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+public interface QualityDetailMapper extends BaseMapper<QualityDetail> {
+
+    /**
+     * 质检明细单分页
+     */
+    Page<QualityDetailVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<QualityDetail> wrapper);
+
+    /**
+     * 获取当前到货明细总质检数量
+     * @param arrivalDetailId
+     * @return
+     */
+    BigDecimal getSumQualityCount(@Param("arrivalDetailId")Long arrivalDetailId);
+}

+ 26 - 0
hx-purchase/src/main/java/com/fjhx/purchase/mapper/quality/QualityMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.purchase.mapper.quality;
+
+import com.fjhx.purchase.entity.quality.po.Quality;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.quality.vo.QualityVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 质检 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+public interface QualityMapper extends BaseMapper<Quality> {
+
+    /**
+     * 质检分页
+     */
+    Page<QualityVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Quality> wrapper);
+
+}

+ 26 - 0
hx-purchase/src/main/java/com/fjhx/purchase/mapper/sales/SalesReturnDetailMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.purchase.mapper.sales;
+
+import com.fjhx.purchase.entity.sales.po.SalesReturnDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.sales.vo.SalesReturnDetailVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 到货明细单 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+public interface SalesReturnDetailMapper extends BaseMapper<SalesReturnDetail> {
+
+    /**
+     * 到货明细单分页
+     */
+    Page<SalesReturnDetailVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<SalesReturnDetail> wrapper);
+
+}

+ 26 - 0
hx-purchase/src/main/java/com/fjhx/purchase/mapper/sales/SalesReturnMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.purchase.mapper.sales;
+
+import com.fjhx.purchase.entity.sales.po.SalesReturn;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.sales.vo.SalesReturnVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 退货 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+public interface SalesReturnMapper extends BaseMapper<SalesReturn> {
+
+    /**
+     * 退货分页
+     */
+    Page<SalesReturnVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<SalesReturn> wrapper);
+
+}

+ 5 - 1
hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/impl/ArrivalDetailServiceImpl.java

@@ -14,6 +14,7 @@ import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
 import com.fjhx.purchase.mapper.arrival.ArrivalDetailMapper;
 import com.fjhx.purchase.service.arrival.ArrivalDetailService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.purchase.service.quality.QualityDetailService;
 import com.fjhx.supply.entity.supplier.po.SupplierInfo;
 import com.fjhx.supply.service.supplier.SupplierInfoService;
 import com.ruoyi.common.utils.StringUtils;
@@ -49,6 +50,8 @@ public class ArrivalDetailServiceImpl extends ServiceImpl<ArrivalDetailMapper, A
     @Autowired
     private ProductInfoService productInfoService;
 
+    @Autowired
+    private QualityDetailService qualityDetailService;
     /**
      * 分页
      * @param dto
@@ -61,6 +64,7 @@ public class ArrivalDetailServiceImpl extends ServiceImpl<ArrivalDetailMapper, A
             wrapper.eq("t1", PurchaseDetail::getStatus,dto.getStatus());
         }
         wrapper.orderByDesc("t1", ArrivalDetail::getCreateTime);
+        wrapper.groupBy("t1.id");
         Page<ArrivalDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<ArrivalDetailVo> list = page.getRecords();
         if(CollectionUtils.isNotEmpty(list)){
@@ -109,9 +113,9 @@ public class ArrivalDetailServiceImpl extends ServiceImpl<ArrivalDetailMapper, A
         if(MapUtils.isNotEmpty(productMap)) {
             for(ArrivalDetail s:arrivalDetailList){
                 //查询出当前这款到货明细的质检总数
-
                 ArrivalDetailVo result = BeanUtil.toBean(s, ArrivalDetailVo.class);
                 ProductInfoVo p = productMap.get(s.getBussinessId()).get(0);
+                result.setSumQualityCount(qualityDetailService.getSumQualityCount(s.getId()));
                 result.setProductCategory(p.getClassifyName());
                 result.setProductCode(p.getCode());
                 result.setProductUnit(p.getUnit());

+ 54 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/quality/QualityDetailService.java

@@ -0,0 +1,54 @@
+package com.fjhx.purchase.service.quality;
+
+import com.fjhx.purchase.entity.quality.po.QualityDetail;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.quality.vo.QualityDetailVo;
+import com.fjhx.purchase.entity.quality.dto.QualityDetailSelectDto;
+import com.fjhx.purchase.entity.quality.dto.QualityDetailDto;
+
+import java.math.BigDecimal;
+
+
+/**
+ * <p>
+ * 质检明细单 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+public interface QualityDetailService extends BaseService<QualityDetail> {
+
+    /**
+     * 质检明细单分页
+     */
+    Page<QualityDetailVo> getPage(QualityDetailSelectDto dto);
+
+    /**
+     * 质检明细单明细
+     */
+    QualityDetailVo detail(Long id);
+
+    /**
+     * 质检明细单新增
+     */
+    void add(QualityDetailDto qualityDetailDto);
+
+    /**
+     * 质检明细单编辑
+     */
+    void edit(QualityDetailDto qualityDetailDto);
+
+    /**
+     * 质检明细单删除
+     */
+    void delete(Long id);
+
+    /**
+     * 获取当前到货明细总质检数量
+     * @param arrivalDetailId
+     * @return
+     */
+    BigDecimal getSumQualityCount(Long arrivalDetailId);
+}

+ 46 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/quality/QualityService.java

@@ -0,0 +1,46 @@
+package com.fjhx.purchase.service.quality;
+
+import com.fjhx.purchase.entity.quality.po.Quality;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.quality.vo.QualityVo;
+import com.fjhx.purchase.entity.quality.dto.QualitySelectDto;
+import com.fjhx.purchase.entity.quality.dto.QualityDto;
+
+
+/**
+ * <p>
+ * 质检 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+public interface QualityService extends BaseService<Quality> {
+
+    /**
+     * 质检分页
+     */
+    Page<QualityVo> getPage(QualitySelectDto dto);
+
+    /**
+     * 质检明细
+     */
+    QualityVo detail(Long id);
+
+    /**
+     * 质检新增
+     */
+    void add(Quality quality);
+
+    /**
+     * 质检编辑
+     */
+    void edit(QualityDto qualityDto);
+
+    /**
+     * 质检删除
+     */
+    void delete(Long id);
+
+}

+ 72 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/quality/impl/QualityDetailServiceImpl.java

@@ -0,0 +1,72 @@
+package com.fjhx.purchase.service.quality.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.purchase.entity.quality.po.QualityDetail;
+import com.fjhx.purchase.mapper.quality.QualityDetailMapper;
+import com.fjhx.purchase.service.quality.QualityDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.quality.vo.QualityDetailVo;
+import com.fjhx.purchase.entity.quality.dto.QualityDetailSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.purchase.entity.quality.dto.QualityDetailDto;
+import cn.hutool.core.bean.BeanUtil;
+
+import java.math.BigDecimal;
+
+
+/**
+ * <p>
+ * 质检明细单 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@DS(SourceConstant.PURCHASE)
+@Service
+public class QualityDetailServiceImpl extends ServiceImpl<QualityDetailMapper, QualityDetail> implements QualityDetailService {
+
+    @Override
+    public Page<QualityDetailVo> getPage(QualityDetailSelectDto dto) {
+        IWrapper<QualityDetail> wrapper = getWrapper();
+        wrapper.orderByDesc("qd", QualityDetail::getId);
+        Page<QualityDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public QualityDetailVo detail(Long id) {
+        QualityDetail QualityDetail = this.getById(id);
+        QualityDetailVo result = BeanUtil.toBean(QualityDetail, QualityDetailVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(QualityDetailDto qualityDetailDto) {
+        this.save(qualityDetailDto);
+    }
+
+    @Override
+    public void edit(QualityDetailDto qualityDetailDto) {
+        this.updateById(qualityDetailDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+    /**
+     * 获取当前到货明细总质检数量
+     * @param arrivalDetailId
+     * @return
+     */
+    @Override
+    public BigDecimal getSumQualityCount(Long arrivalDetailId) {
+        return baseMapper.getSumQualityCount(arrivalDetailId);
+    }
+
+}

+ 112 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/quality/impl/QualityServiceImpl.java

@@ -0,0 +1,112 @@
+package com.fjhx.purchase.service.quality.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.purchase.entity.arrival.enums.ArrivalDetailStatusEnum;
+import com.fjhx.purchase.entity.arrival.po.ArrivalDetail;
+import com.fjhx.purchase.entity.quality.po.Quality;
+import com.fjhx.purchase.entity.quality.po.QualityDetail;
+import com.fjhx.purchase.mapper.quality.QualityMapper;
+import com.fjhx.purchase.service.arrival.ArrivalDetailService;
+import com.fjhx.purchase.service.quality.QualityDetailService;
+import com.fjhx.purchase.service.quality.QualityService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.purchase.util.code.CodeEnum;
+import com.obs.services.internal.ServiceException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.quality.vo.QualityVo;
+import com.fjhx.purchase.entity.quality.dto.QualitySelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.purchase.entity.quality.dto.QualityDto;
+import cn.hutool.core.bean.BeanUtil;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * <p>
+ * 质检 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@DS(SourceConstant.PURCHASE)
+@Service
+public class QualityServiceImpl extends ServiceImpl<QualityMapper, Quality> implements QualityService {
+
+    @Autowired
+    private QualityDetailService qualityDetailService;
+
+    @Autowired
+    private ArrivalDetailService arrivalDetailService;
+
+    @Override
+    public Page<QualityVo> getPage(QualitySelectDto dto) {
+        IWrapper<Quality> wrapper = getWrapper();
+        wrapper.orderByDesc("q", Quality::getId);
+        Page<QualityVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public QualityVo detail(Long id) {
+        Quality Quality = this.getById(id);
+        QualityVo result = BeanUtil.toBean(Quality, QualityVo.class);
+        return result;
+    }
+
+    /**
+     * 添加
+     * @param quality
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void add(Quality quality) {
+        quality.setCode(CodeEnum.QUALITY.getCode());
+        this.save(quality);
+        List<QualityDetail> qualityDetailList = quality.getQualityDetailList();
+        if(CollectionUtils.isNotEmpty(qualityDetailList)){
+            List<ArrivalDetail> upAll = new ArrayList<>();
+            for(QualityDetail q:qualityDetailList){
+                if(q.getQualifiedCount().compareTo(BigDecimal.ZERO)==0
+                        &&q.getNoQualifiedCount().compareTo(BigDecimal.ZERO)==0){
+                    throw new ServiceException("当前质检数量不能为0");
+                }
+                q.setQualityId(quality.getId());
+                //赋值质检状态
+                BigDecimal qualityCount = qualityDetailService.getSumQualityCount(q.getArrivalDetailId());
+                //查询到货数量
+                ArrivalDetail arrivalDetail = arrivalDetailService.getById(q.getArrivalDetailId());
+                BigDecimal sum = qualityCount.add(q.getQualifiedCount().add(q.getNoQualifiedCount()));
+                ArrivalDetail up = new ArrivalDetail();
+                up.setId(q.getArrivalDetailId());
+                if(sum.compareTo(arrivalDetail.getCount())>-1){//如果质检数量大于等于到货数量
+                    up.setStatus(ArrivalDetailStatusEnum.STATUS_20.getKey());
+                }else{
+                    up.setStatus(ArrivalDetailStatusEnum.STATUS_10.getKey());
+                }
+                upAll.add(up);
+            }
+            arrivalDetailService.updateBatchById(upAll);
+            qualityDetailService.saveBatch(qualityDetailList);
+        }
+    }
+
+    @Override
+    public void edit(QualityDto qualityDto) {
+        this.updateById(qualityDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 46 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/sales/SalesReturnDetailService.java

@@ -0,0 +1,46 @@
+package com.fjhx.purchase.service.sales;
+
+import com.fjhx.purchase.entity.sales.po.SalesReturnDetail;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.sales.vo.SalesReturnDetailVo;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnDetailSelectDto;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnDetailDto;
+
+
+/**
+ * <p>
+ * 到货明细单 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+public interface SalesReturnDetailService extends BaseService<SalesReturnDetail> {
+
+    /**
+     * 到货明细单分页
+     */
+    Page<SalesReturnDetailVo> getPage(SalesReturnDetailSelectDto dto);
+
+    /**
+     * 到货明细单明细
+     */
+    SalesReturnDetailVo detail(Long id);
+
+    /**
+     * 到货明细单新增
+     */
+    void add(SalesReturnDetailDto salesReturnDetailDto);
+
+    /**
+     * 到货明细单编辑
+     */
+    void edit(SalesReturnDetailDto salesReturnDetailDto);
+
+    /**
+     * 到货明细单删除
+     */
+    void delete(Long id);
+
+}

+ 46 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/sales/SalesReturnService.java

@@ -0,0 +1,46 @@
+package com.fjhx.purchase.service.sales;
+
+import com.fjhx.purchase.entity.sales.po.SalesReturn;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.sales.vo.SalesReturnVo;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnSelectDto;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnDto;
+
+
+/**
+ * <p>
+ * 退货 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+public interface SalesReturnService extends BaseService<SalesReturn> {
+
+    /**
+     * 退货分页
+     */
+    Page<SalesReturnVo> getPage(SalesReturnSelectDto dto);
+
+    /**
+     * 退货明细
+     */
+    SalesReturnVo detail(Long id);
+
+    /**
+     * 退货新增
+     */
+    void add(SalesReturnDto salesReturnDto);
+
+    /**
+     * 退货编辑
+     */
+    void edit(SalesReturnDto salesReturnDto);
+
+    /**
+     * 退货删除
+     */
+    void delete(Long id);
+
+}

+ 112 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/sales/impl/SalesReturnDetailServiceImpl.java

@@ -0,0 +1,112 @@
+package com.fjhx.purchase.service.sales.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.item.entity.product.vo.ProductInfoVo;
+import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.purchase.entity.arrival.vo.ArrivalDetailVo;
+import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
+import com.fjhx.purchase.entity.sales.po.SalesReturnDetail;
+import com.fjhx.purchase.mapper.sales.SalesReturnDetailMapper;
+import com.fjhx.purchase.service.sales.SalesReturnDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.supply.entity.supplier.po.SupplierInfo;
+import com.fjhx.supply.service.supplier.SupplierInfoService;
+import com.ruoyi.common.utils.StringUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.sales.vo.SalesReturnDetailVo;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnDetailSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnDetailDto;
+import cn.hutool.core.bean.BeanUtil;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 到货明细单 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@DS(SourceConstant.PURCHASE)
+@Service
+public class SalesReturnDetailServiceImpl extends ServiceImpl<SalesReturnDetailMapper, SalesReturnDetail> implements SalesReturnDetailService {
+
+    @Autowired
+    private SupplierInfoService supplierInfoService;
+
+    @Autowired
+    private ProductInfoService productInfoService;
+
+
+    @Override
+    public Page<SalesReturnDetailVo> getPage(SalesReturnDetailSelectDto dto) {
+        IWrapper<SalesReturnDetail> wrapper = getWrapper();
+        wrapper.orderByDesc("t1", SalesReturnDetail::getCreateTime);
+        if(StringUtils.isNotEmpty(dto.getStatus())){
+            wrapper.eq("t1",SalesReturnDetail::getStatus,dto.getStatus());
+        }
+        Page<SalesReturnDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        List<SalesReturnDetailVo> list = page.getRecords();
+        if(CollectionUtils.isNotEmpty(list)){
+            List<Long> supplyIds = list.stream().map(SalesReturnDetailVo::getSupplyId).collect(Collectors.toList());
+            List<SupplierInfo> supplierInfoList = supplierInfoService.list(Wrappers.<SupplierInfo>query().lambda().in(SupplierInfo::getId,supplyIds));
+            Map<Long,List<SupplierInfo>> supplyMap = supplierInfoList.stream().distinct().collect(Collectors.groupingBy(SupplierInfo::getId));
+            if(MapUtils.isNotEmpty(supplyMap)){
+                for(SalesReturnDetailVo p:list){
+                    List<SupplierInfo> supplys = supplyMap.getOrDefault(p.getSupplyId(),null);
+                    p.setSupplyName(supplys==null?null:supplys.get(0).getName());
+                }
+            }
+            //查询产品
+            List<Long> productIds = list.stream().map(SalesReturnDetailVo::getBussinessId).collect(Collectors.toList());
+            List<ProductInfoVo> productInfoVos = productInfoService.getListByProductIds(productIds);
+            Map<Long, List<ProductInfoVo>> productMap = productInfoVos.stream().collect(Collectors.groupingBy(ProductInfoVo::getId));
+            if(MapUtils.isNotEmpty(productMap)) {
+                for(SalesReturnDetailVo s:list){
+                    ProductInfoVo p = productMap.get(s.getBussinessId()).get(0);
+                    s.setProductCategory(p.getClassifyName());
+                    s.setProductCode(p.getCode());
+                    s.setProductUnit(p.getUnit());
+                    s.setProductType(p.getType());
+                    s.setProductName(p.getName());
+                    s.setProductSpec(p.getSpec());
+                }
+            }
+        }
+        return page;
+    }
+
+    @Override
+    public SalesReturnDetailVo detail(Long id) {
+        SalesReturnDetail SalesReturnDetail = this.getById(id);
+        SalesReturnDetailVo result = BeanUtil.toBean(SalesReturnDetail, SalesReturnDetailVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(SalesReturnDetailDto salesReturnDetailDto) {
+        this.save(salesReturnDetailDto);
+    }
+
+    @Override
+    public void edit(SalesReturnDetailDto salesReturnDetailDto) {
+        this.updateById(salesReturnDetailDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 60 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/sales/impl/SalesReturnServiceImpl.java

@@ -0,0 +1,60 @@
+package com.fjhx.purchase.service.sales.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.purchase.entity.sales.po.SalesReturn;
+import com.fjhx.purchase.mapper.sales.SalesReturnMapper;
+import com.fjhx.purchase.service.sales.SalesReturnService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.sales.vo.SalesReturnVo;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnDto;
+import cn.hutool.core.bean.BeanUtil;
+
+
+/**
+ * <p>
+ * 退货 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@DS(SourceConstant.PURCHASE)
+@Service
+public class SalesReturnServiceImpl extends ServiceImpl<SalesReturnMapper, SalesReturn> implements SalesReturnService {
+
+    @Override
+    public Page<SalesReturnVo> getPage(SalesReturnSelectDto dto) {
+        IWrapper<SalesReturn> wrapper = getWrapper();
+        wrapper.orderByDesc("sr", SalesReturn::getId);
+        Page<SalesReturnVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public SalesReturnVo detail(Long id) {
+        SalesReturn SalesReturn = this.getById(id);
+        SalesReturnVo result = BeanUtil.toBean(SalesReturn, SalesReturnVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(SalesReturnDto salesReturnDto) {
+        this.save(salesReturnDto);
+    }
+
+    @Override
+    public void edit(SalesReturnDto salesReturnDto) {
+        this.updateById(salesReturnDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 6 - 0
hx-purchase/src/main/java/com/fjhx/purchase/util/code/CodeEnum.java

@@ -8,8 +8,10 @@ import cn.hutool.extra.spring.SpringUtil;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fjhx.purchase.entity.arrival.po.Arrival;
 import com.fjhx.purchase.entity.purchase.po.Purchase;
+import com.fjhx.purchase.entity.quality.po.Quality;
 import com.fjhx.purchase.service.arrival.ArrivalService;
 import com.fjhx.purchase.service.purchase.PurchaseService;
+import com.fjhx.purchase.service.quality.QualityService;
 import com.fjhx.purchase.service.subscribe.SubscribeService;
 import com.obs.services.internal.ServiceException;
 import lombok.Getter;
@@ -26,6 +28,10 @@ public enum CodeEnum {
     PURCHASE("PO", "yyMM-", "code", 3, PurchaseService.class),
     //到货
     ARRIVAL("PA", "yyMM-", "code", 3, ArrivalService.class),
+    //质检
+    QUALITY("ZJ", "yyMM-", "code", 3, QualityService.class),
+    //退货
+    SALES_RETURN("ZJ", "yyMM-", "code", 3, QualityService.class),
     ;
 
     CodeEnum(String prefix, String dateFormat, String codeFieldName, Integer length, Class<? extends IService<?>> serviceCls) {

+ 4 - 1
hx-purchase/src/main/resources/mapper/arrival/ArrivalDetailMapper.xml

@@ -5,10 +5,13 @@
         SELECT
             t1.*,
             t2.`code`,
-            t2.supply_id
+            t2.supply_id,
+            IFNULL( SUM( t3.qualified_count ), 0 ) AS qualifiedCount,
+            IFNULL( SUM( t3.no_qualified_count ), 0 ) AS noQualifiedCount
         FROM
             arrival_detail t1
         LEFT JOIN arrival t2 ON t1.arrival_id = t2.id
+        LEFT JOIN quality_detail t3 ON t1.id = t3.arrival_detail_id
             ${ew.customSqlSegment}
     </select>
 

+ 31 - 0
hx-purchase/src/main/resources/mapper/quality/QualityDetailMapper.xml

@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.purchase.mapper.quality.QualityDetailMapper">
+    <select id="getPage" resultType="com.fjhx.purchase.entity.quality.vo.QualityDetailVo">
+        select
+            qd.id,
+            qd.bussiness_id,
+            qd.purchase_detail_id,
+            qd.arrival_id,
+            qd.count,
+            qd.status,
+            qd.qualified_count,
+            qd.no_qualified_count,
+            qd.remark,
+            qd.create_user,
+            qd.create_time,
+            qd.update_user,
+            qd.update_time
+        from quality_detail qd
+            ${ew.customSqlSegment}
+    </select>
+
+    <select id="getSumQualityCount" resultType="java.math.BigDecimal">
+        SELECT
+            IFNULL(SUM(qualified_count+no_qualified_count),0) AS sumQualityCount
+        FROM
+            quality_detail
+        WHERE
+            arrival_detail_id = #{arrivalDetailId}
+    </select>
+</mapper>

+ 19 - 0
hx-purchase/src/main/resources/mapper/quality/QualityMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.purchase.mapper.quality.QualityMapper">
+    <select id="getPage" resultType="com.fjhx.purchase.entity.quality.vo.QualityVo">
+        select
+            q.id,
+            q.code,
+            q.supply_id,
+            q.arrival_id,
+            q.status,
+            q.create_user,
+            q.create_time,
+            q.update_user,
+            q.update_time
+        from quality q
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 15 - 0
hx-purchase/src/main/resources/mapper/sales/SalesReturnDetailMapper.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.purchase.mapper.sales.SalesReturnDetailMapper">
+    <select id="getPage" resultType="com.fjhx.purchase.entity.sales.vo.SalesReturnDetailVo">
+        SELECT
+            t1.*,
+            t2.`code`,
+            t2.supply_id
+        FROM
+            sales_return_detail t1
+        LEFT JOIN sales_return t2 ON t1.sales_return_id = t2.id
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 18 - 0
hx-purchase/src/main/resources/mapper/sales/SalesReturnMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.purchase.mapper.sales.SalesReturnMapper">
+    <select id="getPage" resultType="com.fjhx.purchase.entity.sales.vo.SalesReturnVo">
+        select
+            sr.id,
+            sr.code,
+            sr.supply_id,
+            sr.status,
+            sr.create_user,
+            sr.create_time,
+            sr.update_user,
+            sr.update_time
+        from sales_return sr
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 25 - 0
hx-victoriatourist/pom.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.fjhx</groupId>
+        <artifactId>bytesailing</artifactId>
+        <version>1.0</version>
+    </parent>
+
+    <artifactId>hx-victoriatourist</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-base</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-common</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

+ 43 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/controller/abnormal/AbnormalDetailsController.java

@@ -0,0 +1,43 @@
+package com.fjhx.victoriatourist.controller.abnormal;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.victoriatourist.entity.abnormal.vo.AbnormalDetailsVo;
+import com.fjhx.victoriatourist.entity.abnormal.dto.AbnormalDetailsSelectDto;
+import com.fjhx.victoriatourist.entity.abnormal.dto.AbnormalDetailsDto;
+import com.fjhx.victoriatourist.service.abnormal.AbnormalDetailsService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 异常处理详情 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@RestController
+@RequestMapping("/abnormalDetails")
+public class AbnormalDetailsController {
+
+    @Autowired
+    private AbnormalDetailsService abnormalDetailsService;
+
+    /**
+     * 异常处理详情分页
+     */
+    @PostMapping("/page")
+    public Page<AbnormalDetailsVo> page(@RequestBody AbnormalDetailsSelectDto dto) {
+        return abnormalDetailsService.getPage(dto);
+    }
+
+    /**
+     * 异常处理详情新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody AbnormalDetailsDto abnormalDetailsDto) {
+        abnormalDetailsService.add(abnormalDetailsDto);
+    }
+
+}

+ 34 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/controller/abnormal/AbnormalInfoController.java

@@ -0,0 +1,34 @@
+package com.fjhx.victoriatourist.controller.abnormal;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.victoriatourist.entity.abnormal.vo.AbnormalInfoVo;
+import com.fjhx.victoriatourist.entity.abnormal.dto.AbnormalInfoSelectDto;
+import com.fjhx.victoriatourist.service.abnormal.AbnormalInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 异常记录 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@RestController
+@RequestMapping("/abnormalInfo")
+public class AbnormalInfoController {
+
+    @Autowired
+    private AbnormalInfoService abnormalInfoService;
+
+    /**
+     * 异常记录分页
+     */
+    @PostMapping("/page")
+    public Page<AbnormalInfoVo> page(@RequestBody AbnormalInfoSelectDto dto) {
+        return abnormalInfoService.getPage(dto);
+    }
+
+}

+ 17 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/abnormal/dto/AbnormalDetailsDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.victoriatourist.entity.abnormal.dto;
+
+import com.fjhx.victoriatourist.entity.abnormal.po.AbnormalDetails;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 异常处理详情新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class AbnormalDetailsDto extends AbnormalDetails {
+
+}

+ 22 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/abnormal/dto/AbnormalDetailsSelectDto.java

@@ -0,0 +1,22 @@
+package com.fjhx.victoriatourist.entity.abnormal.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 异常处理详情列表查询入参实体
+ *
+ * @author
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class AbnormalDetailsSelectDto extends BaseSelectDto {
+
+    /**
+     * 异常id
+     */
+    private Long abnormalInfoId;
+
+}

+ 17 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/abnormal/dto/AbnormalInfoDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.victoriatourist.entity.abnormal.dto;
+
+import com.fjhx.victoriatourist.entity.abnormal.po.AbnormalInfo;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 异常记录新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class AbnormalInfoDto extends AbnormalInfo {
+
+}

+ 22 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/abnormal/dto/AbnormalInfoSelectDto.java

@@ -0,0 +1,22 @@
+package com.fjhx.victoriatourist.entity.abnormal.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 异常记录列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class AbnormalInfoSelectDto extends BaseSelectDto {
+
+    /**异常类型*/
+    private Integer type;
+    /**异常状态*/
+    private Integer status;
+
+}

+ 57 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/abnormal/po/AbnormalDetails.java

@@ -0,0 +1,57 @@
+package com.fjhx.victoriatourist.entity.abnormal.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 异常处理详情
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+@TableName("abnormal_details")
+public class AbnormalDetails extends BasePo {
+
+    /**
+     * 异常记录id
+     */
+    private Long abnormalInfoId;
+
+    /**
+     * 处理说明
+     */
+    private String explain;
+
+    /**
+     * 1已处理  0未处理
+     */
+    private Integer status;
+
+    /**
+     * 跟进用户
+     */
+    private Long handleUser;
+
+    /**
+     * 下一个跟进用户
+     */
+    private Long nextHandleUser;
+
+    /**
+     * 异常处理方式
+     */
+    private String processing;
+
+    /**
+     * 跟进时间
+     */
+    private Date handleTime;
+
+}

+ 62 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/abnormal/po/AbnormalInfo.java

@@ -0,0 +1,62 @@
+package com.fjhx.victoriatourist.entity.abnormal.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 异常记录
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+@TableName("abnormal_info")
+public class AbnormalInfo extends BasePo {
+
+    /**
+     * 异常来源 10到货质检 20京东订单出库 30调仓
+     */
+    private Integer type;
+
+    /**
+     * 关联id
+     */
+    private Long linkId;
+
+    /**
+     * 关联编码
+     */
+    private String linkCode;
+
+    /**
+     * 异常说明
+     */
+    private String title;
+
+    /**
+     * 状态 0未处理 1跟进中 2已处理
+     */
+    private Integer status;
+
+    /**
+     * 最近处理用户
+     */
+    private Long handleUser;
+
+    /**
+     * 最近处理时间
+     */
+    private Date handleTime;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 19 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/abnormal/vo/AbnormalDetailsVo.java

@@ -0,0 +1,19 @@
+package com.fjhx.victoriatourist.entity.abnormal.vo;
+
+import com.fjhx.victoriatourist.entity.abnormal.po.AbnormalDetails;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 异常处理详情列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class AbnormalDetailsVo extends AbnormalDetails {
+    /**跟进用户名*/
+    private String handleUserName;
+
+}

Некоторые файлы не были показаны из-за большого количества измененных файлов