Browse Source

维多利亚

24282 2 years ago
parent
commit
d30c16e097
42 changed files with 1324 additions and 103 deletions
  1. 1 1
      hx-common/code-generator/src/main/java/com/fjhx/modular/SyringeManagement.java
  2. 50 0
      hx-service-api/syringe-management-api/src/main/java/com/fjhx/entity/purchase/Purchase.java
  3. 70 0
      hx-service-api/syringe-management-api/src/main/java/com/fjhx/entity/purchase/PurchaseDetail.java
  4. 44 0
      hx-service-api/syringe-management-api/src/main/java/com/fjhx/entity/subscription/Subscription.java
  5. 64 0
      hx-service-api/syringe-management-api/src/main/java/com/fjhx/entity/subscription/SubscriptionDetail.java
  6. 17 0
      hx-service-api/syringe-management-api/src/main/java/com/fjhx/params/purchase/PurchaseDetailEx.java
  7. 17 0
      hx-service-api/syringe-management-api/src/main/java/com/fjhx/params/purchase/PurchaseDetailVo.java
  8. 17 0
      hx-service-api/syringe-management-api/src/main/java/com/fjhx/params/purchase/PurchaseEx.java
  9. 29 0
      hx-service-api/syringe-management-api/src/main/java/com/fjhx/params/purchase/PurchaseVo.java
  10. 32 0
      hx-service-api/syringe-management-api/src/main/java/com/fjhx/params/subscription/SubscriptionDetailEx.java
  11. 17 0
      hx-service-api/syringe-management-api/src/main/java/com/fjhx/params/subscription/SubscriptionDetailVo.java
  12. 23 0
      hx-service-api/syringe-management-api/src/main/java/com/fjhx/params/subscription/SubscriptionEx.java
  13. 26 0
      hx-service-api/syringe-management-api/src/main/java/com/fjhx/params/subscription/SubscriptionVo.java
  14. 13 4
      hx-service-api/victoriatourist-api/src/main/java/com/fjhx/entity/abnormal/AbnormalDetails.java
  15. 2 5
      hx-service-api/victoriatourist-api/src/main/java/com/fjhx/entity/abnormal/AbnormalInfo.java
  16. 5 0
      hx-service-api/victoriatourist-api/src/main/java/com/fjhx/params/abnormal/AbnormalInfoEx.java
  17. 22 0
      hx-service-api/victoriatourist-api/src/main/java/com/fjhx/params/abnormal/AbnormalPageDto.java
  18. 74 0
      hx-service/syringe-management/src/main/java/com/fjhx/controller/purchase/PurchaseController.java
  19. 61 0
      hx-service/syringe-management/src/main/java/com/fjhx/controller/subscription/SubscriptionController.java
  20. 16 0
      hx-service/syringe-management/src/main/java/com/fjhx/mapper/purchase/PurchaseDetailMapper.java
  21. 5 0
      hx-service/syringe-management/src/main/java/com/fjhx/mapper/purchase/PurchaseDetailMapper.xml
  22. 16 0
      hx-service/syringe-management/src/main/java/com/fjhx/mapper/purchase/PurchaseMapper.java
  23. 5 0
      hx-service/syringe-management/src/main/java/com/fjhx/mapper/purchase/PurchaseMapper.xml
  24. 16 0
      hx-service/syringe-management/src/main/java/com/fjhx/mapper/subscription/SubscriptionDetailMapper.java
  25. 5 0
      hx-service/syringe-management/src/main/java/com/fjhx/mapper/subscription/SubscriptionDetailMapper.xml
  26. 16 0
      hx-service/syringe-management/src/main/java/com/fjhx/mapper/subscription/SubscriptionMapper.java
  27. 5 0
      hx-service/syringe-management/src/main/java/com/fjhx/mapper/subscription/SubscriptionMapper.xml
  28. 24 0
      hx-service/syringe-management/src/main/java/com/fjhx/service/purchase/PurchaseDetailService.java
  29. 38 0
      hx-service/syringe-management/src/main/java/com/fjhx/service/purchase/PurchaseService.java
  30. 43 0
      hx-service/syringe-management/src/main/java/com/fjhx/service/purchase/impl/PurchaseDetailServiceImpl.java
  31. 195 0
      hx-service/syringe-management/src/main/java/com/fjhx/service/purchase/impl/PurchaseServiceImpl.java
  32. 24 0
      hx-service/syringe-management/src/main/java/com/fjhx/service/subscription/SubscriptionDetailService.java
  33. 36 0
      hx-service/syringe-management/src/main/java/com/fjhx/service/subscription/SubscriptionService.java
  34. 43 0
      hx-service/syringe-management/src/main/java/com/fjhx/service/subscription/impl/SubscriptionDetailServiceImpl.java
  35. 113 0
      hx-service/syringe-management/src/main/java/com/fjhx/service/subscription/impl/SubscriptionServiceImpl.java
  36. 99 0
      hx-service/syringe-management/src/main/java/com/fjhx/util/CodeEnum.java
  37. 0 15
      hx-service/victoriatourist/src/main/java/com/fjhx/controller/abnormal/AbnormalDetailsController.java
  38. 8 28
      hx-service/victoriatourist/src/main/java/com/fjhx/controller/abnormal/AbnormalInfoController.java
  39. 0 4
      hx-service/victoriatourist/src/main/java/com/fjhx/service/abnormal/AbnormalDetailsService.java
  40. 4 10
      hx-service/victoriatourist/src/main/java/com/fjhx/service/abnormal/AbnormalInfoService.java
  41. 5 19
      hx-service/victoriatourist/src/main/java/com/fjhx/service/abnormal/impl/AbnormalDetailsServiceImpl.java
  42. 24 17
      hx-service/victoriatourist/src/main/java/com/fjhx/service/abnormal/impl/AbnormalInfoServiceImpl.java

+ 1 - 1
hx-common/code-generator/src/main/java/com/fjhx/modular/SyringeManagement.java

