瀏覽代碼

Merge remote-tracking branch 'origin/master'

24282 2 年之前
父節點
當前提交
1984d8bab7
共有 83 個文件被更改,包括 2886 次插入50 次删除
  1. 17 0
      code/src/test/java/CommonDataSource.java
  2. 68 0
      hx-account/src/main/java/com/fjhx/account/controller/account/AccountRequestFundsController.java
  3. 68 0
      hx-account/src/main/java/com/fjhx/account/controller/account/AccountRequestFundsDetailController.java
  4. 20 0
      hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountRequestFundsDetailDto.java
  5. 17 0
      hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountRequestFundsDetailSelectDto.java
  6. 26 0
      hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountRequestFundsDto.java
  7. 25 0
      hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountRequestFundsSelectDto.java
  8. 46 0
      hx-account/src/main/java/com/fjhx/account/entity/account/enums/AccountRequestFundsStatusEnum.java
  9. 108 0
      hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountRequestFunds.java
  10. 42 0
      hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountRequestFundsDetail.java
  11. 17 0
      hx-account/src/main/java/com/fjhx/account/entity/account/vo/AccountRequestFundsDetailVo.java
  12. 42 0
      hx-account/src/main/java/com/fjhx/account/entity/account/vo/AccountRequestFundsVo.java
  13. 87 0
      hx-account/src/main/java/com/fjhx/account/flow/AccountRequestFundsFlow.java
  14. 26 0
      hx-account/src/main/java/com/fjhx/account/mapper/account/AccountRequestFundsDetailMapper.java
  15. 27 0
      hx-account/src/main/java/com/fjhx/account/mapper/account/AccountRequestFundsMapper.java
  16. 46 0
      hx-account/src/main/java/com/fjhx/account/service/account/AccountRequestFundsDetailService.java
  17. 46 0
      hx-account/src/main/java/com/fjhx/account/service/account/AccountRequestFundsService.java
  18. 57 0
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRequestFundsDetailServiceImpl.java
  19. 150 0
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRequestFundsServiceImpl.java
  20. 19 0
      hx-account/src/main/resources/mapper/account/AccountRequestFundsDetailMapper.xml
  21. 32 0
      hx-account/src/main/resources/mapper/account/AccountRequestFundsMapper.xml
  22. 4 0
      hx-admin/src/main/resources/application-dev.yml
  23. 4 0
      hx-admin/src/main/resources/application-prod.yml
  24. 4 0
      hx-admin/src/main/resources/application-test.yml
  25. 2 0
      hx-common/src/main/java/com/fjhx/common/constant/SourceConstant.java
  26. 68 0
      hx-common/src/main/java/com/fjhx/common/controller/corporation/CorporationController.java
  27. 17 0
      hx-common/src/main/java/com/fjhx/common/entity/corporation/dto/CorporationDto.java
  28. 17 0
      hx-common/src/main/java/com/fjhx/common/entity/corporation/dto/CorporationSelectDto.java
  29. 75 0
      hx-common/src/main/java/com/fjhx/common/entity/corporation/po/Corporation.java
  30. 17 0
      hx-common/src/main/java/com/fjhx/common/entity/corporation/vo/CorporationVo.java
  31. 26 0
      hx-common/src/main/java/com/fjhx/common/mapper/corporation/CorporationMapper.java
  32. 46 0
      hx-common/src/main/java/com/fjhx/common/service/corporation/CorporationService.java
  33. 66 0
      hx-common/src/main/java/com/fjhx/common/service/corporation/impl/CorporationServiceImpl.java
  34. 25 0
      hx-common/src/main/resources/mapper/corporation/CorporationMapper.xml
  35. 6 0
      hx-item/pom.xml
  36. 7 4
      hx-item/src/main/java/com/fjhx/item/controller/product/ProductInfoController.java
  37. 3 0
      hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductInfoSelectDto.java
  38. 2 0
      hx-item/src/main/java/com/fjhx/item/entity/product/po/ProductInfo.java
  39. 4 0
      hx-item/src/main/java/com/fjhx/item/service/product/ProductInfoService.java
  40. 44 0
      hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java
  41. 51 0
      hx-item/src/main/java/com/fjhx/item/util/excel/listener/DataListener.java
  42. 72 0
      hx-item/src/main/java/com/fjhx/item/util/excel/listener/ImportListener.java
  43. 30 0
      hx-item/src/main/java/com/fjhx/item/util/excel/support/ExcelException.java
  44. 35 0
      hx-item/src/main/java/com/fjhx/item/util/excel/support/ExcelImporter.java
  45. 178 0
      hx-item/src/main/java/com/fjhx/item/util/excel/util/ExcelUtil.java
  46. 2 2
      hx-oa/src/main/java/com/fjhx/oa/controller/daily/DailyReportController.java
  47. 3 0
      hx-oa/src/main/java/com/fjhx/oa/entity/daily/dto/DailyReportCommentsSelectDto.java
  48. 2 0
      hx-oa/src/main/java/com/fjhx/oa/entity/daily/dto/DailyReportDto.java
  49. 4 1
      hx-oa/src/main/java/com/fjhx/oa/service/daily/DailyReportService.java
  50. 18 14
      hx-oa/src/main/java/com/fjhx/oa/service/daily/impl/DailyReportCommentsServiceImpl.java
  51. 13 10
      hx-oa/src/main/java/com/fjhx/oa/service/daily/impl/DailyReportServiceImpl.java
  52. 5 0
      hx-purchase/pom.xml
  53. 72 0
      hx-purchase/src/main/java/com/fjhx/purchase/controller/arrival/ArrivalController.java
  54. 48 0
      hx-purchase/src/main/java/com/fjhx/purchase/controller/arrival/ArrivalDetailController.java
  55. 6 6
      hx-purchase/src/main/java/com/fjhx/purchase/controller/purchase/PurchaseDetailController.java
  56. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/dto/ArrivalDetailDto.java
  57. 27 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/dto/ArrivalDetailSelectDto.java
  58. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/dto/ArrivalDto.java
  59. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/dto/ArrivalSelectDto.java
  60. 56 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/po/Arrival.java
  61. 63 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/po/ArrivalDetail.java
  62. 62 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/vo/ArrivalDetailVo.java
  63. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/vo/ArrivalVo.java
  64. 16 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/dto/PurchaseSelectDto.java
  65. 3 1
      hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/enums/PurchaseStatusEnum.java
  66. 6 1
      hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/po/Purchase.java
  67. 43 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/po/PurchaseDetail.java
  68. 33 0
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/arrival/ArrivalDetailMapper.java
  69. 26 0
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/arrival/ArrivalMapper.java
  70. 56 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/ArrivalDetailService.java
  71. 46 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/ArrivalService.java
  72. 153 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/impl/ArrivalDetailServiceImpl.java
  73. 129 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/impl/ArrivalServiceImpl.java
  74. 6 6
      hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/PurchaseDetailService.java
  75. 2 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseDetailServiceImpl.java
  76. 58 3
      hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseServiceImpl.java
  77. 8 1
      hx-purchase/src/main/java/com/fjhx/purchase/util/code/CodeEnum.java
  78. 24 0
      hx-purchase/src/main/resources/mapper/arrival/ArrivalDetailMapper.xml
  79. 19 0
      hx-purchase/src/main/resources/mapper/arrival/ArrivalMapper.xml
  80. 5 1
      hx-wms/src/main/java/com/fjhx/wms/entity/warehouse/po/Warehouse.java
  81. 5 0
      hx-wms/src/main/java/com/fjhx/wms/entity/warehouse/vo/WarehouseVo.java
  82. 9 0
      hx-wms/src/main/java/com/fjhx/wms/service/warehouse/impl/WarehouseServiceImpl.java
  83. 1 0
      hx-wms/src/main/resources/mapper/warehouse/WarehouseMapper.xml

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

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

+ 68 - 0
hx-account/src/main/java/com/fjhx/account/controller/account/AccountRequestFundsController.java

@@ -0,0 +1,68 @@
+package com.fjhx.account.controller.account;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.account.vo.AccountRequestFundsVo;
+import com.fjhx.account.entity.account.dto.AccountRequestFundsSelectDto;
+import com.fjhx.account.entity.account.dto.AccountRequestFundsDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.account.service.account.AccountRequestFundsService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 请款表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-10
+ */
+@RestController
+@RequestMapping("/accountRequestFunds")
+public class AccountRequestFundsController {
+
+    @Autowired
+    private AccountRequestFundsService accountRequestFundsService;
+
+    /**
+     * 请款表分页
+     */
+    @PostMapping("/page")
+    public Page<AccountRequestFundsVo> page(@RequestBody AccountRequestFundsSelectDto dto) {
+        return accountRequestFundsService.getPage(dto);
+    }
+
+    /**
+     * 请款表明细
+     */
+    @PostMapping("/detail")
+    public AccountRequestFundsVo detail(@RequestBody BaseSelectDto dto) {
+        return accountRequestFundsService.detail(dto.getId());
+    }
+
+    /**
+     * 请款表新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody AccountRequestFundsDto accountRequestFundsDto) {
+        accountRequestFundsService.add(accountRequestFundsDto);
+    }
+
+    /**
+     * 请款表编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody AccountRequestFundsDto accountRequestFundsDto) {
+        accountRequestFundsService.edit(accountRequestFundsDto);
+    }
+
+    /**
+     * 请款表删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        accountRequestFundsService.delete(dto.getId());
+    }
+
+}

+ 68 - 0
hx-account/src/main/java/com/fjhx/account/controller/account/AccountRequestFundsDetailController.java

@@ -0,0 +1,68 @@
+package com.fjhx.account.controller.account;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.account.vo.AccountRequestFundsDetailVo;
+import com.fjhx.account.entity.account.dto.AccountRequestFundsDetailSelectDto;
+import com.fjhx.account.entity.account.dto.AccountRequestFundsDetailDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.account.service.account.AccountRequestFundsDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-10
+ */
+@RestController
+@RequestMapping("/accountRequestFundsDetail")
+public class AccountRequestFundsDetailController {
+
+    @Autowired
+    private AccountRequestFundsDetailService accountRequestFundsDetailService;
+
+    /**
+     * 分页
+     */
+    @PostMapping("/page")
+    public Page<AccountRequestFundsDetailVo> page(@RequestBody AccountRequestFundsDetailSelectDto dto) {
+        return accountRequestFundsDetailService.getPage(dto);
+    }
+
+    /**
+     * 明细
+     */
+    @PostMapping("/detail")
+    public AccountRequestFundsDetailVo detail(@RequestBody BaseSelectDto dto) {
+        return accountRequestFundsDetailService.detail(dto.getId());
+    }
+
+    /**
+     * 新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody AccountRequestFundsDetailDto accountRequestFundsDetailDto) {
+        accountRequestFundsDetailService.add(accountRequestFundsDetailDto);
+    }
+
+    /**
+     * 编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody AccountRequestFundsDetailDto accountRequestFundsDetailDto) {
+        accountRequestFundsDetailService.edit(accountRequestFundsDetailDto);
+    }
+
+    /**
+     * 删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        accountRequestFundsDetailService.delete(dto.getId());
+    }
+
+}

+ 20 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountRequestFundsDetailDto.java

@@ -0,0 +1,20 @@
+package com.fjhx.account.entity.account.dto;
+
+import com.fjhx.account.entity.account.po.AccountRequestFundsDetail;
+import com.fjhx.file.entity.ObsFile;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 新增编辑入参实体
+ *
+ * @author
+ * @since 2023-04-10
+ */
+@Getter
+@Setter
+public class AccountRequestFundsDetailDto extends AccountRequestFundsDetail {
+
+}

+ 17 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountRequestFundsDetailSelectDto.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-10
+ */
+@Getter
+@Setter
+public class AccountRequestFundsDetailSelectDto extends BaseSelectDto {
+
+}

+ 26 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountRequestFundsDto.java

@@ -0,0 +1,26 @@
+package com.fjhx.account.entity.account.dto;
+
+import com.fjhx.account.entity.account.po.AccountRequestFunds;
+import com.fjhx.account.entity.account.po.AccountRequestFundsDetail;
+import com.fjhx.file.entity.ObsFile;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 请款表新增编辑入参实体
+ *
+ * @author
+ * @since 2023-04-10
+ */
+@Getter
+@Setter
+public class AccountRequestFundsDto extends AccountRequestFunds {
+
+    //请款详情表的信息
+    private List<AccountRequestFundsDetail> accountRequestFundsDetailList;
+
+    private List<ObsFile> fileList;
+
+}

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

@@ -0,0 +1,25 @@
+package com.fjhx.account.entity.account.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 请款表列表查询入参实体
+ *
+ * @author
+ * @since 2023-04-10
+ */
+@Getter
+@Setter
+public class AccountRequestFundsSelectDto extends BaseSelectDto {
+    /**
+     * 请款类型(字典funds_type)
+     */
+    private String type;
+
+    /**
+     * 流程状态(10。审批中  20 驳回  30 审批通过)
+     */
+    private String status;
+}

+ 46 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/enums/AccountRequestFundsStatusEnum.java

@@ -0,0 +1,46 @@
+package com.fjhx.account.entity.account.enums;
+
+import org.apache.commons.collections4.MapUtils;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+public enum AccountRequestFundsStatusEnum {
+    UNDER_REVIEW("10", "审批中"),
+    REJECT("20", "驳回"),
+    PASS("30","审批通过"),
+    ;
+    private String key;
+
+    private String value;
+
+    private static Map<String, String> map = new LinkedHashMap<>();
+
+    AccountRequestFundsStatusEnum(String key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    /**
+     * 获取枚举map
+     *
+     * @return
+     */
+    public static Map<String, String> getMap() {
+        if (MapUtils.isNotEmpty(map)) {
+            return map;
+        }
+        for (AccountRequestFundsStatusEnum ms : values()) {
+            map.put(ms.key, ms.value);
+        }
+        return map;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+}

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

@@ -0,0 +1,108 @@
+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-10
+ */
+@Getter
+@Setter
+@TableName("account_request_funds")
+public class AccountRequestFunds extends BasePo {
+
+    /**
+     * 归属部门ID
+     */
+    private Long departmentId;
+
+    /**
+     * 流程ID
+     */
+    private Long processInstanceId;
+
+    /**
+     * 归属公司ID
+     */
+    private Long corporationId;
+
+    /**
+     * 付款账户ID
+     */
+    private Long accountManagementId;
+
+    /**
+     * 用款时间
+     */
+    private Date paymentTime;
+
+    /**
+     * 用款备注
+     */
+    private String paymentRemarks;
+
+    /**
+     * 流程状态
+     */
+    private String status;
+
+    /**
+     * 请款类型(字典funds_type)
+     */
+    private String type;
+
+    /**
+     * 请款总额
+     */
+    private BigDecimal total;
+
+    /**
+     * 单据数量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 付款方式(字典funds_payment_method)
+     */
+    private String paymentMethod;
+
+    /**
+     * 户名
+     */
+    private String name;
+
+    /**
+     * 开户银行
+     */
+    private String openingBank;
+
+    /**
+     * 银行账号
+     */
+    private String accountOpening;
+
+    /**
+     * 联行号
+     */
+    private String interbankNumber;
+
+    /**
+     * 处理意见
+     */
+    private String remarks;
+
+    /**
+     * 币种(字典account_currency)
+     */
+    private String currency;
+
+}

+ 42 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountRequestFundsDetail.java

@@ -0,0 +1,42 @@
+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-10
+ */
+@Getter
+@Setter
+@TableName("account_request_funds_detail")
+public class AccountRequestFundsDetail extends BasePo {
+    /**
+     * 请款表ID
+     */
+    private Long accountRequestFundsId;
+
+    /**
+     * 费用类型(字典funds_cost_type)
+     */
+    private String costType;
+
+    /**
+     * 请款金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 款项说明
+     */
+    private String remarks;
+
+}

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

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

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

@@ -0,0 +1,42 @@
+package com.fjhx.account.entity.account.vo;
+
+import com.fjhx.account.entity.account.po.AccountRequestFunds;
+import com.fjhx.account.entity.account.po.AccountRequestFundsDetail;
+import com.fjhx.file.entity.ObsFile;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 请款表列表查询返回值实体
+ *
+ * @author
+ * @since 2023-04-10
+ */
+@Getter
+@Setter
+public class AccountRequestFundsVo extends AccountRequestFunds {
+    /**
+     * 归属公司名称
+     */
+    private String corporationName;
+
+    /**
+     * 归属部门名称
+     */
+    private String deptName;
+
+    /**
+     * 请款人名称
+     */
+    private String userName;
+
+    //请款详情表的信息
+    private List<AccountRequestFundsDetail> accountRequestFundsDetailList;
+
+    /**
+     * 附件信息
+     */
+    private List<ObsFile> fileList;
+}

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

@@ -0,0 +1,87 @@
+package com.fjhx.account.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.account.entity.account.dto.AccountRequestFundsDto;
+import com.fjhx.account.entity.account.enums.AccountRequestFundsStatusEnum;
+import com.fjhx.account.entity.account.po.AccountRequestFunds;
+import com.fjhx.account.entity.account.po.AccountRequestFundsDetail;
+import com.fjhx.account.service.account.AccountRequestFundsDetailService;
+import com.fjhx.account.service.account.AccountRequestFundsService;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.file.utils.ObsFileUtil;
+import com.fjhx.flow.core.FlowDelegate;
+import com.obs.services.internal.ServiceException;
+import org.springframework.stereotype.Component;
+import oshi.util.FileUtil;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 采购流程
+ * @Author:caozj
+ * @DATE:2023/4/3 17:38
+ */
+@DS(SourceConstant.ACCOUNT)
+@Component
+public class AccountRequestFundsFlow extends FlowDelegate {
+
+    @Override
+    public String getFlowKey() {
+        return "account_request_funds_flow";
+    }
+
+
+    /**
+     * 发起流程
+     * @param flowId 流程ID
+     * @param submitData 请款表信息
+     * @return
+     */
+    @Override
+    public Long start(Long flowId, JSONObject submitData) {
+        AccountRequestFundsService accountRequestFundsService = SpringUtil.getBean(AccountRequestFundsService.class);
+        AccountRequestFundsDetailService accountRequestFundsDetailService = SpringUtil.getBean(AccountRequestFundsDetailService.class);
+        AccountRequestFundsDto accountRequestFundsDto = submitData.toJavaObject( AccountRequestFundsDto.class);
+        accountRequestFundsDto.setStatus(AccountRequestFundsStatusEnum.UNDER_REVIEW.getKey());
+        accountRequestFundsDto.setProcessInstanceId(flowId);
+        //添加请款表的信息
+        accountRequestFundsService.save(accountRequestFundsDto);
+        //获取请款详情表的详细信息
+        List<AccountRequestFundsDetail> accountRequestFundsDetailList = accountRequestFundsDto.getAccountRequestFundsDetailList();
+        if(CollectionUtils.isNotEmpty(accountRequestFundsDetailList)){
+            accountRequestFundsDetailList.forEach(accountRequestFundsDetail -> accountRequestFundsDetail
+                    .setAccountRequestFundsId(accountRequestFundsDto.getId()));
+            //添加请款详情表的信息
+            accountRequestFundsDetailService.saveBatch(accountRequestFundsDetailList);
+        }
+        //添加附件信息
+        ObsFileUtil.saveFile(accountRequestFundsDto.getFileList(),accountRequestFundsDto.getId());
+
+        return accountRequestFundsDto.getId();
+    }
+
+    /**
+     * 结束流程
+     * @param flowId 流程ID
+     * @param businessId 业务ID
+     * @param submitData  请款表信息
+     */
+    @Override
+    public void end(Long flowId, Long businessId, JSONObject submitData) {
+        AccountRequestFundsService accountRequestFundsService = SpringUtil.getBean(AccountRequestFundsService.class);
+        //通过业务ID查询申购数据
+        AccountRequestFunds accountRequestFunds = accountRequestFundsService.getById(businessId);
+        if(ObjectUtils.isEmpty(accountRequestFunds)){
+            throw new ServiceException("请款表的数据不存在");
+        }
+        //修改申购状态为审批通过
+        accountRequestFunds.setStatus(AccountRequestFundsStatusEnum.PASS.getKey());
+        accountRequestFundsService.updateById(accountRequestFunds);
+    }
+}

+ 26 - 0
hx-account/src/main/java/com/fjhx/account/mapper/account/AccountRequestFundsDetailMapper.java

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

+ 27 - 0
hx-account/src/main/java/com/fjhx/account/mapper/account/AccountRequestFundsMapper.java

@@ -0,0 +1,27 @@
+package com.fjhx.account.mapper.account;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fjhx.account.entity.account.po.AccountRequestFunds;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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-10
+ */
+public interface AccountRequestFundsMapper extends BaseMapper<AccountRequestFunds> {
+
+    /**
+     * 请款表分页
+     */
+    Page<AccountRequestFundsVo> getPage(@Param("page") Page<Object> page, @Param("ew") QueryWrapper<Object> wrapper);
+
+}

+ 46 - 0
hx-account/src/main/java/com/fjhx/account/service/account/AccountRequestFundsDetailService.java

@@ -0,0 +1,46 @@
+package com.fjhx.account.service.account;
+
+import com.fjhx.account.entity.account.po.AccountRequestFundsDetail;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.account.vo.AccountRequestFundsDetailVo;
+import com.fjhx.account.entity.account.dto.AccountRequestFundsDetailSelectDto;
+import com.fjhx.account.entity.account.dto.AccountRequestFundsDetailDto;
+
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-10
+ */
+public interface AccountRequestFundsDetailService extends BaseService<AccountRequestFundsDetail> {
+
+    /**
+     * 分页
+     */
+    Page<AccountRequestFundsDetailVo> getPage(AccountRequestFundsDetailSelectDto dto);
+
+    /**
+     * 明细
+     */
+    AccountRequestFundsDetailVo detail(Long id);
+
+    /**
+     * 新增
+     */
+    void add(AccountRequestFundsDetailDto accountRequestFundsDetailDto);
+
+    /**
+     * 编辑
+     */
+    void edit(AccountRequestFundsDetailDto accountRequestFundsDetailDto);
+
+    /**
+     * 删除
+     */
+    void delete(Long id);
+
+}

+ 46 - 0
hx-account/src/main/java/com/fjhx/account/service/account/AccountRequestFundsService.java

@@ -0,0 +1,46 @@
+package com.fjhx.account.service.account;
+
+import com.fjhx.account.entity.account.po.AccountRequestFunds;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.account.vo.AccountRequestFundsVo;
+import com.fjhx.account.entity.account.dto.AccountRequestFundsSelectDto;
+import com.fjhx.account.entity.account.dto.AccountRequestFundsDto;
+
+
+/**
+ * <p>
+ * 请款表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-10
+ */
+public interface AccountRequestFundsService extends BaseService<AccountRequestFunds> {
+
+    /**
+     * 请款表分页
+     */
+    Page<AccountRequestFundsVo> getPage(AccountRequestFundsSelectDto dto);
+
+    /**
+     * 请款表明细
+     */
+    AccountRequestFundsVo detail(Long id);
+
+    /**
+     * 请款表新增
+     */
+    void add(AccountRequestFundsDto accountRequestFundsDto);
+
+    /**
+     * 请款表编辑
+     */
+    void edit(AccountRequestFundsDto accountRequestFundsDto);
+
+    /**
+     * 请款表删除
+     */
+    void delete(Long id);
+
+}

+ 57 - 0
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRequestFundsDetailServiceImpl.java

@@ -0,0 +1,57 @@
+package com.fjhx.account.service.account.impl;
+
+import com.fjhx.account.entity.account.po.AccountRequestFundsDetail;
+import com.fjhx.account.mapper.account.AccountRequestFundsDetailMapper;
+import com.fjhx.account.service.account.AccountRequestFundsDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.account.vo.AccountRequestFundsDetailVo;
+import com.fjhx.account.entity.account.dto.AccountRequestFundsDetailSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.account.entity.account.dto.AccountRequestFundsDetailDto;
+import cn.hutool.core.bean.BeanUtil;
+
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-10
+ */
+@Service
+public class AccountRequestFundsDetailServiceImpl extends ServiceImpl<AccountRequestFundsDetailMapper, AccountRequestFundsDetail> implements AccountRequestFundsDetailService {
+
+    @Override
+    public Page<AccountRequestFundsDetailVo> getPage(AccountRequestFundsDetailSelectDto dto) {
+        IWrapper<AccountRequestFundsDetail> wrapper = getWrapper();
+        wrapper.orderByDesc("arfd", AccountRequestFundsDetail::getId);
+        Page<AccountRequestFundsDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public AccountRequestFundsDetailVo detail(Long id) {
+        AccountRequestFundsDetail AccountRequestFundsDetail = this.getById(id);
+        AccountRequestFundsDetailVo result = BeanUtil.toBean(AccountRequestFundsDetail, AccountRequestFundsDetailVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(AccountRequestFundsDetailDto accountRequestFundsDetailDto) {
+        this.save(accountRequestFundsDetailDto);
+    }
+
+    @Override
+    public void edit(AccountRequestFundsDetailDto accountRequestFundsDetailDto) {
+        this.updateById(accountRequestFundsDetailDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 150 - 0
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRequestFundsServiceImpl.java

@@ -0,0 +1,150 @@
+package com.fjhx.account.service.account.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.account.entity.account.po.AccountRequestFunds;
+import com.fjhx.account.entity.account.po.AccountRequestFundsDetail;
+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.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.common.core.domain.entity.SysUser;
+import com.ruoyi.system.service.ISysDeptService;
+import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.system.utils.UserUtil;
+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.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.AccountRequestFundsVo;
+import com.fjhx.account.entity.account.dto.AccountRequestFundsSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.account.entity.account.dto.AccountRequestFundsDto;
+import cn.hutool.core.bean.BeanUtil;
+
+import javax.swing.plaf.ListUI;
+import java.rmi.ServerException;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 请款表 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-10
+ */
+@Service
+public class AccountRequestFundsServiceImpl extends ServiceImpl<AccountRequestFundsMapper, AccountRequestFunds> implements AccountRequestFundsService {
+    @Autowired
+    private CorporationService corporationService;
+
+    @Autowired
+    private ISysDeptService sysDeptService;
+
+    @Autowired
+    private AccountRequestFundsDetailService accountRequestFundsDetailService;
+
+    @Autowired
+    private ISysUserService sysUserService;
+
+    /**
+     * 查询请款列表
+     * @param dto
+     * @return
+     */
+    @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());
+        Page<AccountRequestFundsVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        //查询公司名称信息
+        List<Corporation> corporationList = corporationService.list();
+        Map<Long, List<Corporation>> corporationMap = corporationList.stream().collect(Collectors.groupingBy(Corporation::getId));
+
+        //查询部门信息
+        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;
+    }
+
+    /**
+     * 查询请款详情
+     * @param id
+     * @return
+     */
+    @Override
+    public AccountRequestFundsVo detail(Long id){
+        AccountRequestFunds accountRequestFunds = this.getById(id);
+        AccountRequestFundsVo accountRequestFundsVo = BeanUtil.toBean(accountRequestFunds, AccountRequestFundsVo.class);
+        //查询归属公司的名称
+        Corporation corporation = corporationService.getById(accountRequestFundsVo.getCorporationId());
+        if (ObjectUtil.isNotEmpty(corporation)){
+            throw new ServiceException("没有找到归属公司信息");
+        }
+        accountRequestFundsVo.setCorporationName(corporation.getName());
+
+        //查询部门名称信息
+        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;
+    }
+
+    @Override
+    public void add(AccountRequestFundsDto accountRequestFundsDto) {
+        this.save(accountRequestFundsDto);
+    }
+
+    @Override
+    public void edit(AccountRequestFundsDto accountRequestFundsDto) {
+        this.updateById(accountRequestFundsDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 19 - 0
hx-account/src/main/resources/mapper/account/AccountRequestFundsDetailMapper.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.account.mapper.account.AccountRequestFundsDetailMapper">
+    <select id="getPage" resultType="com.fjhx.account.entity.account.vo.AccountRequestFundsDetailVo">
+        select
+            arfd.id,
+            arfd.account_request_funds_id,
+            arfd.cost_type,
+            arfd.amount,
+            arfd.remarks,
+            arfd.create_user,
+            arfd.create_time,
+            arfd.update_user,
+            arfd.update_time
+        from account_request_funds_detail arfd
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 32 - 0
hx-account/src/main/resources/mapper/account/AccountRequestFundsMapper.xml

@@ -0,0 +1,32 @@
+<?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.AccountRequestFundsMapper">
+    <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.processInstance_id,
+            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
+        from account_request_funds arf
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

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

@@ -6,6 +6,10 @@ spring:
             strict: true
             primary: base
             datasource:
+                common:
+                    url: jdbc:mysql://36.134.91.96:17330/bytesailing_common?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
+                    username: fjhx2012mysql
+                    password: 3PN-Mzn#vnP&q6d
                 oa:
                     url: jdbc:mysql://36.134.91.96:17330/bytesailing_oa?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:
+                common:
+                    url: jdbc:mysql://127.0.0.1:28643/bytesailing_common?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
+                    username: fjhx2012mysql
+                    password: 3PN-Mzn#vnP&q6d
                 oa:
                     url: jdbc:mysql://127.0.0.1:28643/bytesailing_oa?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:
+                common:
+                    url: jdbc:mysql://127.0.0.1:17330/bytesailing_common?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
+                    username: fjhx2012mysql
+                    password: 3PN-Mzn#vnP&q6d
                 oa:
                     url: jdbc:mysql://127.0.0.1:17330/bytesailing_oa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
                     username: fjhx2012mysql

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

@@ -24,4 +24,6 @@ public interface SourceConstant {
 
     String MAIL = "mail";
 
+    String COMMON = "common";
+
 }

+ 68 - 0
hx-common/src/main/java/com/fjhx/common/controller/corporation/CorporationController.java

@@ -0,0 +1,68 @@
+package com.fjhx.common.controller.corporation;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.common.entity.corporation.vo.CorporationVo;
+import com.fjhx.common.entity.corporation.dto.CorporationSelectDto;
+import com.fjhx.common.entity.corporation.dto.CorporationDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.common.service.corporation.CorporationService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 多公司配置 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-10
+ */
+@RestController
+@RequestMapping("/corporation")
+public class CorporationController {
+
+    @Autowired
+    private CorporationService corporationService;
+
+    /**
+     * 多公司配置分页
+     */
+    @PostMapping("/page")
+    public Page<CorporationVo> page(@RequestBody CorporationSelectDto dto) {
+        return corporationService.getPage(dto);
+    }
+
+    /**
+     * 多公司配置明细
+     */
+    @PostMapping("/detail")
+    public CorporationVo detail(@RequestBody BaseSelectDto dto) {
+        return corporationService.detail(dto.getId());
+    }
+
+    /**
+     * 多公司配置新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody CorporationDto corporationDto) {
+        corporationService.add(corporationDto);
+    }
+
+    /**
+     * 多公司配置编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody CorporationDto corporationDto) {
+        corporationService.edit(corporationDto);
+    }
+
+    /**
+     * 多公司配置删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        corporationService.delete(dto.getId());
+    }
+
+}

+ 17 - 0
hx-common/src/main/java/com/fjhx/common/entity/corporation/dto/CorporationDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.common.entity.corporation.dto;
+
+import com.fjhx.common.entity.corporation.po.Corporation;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 多公司配置新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-10
+ */
+@Getter
+@Setter
+public class CorporationDto extends Corporation {
+
+}

+ 17 - 0
hx-common/src/main/java/com/fjhx/common/entity/corporation/dto/CorporationSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.common.entity.corporation.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 多公司配置列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-10
+ */
+@Getter
+@Setter
+public class CorporationSelectDto extends BaseSelectDto {
+
+}

+ 75 - 0
hx-common/src/main/java/com/fjhx/common/entity/corporation/po/Corporation.java

@@ -0,0 +1,75 @@
+package com.fjhx.common.entity.corporation.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BasePo;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 多公司配置
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-10
+ */
+@Getter
+@Setter
+@TableName("corporation")
+public class Corporation extends BasePo {
+
+    /**
+     * 公司名称
+     */
+    private String name;
+
+    /**
+     * 公司英文名称
+     */
+    private String nameEn;
+
+    /**
+     * 企业类型
+     */
+    private Integer type;
+
+    /**
+     * 统一信用代码
+     */
+    private String uscCode;
+
+    /**
+     * 法定代表人
+     */
+    private String legalPersonName;
+
+    /**
+     * 注册资本
+     */
+    private String registeredCapital;
+
+    /**
+     * 营业开始日期
+     */
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    private Date startDate;
+
+    /**
+     * 营业结束日期
+     */
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    private Date stopDate;
+
+    /**
+     * 纳税人资质
+     */
+    private Integer taxpayerQualification;
+
+    /**
+     * 进出口企业代码
+     */
+    private String iaeeCode;
+
+}

+ 17 - 0
hx-common/src/main/java/com/fjhx/common/entity/corporation/vo/CorporationVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.common.entity.corporation.vo;
+
+import com.fjhx.common.entity.corporation.po.Corporation;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 多公司配置列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-10
+ */
+@Getter
+@Setter
+public class CorporationVo extends Corporation {
+
+}

+ 26 - 0
hx-common/src/main/java/com/fjhx/common/mapper/corporation/CorporationMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.common.mapper.corporation;
+
+import com.fjhx.common.entity.corporation.po.Corporation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.common.entity.corporation.vo.CorporationVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 多公司配置 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-10
+ */
+public interface CorporationMapper extends BaseMapper<Corporation> {
+
+    /**
+     * 多公司配置分页
+     */
+    Page<CorporationVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Corporation> wrapper);
+
+}

+ 46 - 0
hx-common/src/main/java/com/fjhx/common/service/corporation/CorporationService.java

@@ -0,0 +1,46 @@
+package com.fjhx.common.service.corporation;
+
+import com.fjhx.common.entity.corporation.po.Corporation;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.common.entity.corporation.vo.CorporationVo;
+import com.fjhx.common.entity.corporation.dto.CorporationSelectDto;
+import com.fjhx.common.entity.corporation.dto.CorporationDto;
+
+
+/**
+ * <p>
+ * 多公司配置 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-10
+ */
+public interface CorporationService extends BaseService<Corporation> {
+
+    /**
+     * 多公司配置分页
+     */
+    Page<CorporationVo> getPage(CorporationSelectDto dto);
+
+    /**
+     * 多公司配置明细
+     */
+    CorporationVo detail(Long id);
+
+    /**
+     * 多公司配置新增
+     */
+    void add(CorporationDto corporationDto);
+
+    /**
+     * 多公司配置编辑
+     */
+    void edit(CorporationDto corporationDto);
+
+    /**
+     * 多公司配置删除
+     */
+    void delete(Long id);
+
+}

+ 66 - 0
hx-common/src/main/java/com/fjhx/common/service/corporation/impl/CorporationServiceImpl.java

@@ -0,0 +1,66 @@
+package com.fjhx.common.service.corporation.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.common.entity.corporation.po.Corporation;
+import com.fjhx.common.mapper.corporation.CorporationMapper;
+import com.fjhx.common.service.corporation.CorporationService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.common.entity.corporation.vo.CorporationVo;
+import com.fjhx.common.entity.corporation.dto.CorporationSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.common.entity.corporation.dto.CorporationDto;
+import cn.hutool.core.bean.BeanUtil;
+
+
+/**
+ * <p>
+ * 多公司配置 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-10
+ */
+@DS(SourceConstant.COMMON)
+@Service
+public class CorporationServiceImpl extends ServiceImpl<CorporationMapper, Corporation> implements CorporationService {
+
+    @Override
+    public Page<CorporationVo> getPage(CorporationSelectDto dto) {
+        IWrapper<Corporation> wrapper = getWrapper();
+        wrapper.orderByDesc("c", Corporation::getId);
+        if(ObjectUtil.isNotEmpty(dto.getKeyword())){
+            wrapper.and(q->q.like(Corporation::getName,dto.getKeyword())
+                    .or().like(Corporation::getLegalPersonName,dto.getKeyword())
+                    .or().like(Corporation::getNameEn,dto.getKeyword()));
+        }
+        Page<CorporationVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public CorporationVo detail(Long id) {
+        Corporation Corporation = this.getById(id);
+        CorporationVo result = BeanUtil.toBean(Corporation, CorporationVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(CorporationDto corporationDto) {
+        this.save(corporationDto);
+    }
+
+    @Override
+    public void edit(CorporationDto corporationDto) {
+        this.updateById(corporationDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 25 - 0
hx-common/src/main/resources/mapper/corporation/CorporationMapper.xml

@@ -0,0 +1,25 @@
+<?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.common.mapper.corporation.CorporationMapper">
+    <select id="getPage" resultType="com.fjhx.common.entity.corporation.vo.CorporationVo">
+        select
+            c.id,
+            c.name,
+            c.name_en,
+            c.type,
+            c.usc_code,
+            c.legal_person_name,
+            c.registered_capital,
+            c.start_date,
+            c.stop_date,
+            c.taxpayer_qualification,
+            c.iaee_code,
+            c.create_user,
+            c.create_time,
+            c.update_user,
+            c.update_time
+        from corporation c
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 6 - 0
hx-item/pom.xml

@@ -24,6 +24,12 @@
             <artifactId>hx-common</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>2.2.11</version>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 7 - 4
hx-item/src/main/java/com/fjhx/item/controller/product/ProductInfoController.java

@@ -9,10 +9,8 @@ import com.fjhx.item.entity.product.vo.ProductInfoVo;
 import com.fjhx.item.service.product.ProductInfoService;
 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 org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 
 /**
@@ -71,4 +69,9 @@ public class ProductInfoController {
         productInfoService.delete(dto.getId());
     }
 
+    @PostMapping("/excelImport")
+    public void issueExcelImport(@RequestParam("file") MultipartFile file){
+        productInfoService.excelImport(file);
+    }
+
 }

+ 3 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductInfoSelectDto.java

@@ -29,4 +29,7 @@ public class ProductInfoSelectDto extends BaseSelectDto {
      */
     private Long productClassifyId;
 
+    /**维多利亚当前周期*/
+    private Integer lifeCycle;
+
 }

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

@@ -68,4 +68,6 @@ public class ProductInfo extends BasePo {
      */
     private String remark;
 
+    private String victoriatouristJson;
+
 }

+ 4 - 0
hx-item/src/main/java/com/fjhx/item/service/product/ProductInfoService.java

@@ -7,6 +7,7 @@ import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.entity.product.vo.ProductInfoVo;
 import com.ruoyi.common.core.service.BaseService;
 import org.apache.ibatis.annotations.Param;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -59,4 +60,7 @@ public interface ProductInfoService extends BaseService<ProductInfo> {
      */
     List<ProductInfoVo> getListByProductType(Integer productType);
 
+    /**excel导入*/
+    void excelImport(MultipartFile file);
+
 }

+ 44 - 0
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java

@@ -1,6 +1,8 @@
 package com.fjhx.item.service.product.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -15,12 +17,16 @@ import com.fjhx.item.mapper.product.ProductInfoMapper;
 import com.fjhx.item.service.product.ProductClassifyService;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.item.util.CodeEnum;
+import com.fjhx.item.util.excel.util.ExcelUtil;
 import com.ruoyi.common.core.domain.BaseIdPo;
+import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.common.utils.wrapper.SqlField;
+import com.ruoyi.system.service.ISysDeptService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -43,6 +49,8 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
 
     @Autowired
     private ProductClassifyService productClassifyService;
+    @Autowired
+    private ISysDeptService sysDeptService;
 
     @Override
     public Page<ProductInfoVo> getPage(ProductInfoSelectDto dto) {
@@ -56,6 +64,7 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
                 new SqlField("pi", ProductInfo::getCode),
                 new SqlField("pi", ProductInfo::getCustomCode)
         );
+        wrapper.eq("json_unquote(victoriatourist_json ->'$.lifeCycle')",dto.getLifeCycle());
         Page<ProductInfoVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
 
         List<ProductInfoVo> records = page.getRecords();
@@ -85,7 +94,35 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
             record.setClassifyNameGroup(classifyNameGroup);
 
         }
+        //赋值维多利亚扩展部门名称
+        List<Long> ids = new ArrayList<>();
+        for (ProductInfoVo record : records) {
+            String victoriatouristJson = record.getVictoriatouristJson();
+            if (ObjectUtil.isNotEmpty(victoriatouristJson)) {
+                JSONObject json = JSONObject.parseObject(victoriatouristJson);
+                ids.add(json.getLong("deptId"));
+            }
+        }
+        if (ObjectUtil.isEmpty(ids)) {
+            return page;
+        }
+
+        IWrapper<SysDept> wrapper1 = IWrapper.getWrapper();
+        wrapper1.in(SysDept::getDeptId, ids);
+        List<SysDept> sysDepts = sysDeptService.list(wrapper1);
+        Map<Long, String> sysDeptMap = sysDepts.stream().collect(Collectors.toMap(SysDept::getDeptId, SysDept::getDeptName));
+
+        for (ProductInfoVo record : records) {
+            String victoriatouristJson = record.getVictoriatouristJson();
+
+            if (ObjectUtil.isEmpty(victoriatouristJson)) {
+                continue;
+            }
 
+            JSONObject json = JSONObject.parseObject(victoriatouristJson);
+            json.put("deptName", sysDeptMap.get(json.getLong("deptId")));
+            record.setVictoriatouristJson(json.toJSONString());
+        }
 
         return page;
     }
@@ -128,6 +165,7 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
 
     /**
      * 根据产品IDS获取产品
+     *
      * @param productIds
      * @return
      */
@@ -138,6 +176,7 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
 
     /**
      * 根据产品类型获取产品
+     *
      * @param productType
      * @return
      */
@@ -146,4 +185,9 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
         return baseMapper.getListByProductType(productType);
     }
 
+    @Override
+    public void excelImport(MultipartFile file) {
+//        List<Object> read = ExcelUtil.read(file, Object.class);
+    }
+
 }

+ 51 - 0
hx-item/src/main/java/com/fjhx/item/util/excel/listener/DataListener.java

@@ -0,0 +1,51 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package com.fjhx.item.util.excel.listener;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Excel监听器
+ *
+ * @author Chill
+ */
+@Getter
+@EqualsAndHashCode(callSuper = true)
+public class DataListener<T> extends AnalysisEventListener<T> {
+
+	/**
+	 * 缓存的数据列表
+	 */
+	private final List<T> dataList = new ArrayList<>();
+
+	@Override
+	public void invoke(T data, AnalysisContext analysisContext) {
+		dataList.add(data);
+	}
+
+	@Override
+	public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+
+	}
+
+}

+ 72 - 0
hx-item/src/main/java/com/fjhx/item/util/excel/listener/ImportListener.java

@@ -0,0 +1,72 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package com.fjhx.item.util.excel.listener;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.fjhx.item.util.excel.support.ExcelImporter;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.RequiredArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Excel监听器
+ *
+ * @author Chill
+ */
+@Data
+@RequiredArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class ImportListener<T> extends AnalysisEventListener<T> {
+
+	/**
+	 * 默认每隔3000条存储数据库
+	 */
+	private int batchCount = 3000;
+	/**
+	 * 缓存的数据列表
+	 */
+	private List<T> list = new ArrayList<>();
+	/**
+	 * 数据导入类
+	 */
+	private final ExcelImporter<T> importer;
+
+	@Override
+	public void invoke(T data, AnalysisContext analysisContext) {
+		list.add(data);
+		// 达到BATCH_COUNT,则调用importer方法入库,防止数据几万条数据在内存,容易OOM
+		if (list.size() >= batchCount) {
+			// 调用importer方法
+			importer.save(list);
+			// 存储完成清理list
+			list.clear();
+		}
+	}
+
+	@Override
+	public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+		// 调用importer方法
+		importer.save(list);
+		// 存储完成清理list
+		list.clear();
+	}
+
+}

+ 30 - 0
hx-item/src/main/java/com/fjhx/item/util/excel/support/ExcelException.java

@@ -0,0 +1,30 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package com.fjhx.item.util.excel.support;
+
+/**
+ * Excel异常处理类
+ *
+ * @author Chill
+ */
+public class ExcelException extends RuntimeException {
+	private static final long serialVersionUID = 1L;
+
+	public ExcelException(String message) {
+		super(message);
+	}
+}

+ 35 - 0
hx-item/src/main/java/com/fjhx/item/util/excel/support/ExcelImporter.java

@@ -0,0 +1,35 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package com.fjhx.item.util.excel.support;
+
+import java.util.List;
+
+/**
+ * Excel统一导入接口
+ *
+ * @author Chill
+ */
+public interface ExcelImporter<T> {
+
+	/**
+	 * 导入数据逻辑
+	 *
+	 * @param data 数据集合
+	 */
+	void save(List<T> data);
+
+}

+ 178 - 0
hx-item/src/main/java/com/fjhx/item/util/excel/util/ExcelUtil.java

@@ -0,0 +1,178 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package com.fjhx.item.util.excel.util;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.read.builder.ExcelReaderBuilder;
+import com.alibaba.excel.read.listener.ReadListener;
+import com.alibaba.excel.util.DateUtils;
+import com.alibaba.excel.write.handler.WriteHandler;
+import com.fjhx.item.util.excel.listener.DataListener;
+import com.fjhx.item.util.excel.listener.ImportListener;
+import com.fjhx.item.util.excel.support.ExcelException;
+import com.fjhx.item.util.excel.support.ExcelImporter;
+import lombok.SneakyThrows;
+import org.apache.commons.codec.Charsets;
+import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URLEncoder;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Excel工具类
+ *
+ * @author Chill
+ * @apiNote { https://www.yuque.com/easyexcel/doc/easyexcel }
+ */
+public class ExcelUtil {
+
+	/**
+	 * 读取excel的所有sheet数据
+	 *
+	 * @param excel excel文件
+	 * @return List<Object>
+	 */
+	public static <T> List<T> read(MultipartFile excel, Class<T> clazz) {
+		DataListener<T> dataListener = new DataListener<>();
+		ExcelReaderBuilder builder = getReaderBuilder(excel, dataListener, clazz);
+		builder.doReadAll();
+		return dataListener.getDataList();
+	}
+
+	/**
+	 * 读取excel的指定sheet数据
+	 *
+	 * @param excel   excel文件
+	 * @param sheetNo sheet序号(从0开始)
+	 * @return List<Object>
+	 */
+	public static <T> List<T> read(MultipartFile excel, int sheetNo, Class<T> clazz) {
+		return read(excel, sheetNo, 1, clazz);
+	}
+
+	/**
+	 * 读取excel的指定sheet数据
+	 *
+	 * @param excel         excel文件
+	 * @param sheetNo       sheet序号(从0开始)
+	 * @param headRowNumber 表头行数
+	 * @return List<Object>
+	 */
+	public static <T> List<T> read(MultipartFile excel, int sheetNo, int headRowNumber, Class<T> clazz) {
+		DataListener<T> dataListener = new DataListener<>();
+		ExcelReaderBuilder builder = getReaderBuilder(excel, dataListener, clazz);
+		builder.sheet(sheetNo).headRowNumber(headRowNumber).doRead();
+		return dataListener.getDataList();
+	}
+
+	/**
+	 * 读取并导入数据
+	 *
+	 * @param excel    excel文件
+	 * @param importer 导入逻辑类
+	 * @param <T>      泛型
+	 */
+	public static <T> void save(MultipartFile excel, ExcelImporter<T> importer, Class<T> clazz) {
+		ImportListener<T> importListener = new ImportListener<>(importer);
+		ExcelReaderBuilder builder = getReaderBuilder(excel, importListener, clazz);
+		builder.doReadAll();
+	}
+
+	/**
+	 * 导出excel
+	 *
+	 * @param response 响应类
+	 * @param dataList 数据列表
+	 * @param clazz    class类
+	 * @param <T>      泛型
+	 */
+	@SneakyThrows
+	public static <T> void export(HttpServletResponse response, List<T> dataList, Class<T> clazz) {
+		export(response, DateUtils.format(new Date(), DateUtils.DATE_FORMAT_14), "导出数据", dataList, clazz);
+	}
+
+	/**
+	 * 导出excel
+	 *
+	 * @param response  响应类
+	 * @param fileName  文件名
+	 * @param sheetName sheet名
+	 * @param dataList  数据列表
+	 * @param clazz     class类
+	 * @param <T>       泛型
+	 */
+	@SneakyThrows
+	public static <T> void export(HttpServletResponse response, String fileName, String sheetName, List<T> dataList, Class<T> clazz) {
+		response.setContentType("application/vnd.ms-excel");
+		response.setCharacterEncoding(Charsets.UTF_8.name());
+		fileName = URLEncoder.encode(fileName, Charsets.UTF_8.name());
+		response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+		EasyExcel.write(response.getOutputStream(), clazz).sheet(sheetName).doWrite(dataList);
+	}
+
+	/**
+	 * 导出excel
+	 *
+	 * @param response     响应类
+	 * @param fileName     文件名
+	 * @param sheetName    sheet名
+	 * @param dataList     数据列表
+	 * @param clazz        class类
+	 * @param writeHandler 自定义处理器
+	 * @param <T>          泛型
+	 */
+	@SneakyThrows
+	public static <T> void export(HttpServletResponse response, String fileName, String sheetName, List<T> dataList, WriteHandler writeHandler, Class<T> clazz) {
+		response.setContentType("application/vnd.ms-excel");
+		response.setCharacterEncoding(Charsets.UTF_8.name());
+		fileName = URLEncoder.encode(fileName, Charsets.UTF_8.name());
+		response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+		EasyExcel.write(response.getOutputStream(), clazz).registerWriteHandler(writeHandler).sheet(sheetName).doWrite(dataList);
+	}
+
+	/**
+	 * 获取构建类
+	 *
+	 * @param excel        excel文件
+	 * @param readListener excel监听类
+	 * @return ExcelReaderBuilder
+	 */
+	public static <T> ExcelReaderBuilder getReaderBuilder(MultipartFile excel, ReadListener<T> readListener, Class<T> clazz) {
+		String filename = excel.getOriginalFilename();
+		if (ObjectUtils.isEmpty(filename)) {
+			throw new ExcelException("请上传文件!");
+		}
+		if ((!StringUtils.endsWithIgnoreCase(filename, ".xls") && !StringUtils.endsWithIgnoreCase(filename, ".xlsx"))) {
+			throw new ExcelException("请上传正确的excel文件!");
+		}
+		InputStream inputStream;
+		try {
+			inputStream = new BufferedInputStream(excel.getInputStream());
+			return EasyExcel.read(inputStream, clazz, readListener);
+		} catch (IOException e) {
+			throw new ExcelException("读取文件失败!");
+		}
+	}
+
+}

+ 2 - 2
hx-oa/src/main/java/com/fjhx/oa/controller/daily/DailyReportController.java

@@ -77,8 +77,8 @@ public class DailyReportController {
      * 分享日报
      */
     @PostMapping("/share")
-    public void share(Long id,Long toUserId) {
-        dailyReportService.share(id,toUserId);
+    public void share(DailyReportDto dto) {
+        dailyReportService.share(dto.getId(), dto.getToUserId());
     }
 
 }

+ 3 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/daily/dto/DailyReportCommentsSelectDto.java

@@ -14,4 +14,7 @@ import lombok.Setter;
 @Setter
 public class DailyReportCommentsSelectDto extends BaseSelectDto {
 
+    /**日报id*/
+    private Long dailyReportId;
+
 }

+ 2 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/daily/dto/DailyReportDto.java

@@ -28,4 +28,6 @@ public class DailyReportDto extends DailyReport {
     /**接收人列表*/
     private List<DailyReportDetails> dailyReportDetailsList;
 
+    private List<Long> toUserId;
+
 }

+ 4 - 1
hx-oa/src/main/java/com/fjhx/oa/service/daily/DailyReportService.java

@@ -7,6 +7,9 @@ import com.fjhx.oa.entity.daily.vo.DailyReportVo;
 import com.fjhx.oa.entity.daily.dto.DailyReportSelectDto;
 import com.fjhx.oa.entity.daily.dto.DailyReportDto;
 
+import java.awt.*;
+import java.util.List;
+
 
 /**
  * <p>
@@ -45,5 +48,5 @@ public interface DailyReportService extends BaseService<DailyReport> {
 
     DailyReportVo myCount( );
 
-    void share(Long id, Long toUserId);
+    void share(Long id, List<Long> toUserIdList);
 }

+ 18 - 14
hx-oa/src/main/java/com/fjhx/oa/service/daily/impl/DailyReportCommentsServiceImpl.java

@@ -1,21 +1,22 @@
 package com.fjhx.oa.service.daily.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.oa.entity.daily.dto.DailyReportCommentsDto;
+import com.fjhx.oa.entity.daily.dto.DailyReportCommentsSelectDto;
 import com.fjhx.oa.entity.daily.po.DailyReportComments;
+import com.fjhx.oa.entity.daily.vo.DailyReportCommentsVo;
 import com.fjhx.oa.mapper.daily.DailyReportCommentsMapper;
 import com.fjhx.oa.service.daily.DailyReportCommentsService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.system.utils.UserUtil;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.oa.entity.daily.vo.DailyReportCommentsVo;
-import com.fjhx.oa.entity.daily.dto.DailyReportCommentsSelectDto;
-import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.fjhx.oa.entity.daily.dto.DailyReportCommentsDto;
-import cn.hutool.core.bean.BeanUtil;
 
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 
@@ -24,7 +25,7 @@ import java.util.stream.Collectors;
  * 报表评论 服务实现类
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-04
  */
 @DS(SourceConstant.OA)
@@ -35,20 +36,23 @@ public class DailyReportCommentsServiceImpl extends ServiceImpl<DailyReportComme
     public Page<DailyReportCommentsVo> getPage(DailyReportCommentsSelectDto dto) {
         IWrapper<DailyReportComments> wrapper = getWrapper();
         wrapper.orderByDesc("drc", DailyReportComments::getId);
+        wrapper.eq(DailyReportComments::getDailyReportId, dto.getDailyReportId());
         //过滤掉回复评论
         wrapper.isNull("drc.reply_id");
         Page<DailyReportCommentsVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<DailyReportCommentsVo> records = page.getRecords();
         //赋值用户名
-        UserUtil.assignmentNickName(records,DailyReportComments::getCreateUser,DailyReportCommentsVo::setUserName);
+        UserUtil.assignmentNickName(records, DailyReportComments::getCreateUser, DailyReportCommentsVo::setUserName);
         //赋值回复评论列表
         List<Long> dailyReportCommentsIds = records.stream().map(DailyReportComments::getId).collect(Collectors.toList());
-        for (DailyReportCommentsVo dailyReportComments:records){
-            List<DailyReportComments> list = list(q -> q.in(DailyReportComments::getReplyId, dailyReportCommentsIds));
-            List<DailyReportCommentsVo> dailyReportCommentsVos = BeanUtil.copyToList(list, DailyReportCommentsVo.class);
-            UserUtil.assignmentNickName(dailyReportCommentsVos,DailyReportComments::getCreateUser,DailyReportCommentsVo::setUserName);
-            dailyReportComments.setReplyList(dailyReportCommentsVos);
+        List<DailyReportComments> list = list(q -> q.in(DailyReportComments::getReplyId, dailyReportCommentsIds));
+        List<DailyReportCommentsVo> dailyReportCommentsVos = BeanUtil.copyToList(list, DailyReportCommentsVo.class);
+        UserUtil.assignmentNickName(dailyReportCommentsVos, DailyReportComments::getCreateUser, DailyReportCommentsVo::setUserName);
+        Map<Long, List<DailyReportCommentsVo>> collect = dailyReportCommentsVos.stream().collect(Collectors.groupingBy(DailyReportComments::getReplyId));
+        for (DailyReportCommentsVo dailyReportComments : records) {
+            dailyReportComments.setReplyList(collect.get(dailyReportComments.getId()));
         }
+
         return page;
     }
 

+ 13 - 10
hx-oa/src/main/java/com/fjhx/oa/service/daily/impl/DailyReportServiceImpl.java

@@ -51,24 +51,25 @@ public class DailyReportServiceImpl extends ServiceImpl<DailyReportMapper, Daily
         IWrapper<DailyReport> wrapper = getWrapper();
         wrapper.orderByDesc("date");
         Long userid = SecurityUtils.getUserId();
-        wrapper.eq("drd", DailyReportDetails::getRecipientId, userid);
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getSenderId()), "dr.create_user", dto.getSenderId());
-        if(ObjectUtil.isNotEmpty(dto.getDate())) {
+        wrapper.eq("dr", DailyReport::getCreateUser, dto.getSenderId());
+        wrapper.groupBy("dr.id");
+
+        if (ObjectUtil.isNotEmpty(dto.getDate())) {
             wrapper.apply("date_format(dr.create_time,'%Y-%m-%d') = date_format('" + sdf.format(dto.getDate()) + "','%Y-%m-%d')");
         }
         if (ObjectUtil.isNotEmpty(dto.getKeyword())) {
-            wrapper.and(wrapper1 -> wrapper1.like(DailyReport::getCompletedWork, dto.getKeyword())
-                    .or().like(DailyReport::getUnfinishedWork, dto.getKeyword())
-                    .or().like(DailyReport::getIsVisibleToRecipient, dto.getKeyword()));
+            wrapper.and(wrapper1 -> wrapper1.like(DailyReport::getCompletedWork, dto.getKeyword()).or().like(DailyReport::getUnfinishedWork, dto.getKeyword()).or().like(DailyReport::getIsVisibleToRecipient, dto.getKeyword()));
         }
-        if(ObjectUtil.isNotEmpty(dto.getType())) {
+        if (ObjectUtil.isNotEmpty(dto.getType())) {
             if (dto.getType() == 1) {
                 //过滤我发出的日报
                 wrapper.eq("dr.create_user", userid);
             } else if (dto.getType() == 2) {
                 //过滤我收到的日报
-                wrapper.ne("dr.create_user", userid);
+                wrapper.eq("drd", DailyReportDetails::getRecipientId, userid);
             }
+        } else {
+            wrapper.and(q -> q.eq("dr", DailyReport::getCreateUser, userid).or().eq("drd", DailyReportDetails::getRecipientId, userid));
         }
         Page<DailyReportVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         UserUtil.assignmentNickName(page.getRecords(), DailyReport::getCreateUser, DailyReportVo::setUserName);
@@ -158,12 +159,14 @@ public class DailyReportServiceImpl extends ServiceImpl<DailyReportMapper, Daily
     }
 
     @Override
-    public void share(Long id, Long toUserId) {
+    public void share(Long id, List<Long> toUserIdList) {
         String username = SecurityUtils.getUsername();
         Map<String, Object> msgMap = new HashMap<>();
         msgMap.put("businessId", id);
         msgMap.put("msg", String.format("%s给你分享了日报", username));
-        WebSocketServer.sendInfo(toUserId, 1, msgMap);
+        for (Long toUserId : toUserIdList) {
+            WebSocketServer.sendInfo(toUserId, 1, msgMap);
+        }
     }
 
 }

+ 5 - 0
hx-purchase/pom.xml

@@ -33,6 +33,11 @@
             <groupId>com.fjhx</groupId>
             <artifactId>hx-supply</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-wms</artifactId>
+        </dependency>
     </dependencies>
 
 </project>

+ 72 - 0
hx-purchase/src/main/java/com/fjhx/purchase/controller/arrival/ArrivalController.java

@@ -0,0 +1,72 @@
+package com.fjhx.purchase.controller.arrival;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.purchase.entity.arrival.po.Arrival;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.arrival.vo.ArrivalVo;
+import com.fjhx.purchase.entity.arrival.dto.ArrivalSelectDto;
+import com.fjhx.purchase.entity.arrival.dto.ArrivalDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.purchase.service.arrival.ArrivalService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 到货 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-07
+ */
+@DS(SourceConstant.PURCHASE)
+@RestController
+@RequestMapping("/arrival")
+public class ArrivalController {
+
+    @Autowired
+    private ArrivalService arrivalService;
+
+    /**
+     * 到货分页
+     */
+    @PostMapping("/page")
+    public Page<ArrivalVo> page(@RequestBody ArrivalSelectDto dto) {
+        return arrivalService.getPage(dto);
+    }
+
+    /**
+     * 到货明细
+     */
+    @PostMapping("/detail")
+    public ArrivalVo detail(@RequestBody BaseSelectDto dto) {
+        return arrivalService.detail(dto.getId());
+    }
+
+    /**
+     * 到货新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody Arrival arrival) {
+        arrivalService.add(arrival);
+    }
+
+    /**
+     * 到货编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody ArrivalDto arrivalDto) {
+        arrivalService.edit(arrivalDto);
+    }
+
+    /**
+     * 到货删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        arrivalService.delete(dto.getId());
+    }
+
+}

+ 48 - 0
hx-purchase/src/main/java/com/fjhx/purchase/controller/arrival/ArrivalDetailController.java

@@ -0,0 +1,48 @@
+package com.fjhx.purchase.controller.arrival;
+
+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.arrival.vo.ArrivalDetailVo;
+import com.fjhx.purchase.entity.arrival.dto.ArrivalDetailSelectDto;
+import com.fjhx.purchase.entity.arrival.dto.ArrivalDetailDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.purchase.service.arrival.ArrivalDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 到货明细单 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-07
+ */
+@DS(SourceConstant.PURCHASE)
+@RestController
+@RequestMapping("/arrivalDetail")
+public class ArrivalDetailController {
+
+    @Autowired
+    private ArrivalDetailService arrivalDetailService;
+
+    /**
+     * 到货明细单分页
+     */
+    @PostMapping("/page")
+    public Page<ArrivalDetailVo> page(@RequestBody ArrivalDetailSelectDto dto) {
+        return arrivalDetailService.getPage(dto);
+    }
+
+    /**
+     * 到货明细单明细
+     */
+    @PostMapping("/detail")
+    public List<ArrivalDetailVo> detail(@RequestBody ArrivalDetailSelectDto dto) {
+        return arrivalDetailService.detail(dto.getIds());
+    }
+}

+ 6 - 6
hx-purchase/src/main/java/com/fjhx/purchase/controller/purchase/PurchaseDetailController.java

@@ -14,7 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * <p>
- * 申购单 前端控制器
+ * 采购明细 前端控制器
  * </p>
  *
  * @author 
@@ -29,7 +29,7 @@ public class PurchaseDetailController {
     private PurchaseDetailService purchaseDetailService;
 
     /**
-     * 申购单分页
+     * 采购明细分页
      */
     @PostMapping("/page")
     public Page<PurchaseDetailVo> page(@RequestBody PurchaseDetailSelectDto dto) {
@@ -37,7 +37,7 @@ public class PurchaseDetailController {
     }
 
     /**
-     * 申购单明细
+     * 采购明细明细
      */
     @PostMapping("/detail")
     public PurchaseDetailVo detail(@RequestBody BaseSelectDto dto) {
@@ -45,7 +45,7 @@ public class PurchaseDetailController {
     }
 
     /**
-     * 申购单新增
+     * 采购明细新增
      */
     @PostMapping("/add")
     public void add(@RequestBody PurchaseDetailDto purchaseDetailDto) {
@@ -53,7 +53,7 @@ public class PurchaseDetailController {
     }
 
     /**
-     * 申购单编辑
+     * 采购明细编辑
      */
     @PostMapping("/edit")
     public void edit(@RequestBody PurchaseDetailDto purchaseDetailDto) {
@@ -61,7 +61,7 @@ public class PurchaseDetailController {
     }
 
     /**
-     * 申购单删除
+     * 采购明细删除
      */
     @PostMapping("/delete")
     public void delete(@RequestBody BaseSelectDto dto) {

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/dto/ArrivalDetailDto.java

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

+ 27 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/dto/ArrivalDetailSelectDto.java

@@ -0,0 +1,27 @@
+package com.fjhx.purchase.entity.arrival.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 到货明细单列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-07
+ */
+@Getter
+@Setter
+public class ArrivalDetailSelectDto extends BaseSelectDto {
+    /**
+     * 质检状态
+     */
+    private String status;
+
+    /**
+     * 到货明细单ID
+     */
+    private List<Long> ids;
+}

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/dto/ArrivalDto.java

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

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/dto/ArrivalSelectDto.java

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

+ 56 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/po/Arrival.java

@@ -0,0 +1,56 @@
+package com.fjhx.purchase.entity.arrival.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-07
+ */
+@Getter
+@Setter
+@TableName("arrival")
+public class Arrival extends BasePo {
+
+    /**
+     * 采购编码
+     */
+    private String code;
+
+    /**
+     * 供应商ID
+     */
+    private Long supplyId;
+
+    /**
+     * 采购单ID
+     */
+    private Long purchaseId;
+
+    /**
+     * 状态 备用字段
+     */
+    private Integer status;
+
+    /**
+     * 到货明细列表
+     */
+    @TableField(exist = false)
+    private List<ArrivalDetail> arrivalDetailList;
+
+    /**
+     * 到货状态
+     */
+    @TableField(exist = false)
+    private Integer arrivalStatus;
+}

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

@@ -0,0 +1,63 @@
+package com.fjhx.purchase.entity.arrival.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-07
+ */
+@Getter
+@Setter
+@TableName("arrival_detail")
+public class ArrivalDetail extends BasePo {
+
+    /**
+     * 关联ID  产品ID/货品ID
+     */
+    private Long bussinessId;
+
+    /**
+     * 到货主表ID
+     */
+    private Long arrivalId;
+
+    /**
+     * 采购明细ID
+     */
+    private Long purchaseDetailId;
+
+    /**
+     * 到货数量
+     */
+    private BigDecimal count;
+
+    /**
+     * 质检状态 0未质检 10部分质检 20全部质检
+     */
+    private Integer status;
+
+    /**
+     * 合格数量
+     */
+    private BigDecimal qualifiedCount;
+
+    /**
+     * 不合格数量
+     */
+    private BigDecimal noQualifiedCount;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 62 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/vo/ArrivalDetailVo.java

@@ -0,0 +1,62 @@
+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;
+
+/**
+ * 到货明细单列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-07
+ */
+@Getter
+@Setter
+public class ArrivalDetailVo extends ArrivalDetail {
+
+    /**
+     * 到货单编码
+     */
+    private String code;
+
+    /**
+     * 供应商ID
+     */
+    private Long supplyId;
+
+    /**
+     * 供应商名称
+     */
+    private String supplyName;
+
+    /**
+     * 货品类型
+     */
+    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/arrival/vo/ArrivalVo.java

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

+ 16 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/dto/PurchaseSelectDto.java

@@ -14,4 +14,20 @@ import lombok.Setter;
 @Setter
 public class PurchaseSelectDto extends BaseSelectDto {
 
+    /**
+     * 采购状态
+     */
+    private Integer purchaseStatus;
+
+    /**
+     * 到货状态
+     */
+    private Integer arrivalStatus;
+
+    /**
+     * 付款状态
+     */
+    private Integer payStatus;
+
+
 }

+ 3 - 1
hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/enums/PurchaseStatusEnum.java

@@ -12,7 +12,9 @@ public enum PurchaseStatusEnum {
     DRAFT(0, "草稿"),
     UNDER_REVIEW(10, "审批中"),
     REJECT(20, "驳回"),
-    PASS(30,"通过"),
+    PASS(30,"已采购"),
+    CENCELLATION(88,"作废"),
+    TERMINATION(99,"终止"),
     ;
     private int key;
 

+ 6 - 1
hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/po/Purchase.java

@@ -3,6 +3,8 @@ package com.fjhx.purchase.entity.purchase.po;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.ruoyi.common.core.domain.BasePo;
+
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
@@ -67,7 +69,10 @@ public class Purchase extends BasePo {
      */
     private Integer arrivalStatus;
 
-
+    /**
+     * 采购总金额
+     */
+    private BigDecimal amount;
     /**
      * 审核通过时间
      */

+ 43 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/po/PurchaseDetail.java

@@ -1,5 +1,6 @@
 package com.fjhx.purchase.entity.purchase.po;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.ruoyi.common.core.domain.BasePo;
 import com.baomidou.mybatisplus.annotation.TableName;
 
@@ -66,4 +67,46 @@ public class PurchaseDetail extends BasePo {
      */
     private String remark;
 
+    /**
+     * 货品类型
+     */
+    @TableField(exist = false)
+    private Integer productType;
+
+    /**
+     * 所属分类
+     */
+    @TableField(exist = false)
+    private String productCategory;
+
+    /**
+     * 货品编码
+     */
+    @TableField(exist = false)
+    private String productCode;
+
+    /**
+     * 货品名称
+     */
+    @TableField(exist = false)
+    private String productName;
+
+    /**
+     * 单位
+     */
+    @TableField(exist = false)
+    private String productUnit;
+
+    /**
+     * 货品规格型号
+     */
+    @TableField(exist = false)
+    private String productSpec;
+
+    /**
+     * 到货总量
+     */
+    @TableField(exist = false)
+    private BigDecimal sumArrivalCount;
+
 }

+ 33 - 0
hx-purchase/src/main/java/com/fjhx/purchase/mapper/arrival/ArrivalDetailMapper.java

@@ -0,0 +1,33 @@
+package com.fjhx.purchase.mapper.arrival;
+
+import com.fjhx.purchase.entity.arrival.po.ArrivalDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.arrival.vo.ArrivalDetailVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+
+
+/**
+ * <p>
+ * 到货明细单 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-07
+ */
+public interface ArrivalDetailMapper extends BaseMapper<ArrivalDetail> {
+
+    /**
+     * 到货明细单分页
+     */
+    Page<ArrivalDetailVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ArrivalDetail> wrapper);
+
+    /**
+     * 统计到货明细总数
+     * @return
+     */
+    BigDecimal getSumCount(@Param("purchaseDetailId")Long purchaseDetailId,@Param("businessId")Long businessId);
+}

+ 26 - 0
hx-purchase/src/main/java/com/fjhx/purchase/mapper/arrival/ArrivalMapper.java

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

+ 56 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/ArrivalDetailService.java

@@ -0,0 +1,56 @@
+package com.fjhx.purchase.service.arrival;
+
+import com.fjhx.purchase.entity.arrival.po.ArrivalDetail;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.arrival.vo.ArrivalDetailVo;
+import com.fjhx.purchase.entity.arrival.dto.ArrivalDetailSelectDto;
+import com.fjhx.purchase.entity.arrival.dto.ArrivalDetailDto;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+
+/**
+ * <p>
+ * 到货明细单 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-07
+ */
+public interface ArrivalDetailService extends BaseService<ArrivalDetail> {
+
+    /**
+     * 到货明细单分页
+     */
+    Page<ArrivalDetailVo> getPage(ArrivalDetailSelectDto dto);
+
+    /**
+     * 到货明细单明细--可传多个ID
+     */
+    List<ArrivalDetailVo> detail(List<Long> ids);
+
+    /**
+     * 到货明细单新增
+     */
+    void add(ArrivalDetailDto arrivalDetailDto);
+
+    /**
+     * 到货明细单编辑
+     */
+    void edit(ArrivalDetailDto arrivalDetailDto);
+
+    /**
+     * 到货明细单删除
+     */
+    void delete(Long id);
+
+    /**
+     * 统计到货明细总数
+     * @return
+     */
+    BigDecimal getSumCount(Long purchaseDetailId, Long businessId);
+
+}

+ 46 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/ArrivalService.java

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

+ 153 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/impl/ArrivalDetailServiceImpl.java

@@ -0,0 +1,153 @@
+package com.fjhx.purchase.service.arrival.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.dto.ArrivalDetailDto;
+import com.fjhx.purchase.entity.arrival.dto.ArrivalDetailSelectDto;
+import com.fjhx.purchase.entity.arrival.po.ArrivalDetail;
+import com.fjhx.purchase.entity.arrival.vo.ArrivalDetailVo;
+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.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.ruoyi.common.utils.wrapper.IWrapper;
+import cn.hutool.core.bean.BeanUtil;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 到货明细单 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-07
+ */
+@DS(SourceConstant.PURCHASE)
+@Service
+public class ArrivalDetailServiceImpl extends ServiceImpl<ArrivalDetailMapper, ArrivalDetail> implements ArrivalDetailService {
+
+    @Autowired
+    private SupplierInfoService supplierInfoService;
+
+    @Autowired
+    private ProductInfoService productInfoService;
+
+    /**
+     * 分页
+     * @param dto
+     * @return
+     */
+    @Override
+    public Page<ArrivalDetailVo> getPage(ArrivalDetailSelectDto dto) {
+        IWrapper<ArrivalDetail> wrapper = getWrapper();
+        if(StringUtils.isNotEmpty(dto.getStatus())){
+            wrapper.eq("t1", PurchaseDetail::getStatus,dto.getStatus());
+        }
+        wrapper.orderByDesc("t1", ArrivalDetail::getCreateTime);
+        Page<ArrivalDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        List<ArrivalDetailVo> list = page.getRecords();
+        if(CollectionUtils.isNotEmpty(list)){
+            //查询供应商
+            List<Long> supplyIds = list.stream().map(ArrivalDetailVo::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(ArrivalDetailVo 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(ArrivalDetailVo::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(ArrivalDetailVo 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;
+    }
+
+    /**
+     * 详情--
+     * @param ids
+     * @return
+     */
+    @Override
+    public List<ArrivalDetailVo> detail(List<Long>  ids) {
+        List<ArrivalDetail> arrivalDetailList = this.list(Wrappers.<ArrivalDetail>query().lambda().in(ArrivalDetail::getId,ids));
+        List<ArrivalDetailVo> results = new ArrayList<>();
+        //查询产品
+        List<Long> productIds = arrivalDetailList.stream().map(ArrivalDetail::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(ArrivalDetail s:arrivalDetailList){
+                //查询出当前这款到货明细的质检总数
+
+                ArrivalDetailVo result = BeanUtil.toBean(s, ArrivalDetailVo.class);
+                ProductInfoVo p = productMap.get(s.getBussinessId()).get(0);
+                result.setProductCategory(p.getClassifyName());
+                result.setProductCode(p.getCode());
+                result.setProductUnit(p.getUnit());
+                result.setProductType(p.getType());
+                result.setProductName(p.getName());
+                result.setProductSpec(p.getSpec());
+                results.add(result);
+            }
+        }
+        return results;
+    }
+
+    @Override
+    public void add(ArrivalDetailDto arrivalDetailDto) {
+        this.save(arrivalDetailDto);
+    }
+
+    @Override
+    public void edit(ArrivalDetailDto arrivalDetailDto) {
+        this.updateById(arrivalDetailDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+    /**
+     * 统计到货明细总数
+     * @param purchaseDetailId
+     * @param businessId
+     * @return
+     */
+    @Override
+    public BigDecimal getSumCount(Long purchaseDetailId, Long businessId) {
+        return baseMapper.getSumCount(purchaseDetailId,businessId);
+    }
+
+}

+ 129 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/impl/ArrivalServiceImpl.java

@@ -0,0 +1,129 @@
+package com.fjhx.purchase.service.arrival.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.po.Arrival;
+import com.fjhx.purchase.entity.arrival.po.ArrivalDetail;
+import com.fjhx.purchase.entity.purchase.po.Purchase;
+import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
+import com.fjhx.purchase.mapper.arrival.ArrivalMapper;
+import com.fjhx.purchase.service.arrival.ArrivalDetailService;
+import com.fjhx.purchase.service.arrival.ArrivalService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.purchase.service.purchase.PurchaseDetailService;
+import com.fjhx.purchase.service.purchase.PurchaseService;
+import com.fjhx.purchase.util.code.CodeEnum;
+import com.fjhx.wms.entity.stock.po.StockWait;
+import com.fjhx.wms.service.stock.StockWaitService;
+import io.seata.spring.annotation.GlobalTransactional;
+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.arrival.vo.ArrivalVo;
+import com.fjhx.purchase.entity.arrival.dto.ArrivalSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.purchase.entity.arrival.dto.ArrivalDto;
+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-07
+ */
+@DS(SourceConstant.PURCHASE)
+@Service
+public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> implements ArrivalService {
+
+    @Autowired
+    private StockWaitService stockWaitService;
+
+    @Autowired
+    private ArrivalDetailService arrivalDetailService;
+
+    @Autowired
+    private PurchaseDetailService purchaseDetailService;
+
+    @Autowired
+    private PurchaseService purchaseService;
+
+
+    @Override
+    public Page<ArrivalVo> getPage(ArrivalSelectDto dto) {
+        IWrapper<Arrival> wrapper = getWrapper();
+        wrapper.orderByDesc("a", Arrival::getId);
+        Page<ArrivalVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public ArrivalVo detail(Long id) {
+        Arrival Arrival = this.getById(id);
+        ArrivalVo result = BeanUtil.toBean(Arrival, ArrivalVo.class);
+        return result;
+    }
+
+    /**
+     * 添加
+     * @param arrival
+     */
+    @GlobalTransactional
+    @Override
+    public void add(Arrival arrival) {
+        arrival.setCode(CodeEnum.ARRIVAL.getCode());
+        this.save(arrival);
+        //修改采购状态
+        Purchase purchase = new Purchase();
+        purchase.setArrivalStatus(arrival.getArrivalStatus());
+        purchase.setId(arrival.getPurchaseId());
+        purchaseService.updateById(purchase);
+        //取出到货明细
+        List<ArrivalDetail> arrivalDetailList = arrival.getArrivalDetailList();
+        if(CollectionUtils.isNotEmpty(arrivalDetailList)){
+            List<StockWait> stockWaitList = new ArrayList<>();
+            for(ArrivalDetail d:arrivalDetailList){
+                //todo 这一块是做了采购到货状态修改。前端已经完成
+                //查询采购明细
+//                PurchaseDetail purchaseDetail = purchaseDetailService.getById(d.getPurchaseDetailId());
+                //查询当前到货总数--修改对应得申购状态
+//                BigDecimal arrivalCount = arrivalDetailService.getSumCount(d.getPurchaseDetailId(),d.getBussinessId());
+//                BigDecimal sumArrivalCount = arrivalCount.add(d.getCount());
+//                if(sumArrivalCount.compareTo(purchaseDetail.getCount())<0){//判断到货数量是否大于等于采购数量
+//
+//
+//                }
+                d.setArrivalId(arrival.getId());
+                StockWait stockWait = new StockWait();
+                stockWait.setProductId(d.getBussinessId());
+                stockWait.setBusinessId(d.getId());//到货明细ID
+                stockWait.setType(1);//入库
+                stockWait.setStatus(0);//待入库
+                stockWait.setBusinessType(3);//采购到货
+                stockWait.setQuantity(d.getCount());
+                stockWaitList.add(stockWait);
+            }
+            arrivalDetailService.saveBatch(arrivalDetailList);
+            stockWaitService.saveBatch(stockWaitList);
+        }
+    }
+
+    @Override
+    public void edit(ArrivalDto arrivalDto) {
+        this.updateById(arrivalDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 6 - 6
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/PurchaseDetailService.java

@@ -10,7 +10,7 @@ import com.fjhx.purchase.entity.purchase.dto.PurchaseDetailDto;
 
 /**
  * <p>
- * 申购单 服务类
+ * 采购明细 服务类
  * </p>
  *
  * @author 
@@ -19,27 +19,27 @@ import com.fjhx.purchase.entity.purchase.dto.PurchaseDetailDto;
 public interface PurchaseDetailService extends BaseService<PurchaseDetail> {
 
     /**
-     * 申购单分页
+     * 采购明细分页
      */
     Page<PurchaseDetailVo> getPage(PurchaseDetailSelectDto dto);
 
     /**
-     * 申购单明细
+     * 采购明细明细
      */
     PurchaseDetailVo detail(Long id);
 
     /**
-     * 申购单新增
+     * 采购明细新增
      */
     void add(PurchaseDetailDto purchaseDetailDto);
 
     /**
-     * 申购单编辑
+     * 采购明细编辑
      */
     void edit(PurchaseDetailDto purchaseDetailDto);
 
     /**
-     * 申购单删除
+     * 采购明细删除
      */
     void delete(Long id);
 

+ 2 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseDetailServiceImpl.java

@@ -1,11 +1,13 @@
 package com.fjhx.purchase.service.purchase.impl;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
 import com.fjhx.purchase.mapper.purchase.PurchaseDetailMapper;
 import com.fjhx.purchase.service.purchase.PurchaseDetailService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.StringUtils;
 import io.seata.spring.annotation.GlobalTransactional;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

+ 58 - 3
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseServiceImpl.java

@@ -3,18 +3,24 @@ package com.fjhx.purchase.service.purchase.impl;
 import cn.hutool.extra.spring.SpringUtil;
 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.item.entity.product.po.ProductInfo;
+import com.fjhx.item.entity.product.vo.ProductInfoVo;
+import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum;
 import com.fjhx.purchase.entity.purchase.po.Purchase;
 import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
 import com.fjhx.purchase.mapper.purchase.PurchaseMapper;
+import com.fjhx.purchase.service.arrival.ArrivalDetailService;
 import com.fjhx.purchase.service.purchase.PurchaseDetailService;
 import com.fjhx.purchase.service.purchase.PurchaseService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.purchase.util.code.CodeEnum;
 import com.fjhx.supply.entity.supplier.po.SupplierInfo;
 import com.fjhx.supply.service.supplier.SupplierInfoService;
+import com.obs.services.internal.ServiceException;
 import io.seata.spring.annotation.GlobalTransactional;
 import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,6 +32,7 @@ import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.fjhx.purchase.entity.purchase.dto.PurchaseDto;
 import cn.hutool.core.bean.BeanUtil;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -46,6 +53,14 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> i
     @Autowired
     private SupplierInfoService supplierInfoService;
 
+    @Autowired
+    private PurchaseDetailService purchaseDetailService;
+
+    @Autowired
+    private ProductInfoService productInfoService;
+
+    @Autowired
+    private ArrivalDetailService arrivalDetailService;
     /**
      * 列表
      * @param dto
@@ -54,7 +69,16 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> i
     @Override
     public Page<PurchaseVo> getPage(PurchaseSelectDto dto) {
         IWrapper<Purchase> wrapper = getWrapper();
-        wrapper.orderByDesc("p", Purchase::getId);
+        wrapper.orderByDesc("p", Purchase::getCreateTime);
+        if(ObjectUtils.isNotEmpty(dto.getPurchaseStatus())){
+            wrapper.eq("p",Purchase::getPurchaseStatus,dto.getPurchaseStatus());
+        }
+        if(ObjectUtils.isNotEmpty(dto.getArrivalStatus())){
+            wrapper.eq("p",Purchase::getArrivalStatus,dto.getArrivalStatus());
+        }
+        if(ObjectUtils.isNotEmpty(dto.getPayStatus())){
+            wrapper.eq("p",Purchase::getPayStatus,dto.getPayStatus());
+        }
         Page<PurchaseVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<PurchaseVo> list = page.getRecords();
         if(CollectionUtils.isNotEmpty(list)){
@@ -78,8 +102,39 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> i
      */
     @Override
     public PurchaseVo detail(Long id) {
-        Purchase Purchase = this.getById(id);
-        PurchaseVo result = BeanUtil.toBean(Purchase, PurchaseVo.class);
+        Purchase purchase = this.getById(id);
+        if(ObjectUtils.isEmpty(purchase)){
+            throw new ServiceException("采购单不存在");
+        }
+        //查询出供应商名称
+        SupplierInfo info = supplierInfoService.getById(purchase.getSupplyId());
+        PurchaseVo result = BeanUtil.toBean(purchase, PurchaseVo.class);
+        result.setSupplyName(info.getName());
+        //查询出采购明细列表
+        List<PurchaseDetail> purchaseDetailList = purchaseDetailService.
+                list(Wrappers.<PurchaseDetail>query().lambda().eq(PurchaseDetail::getPurchaseId,id));
+        //查询出产品
+        if(CollectionUtils.isNotEmpty(purchaseDetailList)){
+            List<Long> productIds = purchaseDetailList.stream().map(PurchaseDetail::getBussinessId).collect(Collectors.toList());
+            List<ProductInfoVo> productInfos = productInfoService.getListByProductIds(productIds);
+            Map<Long,List<ProductInfoVo>> productMap = productInfos.stream().distinct().collect(Collectors.groupingBy(ProductInfoVo::getId));
+            if(MapUtils.isNotEmpty(productMap)){
+                for(PurchaseDetail p:purchaseDetailList){
+                    //查询出到货总量
+                    BigDecimal sumArrivalCount = arrivalDetailService.getSumCount(p.getId(),p.getBussinessId());
+                    p.setSumArrivalCount(sumArrivalCount);
+                    List<ProductInfoVo> productInfoVos = productMap.getOrDefault(p.getBussinessId(),null);
+                    ProductInfoVo vo = productInfoVos.get(0);
+                    p.setProductCode(vo.getCode());
+                    p.setProductName(vo.getName());
+                    p.setProductType(vo.getType());
+                    p.setProductCategory(vo.getClassifyName());
+                    p.setProductUnit(vo.getUnit());
+                    p.setProductSpec(vo.getSpec());
+                }
+            }
+        }
+        result.setPurchaseDetailList(purchaseDetailList);
         return result;
     }
 

+ 8 - 1
hx-purchase/src/main/java/com/fjhx/purchase/util/code/CodeEnum.java

@@ -6,6 +6,10 @@ import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.core.util.ObjectUtil;
 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.service.arrival.ArrivalService;
+import com.fjhx.purchase.service.purchase.PurchaseService;
 import com.fjhx.purchase.service.subscribe.SubscribeService;
 import com.obs.services.internal.ServiceException;
 import lombok.Getter;
@@ -18,7 +22,10 @@ public enum CodeEnum {
 
     //申购
     SUBSCRIBE("PR", "yyMM-", "code", 3, SubscribeService.class),
-    PURCHASE("PO", "yyMM-", "code", 3, SubscribeService.class),
+    //采购
+    PURCHASE("PO", "yyMM-", "code", 3, PurchaseService.class),
+    //到货
+    ARRIVAL("PA", "yyMM-", "code", 3, ArrivalService.class),
     ;
 
     CodeEnum(String prefix, String dateFormat, String codeFieldName, Integer length, Class<? extends IService<?>> serviceCls) {

+ 24 - 0
hx-purchase/src/main/resources/mapper/arrival/ArrivalDetailMapper.xml

@@ -0,0 +1,24 @@
+<?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.arrival.ArrivalDetailMapper">
+    <select id="getPage" resultType="com.fjhx.purchase.entity.arrival.vo.ArrivalDetailVo">
+        SELECT
+            t1.*,
+            t2.`code`,
+            t2.supply_id
+        FROM
+            arrival_detail t1
+        LEFT JOIN arrival t2 ON t1.arrival_id = t2.id
+            ${ew.customSqlSegment}
+    </select>
+
+    <select id="getSumCount" resultType="java.math.BigDecimal">
+        SELECT
+            IFNULL(SUM( count ) ,0) AS sumArrivalCount
+        FROM
+            arrival_detail
+        WHERE
+            purchase_detail_id = #{purchaseDetailId}
+          AND bussiness_id = #{businessId}
+    </select>
+</mapper>

+ 19 - 0
hx-purchase/src/main/resources/mapper/arrival/ArrivalMapper.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.arrival.ArrivalMapper">
+    <select id="getPage" resultType="com.fjhx.purchase.entity.arrival.vo.ArrivalVo">
+        select
+            a.id,
+            a.code,
+            a.supply_id,
+            a.purchase_id,
+            a.status,
+            a.create_user,
+            a.create_time,
+            a.update_user,
+            a.update_time
+        from arrival a
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 5 - 1
hx-wms/src/main/java/com/fjhx/wms/entity/warehouse/po/Warehouse.java

@@ -2,7 +2,6 @@ package com.fjhx.wms.entity.warehouse.po;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.ruoyi.common.core.domain.BasePo;
-import java.util.Date;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -34,4 +33,9 @@ public class Warehouse extends BasePo {
      */
     private String remark;
 
+    /**
+     * 仓管员id
+     */
+    private Long keeperId;
+
 }

+ 5 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/warehouse/vo/WarehouseVo.java

@@ -14,4 +14,9 @@ import lombok.Setter;
 @Setter
 public class WarehouseVo extends Warehouse {
 
+    /**
+     * 仓管员名称
+     */
+    private String keeperName;
+
 }

+ 9 - 0
hx-wms/src/main/java/com/fjhx/wms/service/warehouse/impl/WarehouseServiceImpl.java

@@ -4,6 +4,7 @@ import com.fjhx.wms.entity.warehouse.po.Warehouse;
 import com.fjhx.wms.mapper.warehouse.WarehouseMapper;
 import com.fjhx.wms.service.warehouse.WarehouseService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.utils.UserUtil;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.wms.entity.warehouse.vo.WarehouseVo;
@@ -12,6 +13,9 @@ import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.fjhx.wms.entity.warehouse.dto.WarehouseDto;
 import cn.hutool.core.bean.BeanUtil;
 
+import java.util.Arrays;
+import java.util.Map;
+
 
 /**
  * <p>
@@ -30,6 +34,8 @@ public class WarehouseServiceImpl extends ServiceImpl<WarehouseMapper, Warehouse
         wrapper.orderByDesc("w", Warehouse::getId);
         wrapper.like("w",Warehouse::getName,dto.getKeyword());
         Page<WarehouseVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        //赋值仓管员名称
+        UserUtil.assignmentNickName(page.getRecords(),Warehouse::getKeeperId,WarehouseVo::setKeeperName);
         return page;
     }
 
@@ -37,6 +43,9 @@ public class WarehouseServiceImpl extends ServiceImpl<WarehouseMapper, Warehouse
     public WarehouseVo detail(Long id) {
         Warehouse Warehouse = this.getById(id);
         WarehouseVo result = BeanUtil.toBean(Warehouse, WarehouseVo.class);
+        //赋值仓管员名称
+        Map<Long, String> nickNameMapByIds = UserUtil.getNickNameMapByIds(Arrays.asList(result.getKeeperId()));
+        result.setKeeperName(nickNameMapByIds.get(result.getKeeperId()));
         return result;
     }
 

+ 1 - 0
hx-wms/src/main/resources/mapper/warehouse/WarehouseMapper.xml

@@ -7,6 +7,7 @@
             w.name,
             w.type,
             w.remark,
+            w.keeper_id,
             w.create_user,
             w.create_time,
             w.update_user,