@@ -12,7 +12,7 @@ public class SyringeManagement {
         CodeGenerator.MODULAR_NAME = "syringe-management";
 
         // 需要生成的表名称,多表用,隔开
-        CodeGenerator.INCLUDE = "material";
+        CodeGenerator.INCLUDE = "subscription_detail";
 
         // mysql连接
         CodeGenerator.MYSQL_URL = "36.134.91.96:17330";

+ 50 - 0
hx-service-api/syringe-management-api/src/main/java/com/fjhx/entity/purchase/Purchase.java

@@ -0,0 +1,50 @@
+package com.fjhx.entity.purchase;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fjhx.base.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 采购
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class Purchase extends BaseEntity {
+
+
+    /**
+     * 采购单号
+     */
+    private String code;
+
+    /**
+     * 采购状态
+     */
+    private Integer status;
+
+    /**
+     * 采购总金额
+     */
+    private BigDecimal totalAmount;
+
+    /**
+     * 逻辑删除 0未删除 1已删除
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer delFlag;
+
+
+}

+ 70 - 0
hx-service-api/syringe-management-api/src/main/java/com/fjhx/entity/purchase/PurchaseDetail.java

@@ -0,0 +1,70 @@
+package com.fjhx.entity.purchase;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fjhx.base.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 采购明细
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PurchaseDetail extends BaseEntity {
+
+    /**
+     * 采购id
+     */
+    private Long purchaseId;
+
+    /**
+     * 采购单号
+     */
+    private String purchaseCode;
+
+    /**
+     * 申购明细id
+     */
+    @NotNull(message = "采购明细id不能为空")
+    private Long subscriptionDetailId;
+
+    /**
+     * 申购\采购物料id
+     */
+    private Long materialId;
+
+    /**
+     * 申购\采购数量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 单价
+     */
+    @NotNull(message = "单价不能为空")
+    private BigDecimal amount;
+
+    /**
+     * 小计
+     */
+    private BigDecimal totalAmount;
+
+    /**
+     * 逻辑删除 0未删除 1已删除
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer delFlag;
+
+
+}

+ 44 - 0
hx-service-api/syringe-management-api/src/main/java/com/fjhx/entity/subscription/Subscription.java

@@ -0,0 +1,44 @@
+package com.fjhx.entity.subscription;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fjhx.base.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 申购
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class Subscription extends BaseEntity {
+
+
+    /**
+     * 申购单号
+     */
+    private String code;
+
+    /**
+     * 申购状态(0待采购 1采购中 2已采购)
+     */
+    private Integer status;
+
+    /**
+     * 逻辑删除 0未删除 1已删除
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer delFlag;
+
+
+}

+ 64 - 0
hx-service-api/syringe-management-api/src/main/java/com/fjhx/entity/subscription/SubscriptionDetail.java

@@ -0,0 +1,64 @@
+package com.fjhx.entity.subscription;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fjhx.base.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 申购明细
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class SubscriptionDetail extends BaseEntity {
+
+    /**
+     * 申购id
+     */
+    private Long subscriptionId;
+
+    /**
+     * 申购单号
+     */
+    private String subscriptionCode;
+
+    /**
+     * 申购物料id
+     */
+    @NotNull(message = "物料id不能为空")
+    private Long materialId;
+
+    /**
+     * 申购数量
+     */
+    @NotNull(message = "申购数量不能为空")
+    private BigDecimal quantity;
+
+    /**
+     * 采购id
+     */
+    private Long purchaseId;
+
+    /**
+     * 采购明细id
+     */
+    private Long purchaseDetailId;
+
+    /**
+     * 逻辑删除 0未删除 1已删除
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer delFlag;
+
+}

+ 17 - 0
hx-service-api/syringe-management-api/src/main/java/com/fjhx/params/purchase/PurchaseDetailEx.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.purchase;
+
+import com.fjhx.entity.purchase.PurchaseDetail;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 采购明细
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PurchaseDetailEx extends PurchaseDetail {
+
+}

+ 17 - 0
hx-service-api/syringe-management-api/src/main/java/com/fjhx/params/purchase/PurchaseDetailVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.purchase;
+
+import com.fjhx.entity.purchase.PurchaseDetail;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 采购明细
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PurchaseDetailVo extends PurchaseDetail {
+
+}

+ 17 - 0
hx-service-api/syringe-management-api/src/main/java/com/fjhx/params/purchase/PurchaseEx.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.purchase;
+
+import com.fjhx.entity.purchase.Purchase;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 采购
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PurchaseEx extends Purchase {
+
+}

+ 29 - 0
hx-service-api/syringe-management-api/src/main/java/com/fjhx/params/purchase/PurchaseVo.java

@@ -0,0 +1,29 @@
+package com.fjhx.params.purchase;
+
+import com.fjhx.entity.purchase.Purchase;
+import com.fjhx.entity.purchase.PurchaseDetail;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 采购
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PurchaseVo extends Purchase {
+
+    /**
+     * 采购明细
+     */
+    @NotEmpty(message = "采购明细不能为空")
+    @Valid
+    private List<PurchaseDetail> purchaseDetailList;
+
+}

+ 32 - 0
hx-service-api/syringe-management-api/src/main/java/com/fjhx/params/subscription/SubscriptionDetailEx.java

@@ -0,0 +1,32 @@
+package com.fjhx.params.subscription;
+
+import com.fjhx.entity.subscription.SubscriptionDetail;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 申购明细
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class SubscriptionDetailEx extends SubscriptionDetail {
+
+    /**
+     * 物料名称
+     */
+    private String materialName;
+
+    /**
+     * 物料单位
+     */
+    private String materialUnit;
+
+    /**
+     * 申购人名称
+     */
+    private String userName;
+
+}

+ 17 - 0
hx-service-api/syringe-management-api/src/main/java/com/fjhx/params/subscription/SubscriptionDetailVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.subscription;
+
+import com.fjhx.entity.subscription.SubscriptionDetail;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 申购明细
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class SubscriptionDetailVo extends SubscriptionDetail {
+
+}

+ 23 - 0
hx-service-api/syringe-management-api/src/main/java/com/fjhx/params/subscription/SubscriptionEx.java

@@ -0,0 +1,23 @@
+package com.fjhx.params.subscription;
+
+import com.fjhx.entity.subscription.Subscription;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * 申购
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class SubscriptionEx extends Subscription {
+
+    private String userName;
+
+    private List<SubscriptionDetailEx> subscriptionDetailExList;
+
+}

+ 26 - 0
hx-service-api/syringe-management-api/src/main/java/com/fjhx/params/subscription/SubscriptionVo.java

@@ -0,0 +1,26 @@
+package com.fjhx.params.subscription;
+
+import com.fjhx.entity.subscription.Subscription;
+import com.fjhx.entity.subscription.SubscriptionDetail;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 申购
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class SubscriptionVo extends Subscription {
+
+    @Valid
+    @NotEmpty(message = "申购明细不能为空")
+    private List<SubscriptionDetail> subscriptionDetailList;
+
+}

+ 13 - 4
hx-service-api/victoriatourist-api/src/main/java/com/fjhx/entity/abnormal/AbnormalDetails.java

@@ -1,15 +1,14 @@
 package com.fjhx.entity.abnormal;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.Version;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.fjhx.base.BaseEntity;
-import com.baomidou.mybatisplus.annotation.TableField;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.util.Date;
+
 /**
  * <p>
  * 异常处理详情
@@ -34,6 +33,16 @@ public class AbnormalDetails extends BaseEntity {
     private String explain;
 
     /**
+     * 处理时间
+     */
+    private Date handleTime;
+
+    /**
+     * 状态
+     */
+    private Integer status;
+
+    /**
      * 逻辑删除 0未删除 1已删除
      */
     @TableField(fill = FieldFill.INSERT)

+ 2 - 5
hx-service-api/victoriatourist-api/src/main/java/com/fjhx/entity/abnormal/AbnormalInfo.java

@@ -1,12 +1,9 @@
 package com.fjhx.entity.abnormal;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.Version;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.fjhx.base.BaseEntity;
-import com.baomidou.mybatisplus.annotation.TableField;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -44,7 +41,7 @@ public class AbnormalInfo extends BaseEntity {
     private String title;
 
     /**
-     * 状态 0未处理 1已处理
+     * 状态 0未处理 1跟进中 2已处理
      */
     private Integer status;
 

+ 5 - 0
hx-service-api/victoriatourist-api/src/main/java/com/fjhx/params/abnormal/AbnormalInfoEx.java

@@ -14,4 +14,9 @@ import lombok.EqualsAndHashCode;
 @EqualsAndHashCode(callSuper = true)
 public class AbnormalInfoEx extends AbnormalInfo {
 
+    /**
+     * 最近操作人
+     */
+    private String userName;
+
 }

+ 22 - 0
hx-service-api/victoriatourist-api/src/main/java/com/fjhx/params/abnormal/AbnormalPageDto.java

@@ -0,0 +1,22 @@
+package com.fjhx.params.abnormal;
+
+import com.fjhx.base.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class AbnormalPageDto extends BaseSelectDto {
+
+    /**
+     * 异常类型
+     */
+    private Integer type;
+
+    /**
+     * 状态 0未处理 1跟进中 2已处理
+     */
+    private Integer status;
+
+
+}

+ 74 - 0
hx-service/syringe-management/src/main/java/com/fjhx/controller/purchase/PurchaseController.java

@@ -0,0 +1,74 @@
+package com.fjhx.controller.purchase;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.base.Condition;
+import com.fjhx.params.purchase.PurchaseVo;
+import com.fjhx.params.subscription.SubscriptionDetailEx;
+import com.fjhx.service.purchase.PurchaseService;
+import org.springblade.core.tool.api.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+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;
+
+/**
+ * <p>
+ * 采购 前端控制器
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@RestController
+@RequestMapping("/purchase")
+public class PurchaseController {
+
+    @Autowired
+    private PurchaseService purchaseService;
+
+    /**
+     * 待采购分页
+     */
+    @PostMapping("/toBePurchasedPage")
+    public R toBePurchasedPage(@RequestBody Condition condition) {
+        Page<SubscriptionDetailEx> result = purchaseService.toBePurchasedPage(condition);
+        return R.success(result);
+    }
+
+    /**
+     * 提交采购
+     */
+    @PostMapping("submit")
+    public R submit(@Validated @RequestBody PurchaseVo purchaseVo) {
+        purchaseService.submit(purchaseVo);
+        return R.success();
+    }
+
+    // @PostMapping("/page")
+    // public R page(@RequestBody Map<String, Object> condition) {
+    //     Page<Purchase> result = purchaseService.getPage(condition);
+    //     return R.success(result);
+    // }
+    //
+    // @PostMapping("/add")
+    // public R add(@RequestBody PurchaseVo purchaseVo) {
+    //     purchaseService.add(purchaseVo);
+    //     return R.success();
+    // }
+    //
+    // @PostMapping("/edit")
+    // public R edit(@RequestBody PurchaseVo purchaseVo) {
+    //     purchaseService.edit(purchaseVo);
+    //     return R.success();
+    // }
+    //
+    // @PostMapping("/delete")
+    // public R delete(@RequestBody PurchaseVo purchaseVo) {
+    //     purchaseService.delete(purchaseVo);
+    //     return R.success();
+    // }
+
+}
+

+ 61 - 0
hx-service/syringe-management/src/main/java/com/fjhx/controller/subscription/SubscriptionController.java

@@ -0,0 +1,61 @@
+package com.fjhx.controller.subscription;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.base.BaseSelectDto;
+import com.fjhx.params.subscription.SubscriptionEx;
+import com.fjhx.params.subscription.SubscriptionVo;
+import com.fjhx.service.subscription.SubscriptionService;
+import org.springblade.core.tool.api.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 申购 前端控制器
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@RestController
+@RequestMapping("/subscription")
+public class SubscriptionController {
+
+    @Autowired
+    private SubscriptionService subscriptionService;
+
+    /**
+     * 申购分页
+     */
+    @PostMapping("/page")
+    public R page(@RequestBody Map<String, Object> condition) {
+        Page<SubscriptionEx> result = subscriptionService.getPage(condition);
+        return R.success(result);
+    }
+
+    /**
+     * 提交申购
+     */
+    @PostMapping("/submit")
+    public R add(@Validated @RequestBody SubscriptionVo subscriptionVo) {
+        subscriptionService.submit(subscriptionVo);
+        return R.success();
+    }
+
+    /**
+     * 申购明细
+     */
+    @PostMapping("/details")
+    public R details(@RequestBody BaseSelectDto dto) {
+        SubscriptionEx result = subscriptionService.details(dto.getId());
+        return R.success(result);
+    }
+
+}
+

+ 16 - 0
hx-service/syringe-management/src/main/java/com/fjhx/mapper/purchase/PurchaseDetailMapper.java

@@ -0,0 +1,16 @@
+package com.fjhx.mapper.purchase;
+
+import com.fjhx.entity.purchase.PurchaseDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 采购明细 Mapper 接口
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+public interface PurchaseDetailMapper extends BaseMapper<PurchaseDetail> {
+
+}

+ 5 - 0
hx-service/syringe-management/src/main/java/com/fjhx/mapper/purchase/PurchaseDetailMapper.xml

@@ -0,0 +1,5 @@
+<?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.mapper.purchase.PurchaseDetailMapper">
+
+</mapper>

+ 16 - 0
hx-service/syringe-management/src/main/java/com/fjhx/mapper/purchase/PurchaseMapper.java

@@ -0,0 +1,16 @@
+package com.fjhx.mapper.purchase;
+
+import com.fjhx.entity.purchase.Purchase;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 采购 Mapper 接口
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+public interface PurchaseMapper extends BaseMapper<Purchase> {
+
+}

+ 5 - 0
hx-service/syringe-management/src/main/java/com/fjhx/mapper/purchase/PurchaseMapper.xml

@@ -0,0 +1,5 @@
+<?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.mapper.purchase.PurchaseMapper">
+
+</mapper>

+ 16 - 0
hx-service/syringe-management/src/main/java/com/fjhx/mapper/subscription/SubscriptionDetailMapper.java

@@ -0,0 +1,16 @@
+package com.fjhx.mapper.subscription;
+
+import com.fjhx.entity.subscription.SubscriptionDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 申购明细 Mapper 接口
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+public interface SubscriptionDetailMapper extends BaseMapper<SubscriptionDetail> {
+
+}

+ 5 - 0
hx-service/syringe-management/src/main/java/com/fjhx/mapper/subscription/SubscriptionDetailMapper.xml

@@ -0,0 +1,5 @@
+<?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.mapper.subscription.SubscriptionDetailMapper">
+
+</mapper>

+ 16 - 0
hx-service/syringe-management/src/main/java/com/fjhx/mapper/subscription/SubscriptionMapper.java

@@ -0,0 +1,16 @@
+package com.fjhx.mapper.subscription;
+
+import com.fjhx.entity.subscription.Subscription;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 申购 Mapper 接口
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+public interface SubscriptionMapper extends BaseMapper<Subscription> {
+
+}

+ 5 - 0
hx-service/syringe-management/src/main/java/com/fjhx/mapper/subscription/SubscriptionMapper.xml

@@ -0,0 +1,5 @@
+<?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.mapper.subscription.SubscriptionMapper">
+
+</mapper>

+ 24 - 0
hx-service/syringe-management/src/main/java/com/fjhx/service/purchase/PurchaseDetailService.java

@@ -0,0 +1,24 @@
+package com.fjhx.service.purchase;
+
+import com.fjhx.base.BaseService;
+import com.fjhx.entity.purchase.PurchaseDetail;
+
+/**
+ * <p>
+ * 采购明细 服务类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+public interface PurchaseDetailService extends BaseService<PurchaseDetail> {
+
+    // Page<PurchaseDetail> getPage(Map<String, Object> condition);
+    //
+    // void add(PurchaseDetailVo purchaseDetailVo);
+    //
+    // void edit(PurchaseDetailVo purchaseDetailVo);
+    //
+    // void delete(PurchaseDetailVo purchaseDetailVo);
+
+}

+ 38 - 0
hx-service/syringe-management/src/main/java/com/fjhx/service/purchase/PurchaseService.java

@@ -0,0 +1,38 @@
+package com.fjhx.service.purchase;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.base.BaseService;
+import com.fjhx.base.Condition;
+import com.fjhx.entity.purchase.Purchase;
+import com.fjhx.params.purchase.PurchaseVo;
+import com.fjhx.params.subscription.SubscriptionDetailEx;
+
+/**
+ * <p>
+ * 采购 服务类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+public interface PurchaseService extends BaseService<Purchase> {
+
+    // Page<Purchase> getPage(Map<String, Object> condition);
+    //
+    // void add(PurchaseVo purchaseVo);
+    //
+    // void edit(PurchaseVo purchaseVo);
+    //
+    // void delete(PurchaseVo purchaseVo);
+
+    /**
+     * 带采购列表
+     */
+    Page<SubscriptionDetailEx> toBePurchasedPage(Condition condition);
+
+    /**
+     * 提交采购
+     */
+    void submit(PurchaseVo purchaseVo);
+
+}

+ 43 - 0
hx-service/syringe-management/src/main/java/com/fjhx/service/purchase/impl/PurchaseDetailServiceImpl.java

@@ -0,0 +1,43 @@
+package com.fjhx.service.purchase.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.entity.purchase.PurchaseDetail;
+import com.fjhx.mapper.purchase.PurchaseDetailMapper;
+import com.fjhx.service.purchase.PurchaseDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 采购明细 服务实现类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@Service
+public class PurchaseDetailServiceImpl extends ServiceImpl<PurchaseDetailMapper, PurchaseDetail> implements PurchaseDetailService {
+
+    // @Override
+    // public Page<PurchaseDetail> getPage(Map<String, Object> condition) {
+    //
+    //     IWrapper<PurchaseDetail> wrapper = IWrapper.getWrapper(condition);
+    //
+    //     return page(condition, wrapper);
+    // }
+    //
+    // @Override
+    // public void add(PurchaseDetailVo purchaseDetailVo) {
+    //     save(purchaseDetailVo);
+    // }
+    //
+    // @Override
+    // public void edit(PurchaseDetailVo purchaseDetailVo) {
+    //     updateById(purchaseDetailVo);
+    // }
+    //
+    // @Override
+    // public void delete(PurchaseDetailVo purchaseDetailVo) {
+    //     removeById(purchaseDetailVo.getId());
+    // }
+
+}

+ 195 - 0
hx-service/syringe-management/src/main/java/com/fjhx/service/purchase/impl/PurchaseServiceImpl.java

@@ -0,0 +1,195 @@
+package com.fjhx.service.purchase.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.base.BaseEntity;
+import com.fjhx.base.BaseIdEntity;
+import com.fjhx.base.Condition;
+import com.fjhx.entity.Material;
+import com.fjhx.entity.purchase.Purchase;
+import com.fjhx.entity.purchase.PurchaseDetail;
+import com.fjhx.entity.subscription.Subscription;
+import com.fjhx.entity.subscription.SubscriptionDetail;
+import com.fjhx.mapper.purchase.PurchaseMapper;
+import com.fjhx.params.purchase.PurchaseVo;
+import com.fjhx.params.subscription.SubscriptionDetailEx;
+import com.fjhx.service.MaterialService;
+import com.fjhx.service.purchase.PurchaseDetailService;
+import com.fjhx.service.purchase.PurchaseService;
+import com.fjhx.service.subscription.SubscriptionDetailService;
+import com.fjhx.service.subscription.SubscriptionService;
+import com.fjhx.util.CodeEnum;
+import com.fjhx.utils.PageUtil;
+import com.fjhx.utils.UserClientUtil;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 采购 服务实现类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@Service
+public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> implements PurchaseService {
+
+    @Autowired
+    private MaterialService materialService;
+
+    @Autowired
+    private PurchaseDetailService purchaseDetailService;
+
+    @Autowired
+    private SubscriptionService subscriptionService;
+
+    @Autowired
+    private SubscriptionDetailService subscriptionDetailService;
+
+    // @Override
+    // public Page<Purchase> getPage(Map<String, Object> condition) {
+    //
+    //     IWrapper<Purchase> wrapper = IWrapper.getWrapper(condition);
+    //
+    //     return page(condition, wrapper);
+    // }
+    //
+    // @Override
+    // public void add(PurchaseVo purchaseVo) {
+    //     save(purchaseVo);
+    // }
+    //
+    // @Override
+    // public void edit(PurchaseVo purchaseVo) {
+    //     updateById(purchaseVo);
+    // }
+    //
+    // @Override
+    // public void delete(PurchaseVo purchaseVo) {
+    //     removeById(purchaseVo.getId());
+    // }
+
+    @Override
+    public Page<SubscriptionDetailEx> toBePurchasedPage(Condition condition) {
+
+        LambdaQueryWrapper<SubscriptionDetail> wrapper = Wrappers.lambdaQuery();
+        wrapper.isNull(SubscriptionDetail::getPurchaseId);
+        wrapper.isNull(SubscriptionDetail::getPurchaseDetailId);
+        String keyword = condition.getKeyword();
+        if (ObjectUtil.isNotEmpty(keyword)) {
+            List<Long> materialIdList = materialService.listObj(BaseIdEntity::getId, q -> q.like(Material::getName, keyword));
+            if (materialIdList.size() == 0) {
+                return new Page<>();
+            }
+            wrapper.in(SubscriptionDetail::getMaterialId, materialIdList);
+        }
+
+        Page<SubscriptionDetail> itemPage = subscriptionDetailService.page(condition.getPage(), wrapper);
+        Page<SubscriptionDetailEx> page = PageUtil.copyPage(itemPage, SubscriptionDetailEx.class);
+        List<SubscriptionDetailEx> records = page.getRecords();
+        if (records.size() == 0) {
+            return page;
+        }
+
+        // 赋值物料属性
+        materialService.attributeAssign(records, SubscriptionDetail::getMaterialId, (item, material) -> {
+            item.setMaterialName(material.getName());
+            item.setMaterialUnit(material.getUnit());
+        });
+
+        // 赋值申购人名称
+        Map<Long, String> userNameMap = UserClientUtil.getUserNameMap(records, BaseEntity::getCreateUser);
+        records.forEach(item -> item.setUserName(userNameMap.get(item.getCreateUser())));
+
+        return page;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void submit(PurchaseVo purchaseVo) {
+        // 采购id
+        long purchaseId = IdWorker.getId();
+        List<PurchaseDetail> purchaseDetailList = purchaseVo.getPurchaseDetailList();
+
+        // 申购明细id
+        List<Long> subscriptionDetailIdList = purchaseDetailList.stream().map(PurchaseDetail::getSubscriptionDetailId).collect(Collectors.toList());
+
+        // 申购明细list
+        List<SubscriptionDetail> subscriptionDetailList = subscriptionDetailService.list(q -> q.in(BaseIdEntity::getId, subscriptionDetailIdList));
+        // 申购明细map
+        Map<Long, SubscriptionDetail> subscriptionDetailMap = subscriptionDetailList.stream().collect(Collectors.toMap(BaseIdEntity::getId, item -> item));
+
+        synchronized (this) {
+            String code = CodeEnum.SUBSCRIPTION.getCode();
+            BigDecimal purchaseTotalAmount = BigDecimal.ZERO;
+
+            for (PurchaseDetail purchaseDetail : purchaseDetailList) {
+                Long subscriptionDetailId = purchaseDetail.getSubscriptionDetailId();
+                SubscriptionDetail subscriptionDetail = subscriptionDetailMap.get(subscriptionDetailId);
+                if (subscriptionDetail == null) {
+                    throw new ServiceException("未知申购明细,id:" + subscriptionDetailId);
+                }
+
+                // 小计
+                BigDecimal totalAmount = purchaseDetail.getAmount().multiply(purchaseDetail.getQuantity());
+
+                // 赋值采购明细冗余字段
+                purchaseDetail.setId(IdWorker.getId());
+                purchaseDetail.setPurchaseId(purchaseId);
+                purchaseDetail.setPurchaseCode(code);
+                purchaseDetail.setMaterialId(subscriptionDetail.getMaterialId());
+                purchaseDetail.setQuantity(subscriptionDetail.getQuantity());
+                purchaseDetail.setTotalAmount(totalAmount);
+
+                // 统计采购总价
+                purchaseTotalAmount = purchaseTotalAmount.add(totalAmount);
+
+                subscriptionDetail.setPurchaseId(purchaseId);
+                subscriptionDetail.setPurchaseDetailId(purchaseDetail.getId());
+            }
+
+            purchaseVo.setCode(code);
+            purchaseVo.setStatus(1);
+            purchaseVo.setTotalAmount(purchaseTotalAmount);
+            // 保存采购
+            save(purchaseVo);
+        }
+        // 保存采购明细
+        purchaseDetailService.saveBatch(purchaseDetailList);
+        // 申购单赋值采购id和采购明细id
+        subscriptionDetailService.updateBatchById(subscriptionDetailList);
+
+        // 修改申购单状态
+        List<Long> subscriptionIdList = subscriptionDetailList.stream().map(SubscriptionDetail::getSubscriptionId).distinct().collect(Collectors.toList());
+        Map<Long, List<SubscriptionDetail>> kGroup = subscriptionDetailService.getKGroup(SubscriptionDetail::getSubscriptionId, q -> q.in(SubscriptionDetail::getSubscriptionId, subscriptionIdList));
+        List<Subscription> subscriptionList = new ArrayList<>();
+        kGroup.forEach((k, v) -> {
+            // 统计申购单中未采购的数量
+            long count = v.stream().map(SubscriptionDetail::getPurchaseId).filter(Objects::isNull).count();
+
+            // 未采购数量大于0,采购中,否则已完成
+            Subscription subscription = new Subscription();
+            subscription.setId(k);
+            subscription.setStatus(count > 0 ? 2 : 3);
+            subscriptionList.add(subscription);
+        });
+
+        // 修改申购状态
+        subscriptionService.updateBatchById(subscriptionList);
+    }
+
+}

+ 24 - 0
hx-service/syringe-management/src/main/java/com/fjhx/service/subscription/SubscriptionDetailService.java

@@ -0,0 +1,24 @@
+package com.fjhx.service.subscription;
+
+import com.fjhx.base.BaseService;
+import com.fjhx.entity.subscription.SubscriptionDetail;
+
+/**
+ * <p>
+ * 申购明细 服务类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+public interface SubscriptionDetailService extends BaseService<SubscriptionDetail> {
+
+    // Page<SubscriptionDetail> getPage(Map<String, Object> condition);
+    //
+    // void add(SubscriptionDetailVo subscriptionDetailVo);
+    //
+    // void edit(SubscriptionDetailVo subscriptionDetailVo);
+    //
+    // void delete(SubscriptionDetailVo subscriptionDetailVo);
+
+}

+ 36 - 0
hx-service/syringe-management/src/main/java/com/fjhx/service/subscription/SubscriptionService.java

@@ -0,0 +1,36 @@
+package com.fjhx.service.subscription;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.base.BaseService;
+import com.fjhx.entity.subscription.Subscription;
+import com.fjhx.params.subscription.SubscriptionEx;
+import com.fjhx.params.subscription.SubscriptionVo;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 申购 服务类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+public interface SubscriptionService extends BaseService<Subscription> {
+
+    /**
+     * 申购分页
+     */
+    Page<SubscriptionEx> getPage(Map<String, Object> condition);
+
+    /**
+     * 提交申购
+     */
+    void submit(SubscriptionVo subscriptionVo);
+
+    /**
+     * 申购明细
+     */
+    SubscriptionEx details(Long id);
+
+}

+ 43 - 0
hx-service/syringe-management/src/main/java/com/fjhx/service/subscription/impl/SubscriptionDetailServiceImpl.java

@@ -0,0 +1,43 @@
+package com.fjhx.service.subscription.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.entity.subscription.SubscriptionDetail;
+import com.fjhx.mapper.subscription.SubscriptionDetailMapper;
+import com.fjhx.service.subscription.SubscriptionDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 申购明细 服务实现类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@Service
+public class SubscriptionDetailServiceImpl extends ServiceImpl<SubscriptionDetailMapper, SubscriptionDetail> implements SubscriptionDetailService {
+
+    // @Override
+    // public Page<SubscriptionDetail> getPage(Map<String, Object> condition) {
+    //
+    //     IWrapper<SubscriptionDetail> wrapper = IWrapper.getWrapper(condition);
+    //
+    //     return page(condition, wrapper);
+    // }
+    //
+    // @Override
+    // public void add(SubscriptionDetailVo subscriptionDetailVo) {
+    //     save(subscriptionDetailVo);
+    // }
+    //
+    // @Override
+    // public void edit(SubscriptionDetailVo subscriptionDetailVo) {
+    //     updateById(subscriptionDetailVo);
+    // }
+    //
+    // @Override
+    // public void delete(SubscriptionDetailVo subscriptionDetailVo) {
+    //     removeById(subscriptionDetailVo.getId());
+    // }
+
+}

+ 113 - 0
hx-service/syringe-management/src/main/java/com/fjhx/service/subscription/impl/SubscriptionServiceImpl.java

@@ -0,0 +1,113 @@
+package com.fjhx.service.subscription.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.base.BaseEntity;
+import com.fjhx.entity.subscription.Subscription;
+import com.fjhx.entity.subscription.SubscriptionDetail;
+import com.fjhx.mapper.subscription.SubscriptionMapper;
+import com.fjhx.params.subscription.SubscriptionDetailEx;
+import com.fjhx.params.subscription.SubscriptionEx;
+import com.fjhx.params.subscription.SubscriptionVo;
+import com.fjhx.service.MaterialService;
+import com.fjhx.service.subscription.SubscriptionDetailService;
+import com.fjhx.service.subscription.SubscriptionService;
+import com.fjhx.util.CodeEnum;
+import com.fjhx.utils.Assert;
+import com.fjhx.utils.PageUtil;
+import com.fjhx.utils.UserClientUtil;
+import com.fjhx.utils.wrapperUtil.IWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 申购 服务实现类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2023-02-24
+ */
+@Service
+public class SubscriptionServiceImpl extends ServiceImpl<SubscriptionMapper, Subscription> implements SubscriptionService {
+
+    @Autowired
+    private SubscriptionDetailService subscriptionDetailService;
+
+    @Autowired
+    private MaterialService materialService;
+
+    @Override
+    public Page<SubscriptionEx> getPage(Map<String, Object> condition) {
+
+        IWrapper<Subscription> wrapper = IWrapper.getWrapper(condition);
+
+        wrapper.eq(Subscription::getStatus, condition.get("status"))
+                .like(Subscription::getCode, condition.get("code"));
+
+        Page<SubscriptionEx> page = PageUtil.copyPage(page(condition, wrapper), SubscriptionEx.class);
+        List<SubscriptionEx> records = page.getRecords();
+
+        if (records.size() == 0) {
+            return page;
+        }
+
+        // 赋值创建人名称
+        Map<Long, String> userNameMap = UserClientUtil.getUserNameMap(records, BaseEntity::getCreateUser);
+        for (SubscriptionEx record : records) {
+            record.setUserName(userNameMap.get(record.getCreateUser()));
+        }
+
+        return page;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void submit(SubscriptionVo subscriptionVo) {
+
+        synchronized (this) {
+            String code = CodeEnum.SUBSCRIPTION.getCode();
+            subscriptionVo.setCode(code);
+            subscriptionVo.setStatus(1);
+            save(subscriptionVo);
+        }
+
+        // 添加申购明细明细
+        List<SubscriptionDetail> subscriptionDetailList = subscriptionVo.getSubscriptionDetailList();
+        subscriptionDetailList.forEach(item -> {
+            item.setSubscriptionId(subscriptionVo.getId());
+            item.setSubscriptionCode(subscriptionVo.getCode());
+        });
+        
+        subscriptionDetailService.saveBatch(subscriptionDetailList);
+    }
+
+    @Override
+    public SubscriptionEx details(Long id) {
+        // 申购信息
+        Subscription subscription = getById(id);
+        Assert.notEmpty(subscription, "没有找到此申购单");
+        SubscriptionEx result = BeanUtil.toBean(subscription, SubscriptionEx.class);
+
+        // 赋值申购人名称
+        String userName = UserClientUtil.getUserName(subscription.getCreateUser());
+        result.setUserName(userName);
+
+        // 赋值申购明细
+        List<SubscriptionDetail> list = subscriptionDetailService.list(q -> q.eq(SubscriptionDetail::getSubscriptionId, id));
+        List<SubscriptionDetailEx> subscriptionDetailExList = BeanUtil.copyToList(list, SubscriptionDetailEx.class);
+
+        materialService.attributeAssign(subscriptionDetailExList, SubscriptionDetail::getMaterialId, (item, material) -> {
+            item.setMaterialName(material.getName());
+            item.setMaterialUnit(material.getUnit());
+        });
+
+        return result;
+    }
+
+}

+ 99 - 0
hx-service/syringe-management/src/main/java/com/fjhx/util/CodeEnum.java

@@ -0,0 +1,99 @@
+package com.fjhx.util;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUtil;
+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.service.purchase.PurchaseService;
+import com.fjhx.service.subscription.SubscriptionService;
+import com.fjhx.utils.Assert;
+import lombok.Getter;
+
+import java.util.Date;
+import java.util.Map;
+
+@Getter
+public enum CodeEnum {
+
+    // 申购单号
+    SUBSCRIPTION("SUB", null, "code", 5, SubscriptionService.class),
+    // 采购单号
+    PURCHASE("PUR", null, "code", 5, PurchaseService.class),
+
+    ;
+
+    CodeEnum(String prefix, String dateFormat, String codeFieldName, Integer length, Class<? extends IService<?>> serviceCls) {
+        this.prefix = prefix;
+        this.dateFormat = dateFormat;
+        this.length = length;
+        this.codeFieldName = codeFieldName;
+        this.service = SpringUtil.getBean(serviceCls);
+    }
+
+    // 编码前缀
+    private final String prefix;
+    // 编码加日期规则
+    private final String dateFormat;
+    // 长度
+    private final Integer length;
+    // 编码字段名
+    private final String codeFieldName;
+    // service
+    private final IService<?> service;
+
+    /**
+     * 获取键值对
+     */
+    public String getCode() {
+        String itemPrefix;
+
+        if (ObjectUtil.isNotEmpty(dateFormat)) {
+            Date date = new Date();
+            String format = DateUtil.format(date, dateFormat);
+            itemPrefix = prefix + format;
+        } else {
+            itemPrefix = prefix;
+        }
+
+        Object obj = service.query()
+                .likeRight(codeFieldName, itemPrefix)
+                .orderByDesc(codeFieldName)
+                .last("limit 1")
+                .one();
+
+        if (obj == null) {
+            return itemPrefix + autoGenericCode(length, 0);
+        }
+
+        Map<String, Object> map = Convert.toMap(String.class, Object.class, obj);
+
+        String code = Convert.toStr(map.get(CharSequenceUtil.toCamelCase(codeFieldName)));
+        Integer codeNum = Convert.toInt(code.substring(itemPrefix.length()));
+        Assert.notEmpty(codeNum, "自定义编码与系统编码生成规则冲突,暂时无法生成编码,请联系管理员");
+
+        return itemPrefix + autoGenericCode(length, codeNum);
+    }
+
+    /**
+     * 获取键值对
+     */
+    public String getCode(String code) {
+        if (ObjectUtil.isNotEmpty(code)) {
+            Long count = service.query().eq(codeFieldName, code).count();
+            Assert.eqZero(count, "编码已存在");
+            return code;
+        } else {
+            return getCode();
+        }
+    }
+
+    /**
+     * 不够位数的在前面补0,保留num的长度位数字
+     */
+    private static String autoGenericCode(int length, Integer codeNum) {
+        return String.format("%0" + length + "d", codeNum + 1);
+    }
+
+}

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

@@ -28,21 +28,6 @@ public class AbnormalDetailsController {
     @Autowired
     private AbnormalDetailsService abnormalDetailsService;
 
-
-//
-//    @PostMapping("/edit")
-//    public R edit(@RequestBody AbnormalDetailsVo abnormalDetailsVo){
-//        abnormalDetailsService.edit(abnormalDetailsVo);
-//        return R.success();
-//    }
-//
-//    @PostMapping("/delete")
-//    public R delete(@RequestBody AbnormalDetailsVo abnormalDetailsVo){
-//        abnormalDetailsService.delete(abnormalDetailsVo);
-//        return R.success();
-//    }
-
-
     @PostMapping("/page")
     public R page(@RequestBody Condition condition) {
         Page<Map<String, Object>> result = abnormalDetailsService.getPage(condition);

+ 8 - 28
hx-service/victoriatourist/src/main/java/com/fjhx/controller/abnormal/AbnormalInfoController.java

@@ -1,18 +1,16 @@
 package com.fjhx.controller.abnormal;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.springblade.core.tool.api.R;
-import com.fjhx.entity.abnormal.AbnormalInfo;
-import com.fjhx.params.abnormal.AbnormalInfoVo;
+import com.fjhx.params.abnormal.AbnormalInfoEx;
+import com.fjhx.params.abnormal.AbnormalPageDto;
 import com.fjhx.service.abnormal.AbnormalInfoService;
+import org.springblade.core.tool.api.R;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.Map;
-
 /**
  * <p>
  * 异常记录 前端控制器
@@ -28,29 +26,11 @@ public class AbnormalInfoController {
     @Autowired
     private AbnormalInfoService abnormalInfoService;
 
-//    @PostMapping("/page")
-//    public R page(@RequestBody Map<String, Object> condition){
-//        Page<AbnormalInfo> result = abnormalInfoService.getPage(condition);
-//        return R.success(result);
-//    }
-//
-//    @PostMapping("/add")
-//    public R add(@RequestBody AbnormalInfoVo abnormalInfoVo){
-//        abnormalInfoService.add(abnormalInfoVo);
-//        return R.success();
-//    }
-//
-//    @PostMapping("/edit")
-//    public R edit(@RequestBody AbnormalInfoVo abnormalInfoVo){
-//        abnormalInfoService.edit(abnormalInfoVo);
-//        return R.success();
-//    }
-//
-//    @PostMapping("/delete")
-//    public R delete(@RequestBody AbnormalInfoVo abnormalInfoVo){
-//        abnormalInfoService.delete(abnormalInfoVo);
-//        return R.success();
-//    }
+    @PostMapping("/page")
+    public R page(@RequestBody AbnormalPageDto dto) {
+        Page<AbnormalInfoEx> result = abnormalInfoService.getPage(dto);
+        return R.success(result);
+    }
 
 }
 

+ 0 - 4
hx-service/victoriatourist/src/main/java/com/fjhx/service/abnormal/AbnormalDetailsService.java

@@ -22,8 +22,4 @@ public interface AbnormalDetailsService extends BaseService<AbnormalDetails> {
 
     void add(AbnormalDetailsVo abnormalDetailsVo);
 
-    void edit(AbnormalDetailsVo abnormalDetailsVo);
-
-    void delete(AbnormalDetailsVo abnormalDetailsVo);
-
 }

+ 4 - 10
hx-service/victoriatourist/src/main/java/com/fjhx/service/abnormal/AbnormalInfoService.java

@@ -1,11 +1,10 @@
 package com.fjhx.service.abnormal;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.entity.abnormal.AbnormalInfo;
-import com.fjhx.params.abnormal.AbnormalInfoVo;
 import com.fjhx.base.BaseService;
-
-import java.util.Map;
+import com.fjhx.entity.abnormal.AbnormalInfo;
+import com.fjhx.params.abnormal.AbnormalInfoEx;
+import com.fjhx.params.abnormal.AbnormalPageDto;
 
 /**
  * <p>
@@ -17,12 +16,7 @@ import java.util.Map;
  */
 public interface AbnormalInfoService extends BaseService<AbnormalInfo> {
 
-    Page<AbnormalInfo> getPage(Map<String, Object> condition);
-
-    void add(AbnormalInfoVo abnormalInfoVo);
-
-    void edit(AbnormalInfoVo abnormalInfoVo);
+    Page<AbnormalInfoEx> getPage(AbnormalPageDto dto);
 
-    void delete(AbnormalInfoVo abnormalInfoVo);
 
 }

+ 5 - 19
hx-service/victoriatourist/src/main/java/com/fjhx/service/abnormal/impl/AbnormalDetailsServiceImpl.java

@@ -46,9 +46,7 @@ public class AbnormalDetailsServiceImpl extends ServiceImpl<AbnormalDetailsMappe
         if (records.size() == 0) {
             return page;
         }
-
         UserClientUtil.setUserName(records, "createUser", "createUserName");
-
         return page;
     }
 
@@ -57,27 +55,15 @@ public class AbnormalDetailsServiceImpl extends ServiceImpl<AbnormalDetailsMappe
         Long abnormalInfoId = abnormalDetailsVo.getAbnormalInfoId();
         Assert.notEmpty(abnormalInfoId, "异常管理id不能为空");
         Assert.notEmpty(abnormalDetailsVo.getExplain(), "异常说明不能为空");
-
         Integer status = abnormalDetailsVo.getStatus();
+        Assert.notEmpty(status, "处理状态不能为空");
 
-        if (StatusConstant.YES.equals(status)) {
-            AbnormalInfo abnormalInfo = new AbnormalInfo();
-            abnormalInfo.setId(abnormalInfoId);
-            abnormalInfo.setStatus(StatusConstant.YES);
-            abnormalInfoService.updateById(abnormalInfo);
-        }
+        AbnormalInfo abnormalInfo = new AbnormalInfo();
+        abnormalInfo.setId(abnormalInfoId);
+        abnormalInfo.setStatus(StatusConstant.YES.equals(status) ? 2 : 1);
+        abnormalInfoService.updateById(abnormalInfo);
 
         save(abnormalDetailsVo);
     }
 
-    @Override
-    public void edit(AbnormalDetailsVo abnormalDetailsVo) {
-        updateById(abnormalDetailsVo);
-    }
-
-    @Override
-    public void delete(AbnormalDetailsVo abnormalDetailsVo) {
-        removeById(abnormalDetailsVo.getId());
-    }
-
 }

+ 24 - 17
hx-service/victoriatourist/src/main/java/com/fjhx/service/abnormal/impl/AbnormalInfoServiceImpl.java

@@ -1,14 +1,19 @@
 package com.fjhx.service.abnormal.impl;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.base.BaseEntity;
 import com.fjhx.entity.abnormal.AbnormalInfo;
-import com.fjhx.params.abnormal.AbnormalInfoVo;
 import com.fjhx.mapper.abnormal.AbnormalInfoMapper;
+import com.fjhx.params.abnormal.AbnormalInfoEx;
+import com.fjhx.params.abnormal.AbnormalPageDto;
 import com.fjhx.service.abnormal.AbnormalInfoService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.utils.PageUtil;
+import com.fjhx.utils.UserClientUtil;
 import com.fjhx.utils.wrapperUtil.IWrapper;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -23,26 +28,28 @@ import java.util.Map;
 public class AbnormalInfoServiceImpl extends ServiceImpl<AbnormalInfoMapper, AbnormalInfo> implements AbnormalInfoService {
 
     @Override
-    public Page<AbnormalInfo> getPage(Map<String, Object> condition) {
+    public Page<AbnormalInfoEx> getPage(AbnormalPageDto dto) {
 
-        IWrapper<AbnormalInfo> wrapper = IWrapper.getWrapper(condition);
+        IWrapper<AbnormalInfo> wrapper = IWrapper.getWrapper(dto);
 
-        return page(condition, wrapper);
-    }
+        wrapper.eq(AbnormalInfo::getType, dto.getType())
+                .eq(AbnormalInfo::getStatus, dto.getStatus())
+                .like(AbnormalInfo::getTitle, dto.getKeyword());
 
-    @Override
-    public void add(AbnormalInfoVo abnormalInfoVo) {
-        save(abnormalInfoVo);
-    }
+        Page<AbnormalInfo> itemPage = page(dto.getPage(), wrapper);
+        Page<AbnormalInfoEx> page = PageUtil.copyPage(itemPage, AbnormalInfoEx.class);
+        List<AbnormalInfoEx> records = page.getRecords();
 
-    @Override
-    public void edit(AbnormalInfoVo abnormalInfoVo) {
-        updateById(abnormalInfoVo);
-    }
+        if (records.size() == 0) {
+            records.add(new AbnormalInfoEx());
+            return page;
+        }
 
-    @Override
-    public void delete(AbnormalInfoVo abnormalInfoVo) {
-        removeById(abnormalInfoVo.getId());
+        Map<Long, String> userNameMap = UserClientUtil.getUserNameMap(records, BaseEntity::getUpdateUser);
+
+        records.forEach(item -> item.setUserName(userNameMap.get(item.getUpdateUser())));
+
+        return page;
     }
 
 }