Эх сурвалжийг харах

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/impl/ArrivalServiceImpl.java
#	hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeServiceImpl.java
caozj 2 жил өмнө
parent
commit
b36a8093a9
55 өөрчлөгдсөн 918 нэмэгдсэн , 47 устгасан
  1. 0 1
      hx-account/src/main/java/com/fjhx/account/entity/account/enums/PaymentStatusEnum.java
  2. 3 1
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentServiceImpl.java
  3. 6 1
      hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductInfoSelectDto.java
  4. 4 0
      hx-item/src/main/java/com/fjhx/item/service/product/ProductClassifyService.java
  5. 24 6
      hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductClassifyServiceImpl.java
  6. 26 13
      hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java
  7. 25 1
      hx-mes/src/main/java/com/fjhx/mes/controller/production/ProductionTaskDetailController.java
  8. 19 0
      hx-mes/src/main/java/com/fjhx/mes/controller/production/ProductionTaskDetailRecordController.java
  9. 17 0
      hx-mes/src/main/java/com/fjhx/mes/entity/production/dto/ProductionTaskDetailRecordDto.java
  10. 17 0
      hx-mes/src/main/java/com/fjhx/mes/entity/production/dto/ProductionTaskDetailRecordSelectDto.java
  11. 13 0
      hx-mes/src/main/java/com/fjhx/mes/entity/production/po/ProductionTaskDetail.java
  12. 37 0
      hx-mes/src/main/java/com/fjhx/mes/entity/production/po/ProductionTaskDetailRecord.java
  13. 17 0
      hx-mes/src/main/java/com/fjhx/mes/entity/production/vo/ProductionTaskDetailRecordVo.java
  14. 10 1
      hx-mes/src/main/java/com/fjhx/mes/mapper/production/ProductionTaskDetailMapper.java
  15. 17 0
      hx-mes/src/main/java/com/fjhx/mes/mapper/production/ProductionTaskDetailRecordMapper.java
  16. 17 0
      hx-mes/src/main/java/com/fjhx/mes/service/production/ProductionTaskDetailRecordService.java
  17. 15 1
      hx-mes/src/main/java/com/fjhx/mes/service/production/ProductionTaskDetailService.java
  18. 21 0
      hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskDetailRecordServiceImpl.java
  19. 129 3
      hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskDetailServiceImpl.java
  20. 26 10
      hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskServiceImpl.java
  21. 1 1
      hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderServiceImpl.java
  22. 18 0
      hx-mes/src/main/resources/mapper/production/ProductionTaskDetailMapper.xml
  23. 4 0
      hx-mes/src/main/resources/mapper/production/ProductionTaskDetailRecordMapper.xml
  24. 8 0
      hx-purchase/src/main/java/com/fjhx/purchase/controller/subscribe/SubscribeController.java
  25. 5 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/vo/ArrivalDetailVo.java
  26. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/vo/PurchaseDetailVo.java
  27. 7 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/vo/PurchaseVo.java
  28. 5 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/dto/SubscribeDetailSelectDto.java
  29. 6 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/po/SubscribeDetail.java
  30. 5 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/vo/SubscribeDetailVo.java
  31. 6 0
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/arrival/ArrivalDetailMapper.java
  32. 3 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/ArrivalDetailService.java
  33. 5 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/impl/ArrivalDetailServiceImpl.java
  34. 12 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/impl/ArrivalServiceImpl.java
  35. 8 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/SubscribeService.java
  36. 5 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeDetailServiceImpl.java
  37. 32 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeServiceImpl.java
  38. 9 0
      hx-purchase/src/main/resources/mapper/arrival/ArrivalDetailMapper.xml
  39. 3 1
      hx-purchase/src/main/resources/mapper/subscribe/SubscribeDetailMapper.xml
  40. 0 0
      hx-sale/src/main/java/com/fjhx/sale/a-json/ContractBudgetApi.json
  41. 8 0
      hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractController.java
  42. 10 0
      hx-sale/src/main/java/com/fjhx/sale/controller/serviceContract/ServiceContractController.java
  43. 6 1
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/Contract.java
  44. 28 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractSelectDto.java
  45. 13 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/po/ServiceContract.java
  46. 5 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java
  47. 38 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java
  48. 6 0
      hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/ServiceContractService.java
  49. 61 0
      hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/impl/ServiceContractServiceImpl.java
  50. 6 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/controller/deliver/DeliverGoodsController.java
  51. 5 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/deliver/vo/DeliverGoodsDetailsVo.java
  52. 3 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/mapper/deliver/DeliverGoodsMapper.java
  53. 7 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/deliver/DeliverGoodsService.java
  54. 104 6
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/deliver/impl/DeliverGoodsServiceImpl.java
  55. 16 0
      hx-victoriatourist/src/main/resources/mapper/deliver/DeliverGoodsMapper.xml

+ 0 - 1
hx-account/src/main/java/com/fjhx/account/entity/account/enums/PaymentStatusEnum.java

@@ -9,7 +9,6 @@ import java.util.Map;
 public enum PaymentStatusEnum {
     UNDER_REVIEW("10", "未打款"),
     REJECT("20", "已打款"),
-
     ;
     private String key;
 

+ 3 - 1
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentServiceImpl.java

@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.account.entity.account.dto.AccountPaymentDto;
 import com.fjhx.account.entity.account.dto.AccountRequestFundsSelectDto;
+import com.fjhx.account.entity.account.enums.PaymentStatusEnum;
 import com.fjhx.account.entity.account.po.AccountManagement;
 import com.fjhx.account.entity.account.po.AccountPayment;
 import com.fjhx.account.entity.account.po.AccountRemainder;
@@ -151,7 +152,8 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
         if (accountRemainder.getRemainder().compareTo(accountPaymentDto.getAmount()) == -1){
             throw new ServiceException("账户余额不足");
         }
-
+        //TODO 只要发起就是已打款(后期可能要修改)
+        accountRemainder.setStatus(PaymentStatusEnum.REJECT.getKey());
         if (ObjectUtil.isEmpty(accountPaymentDto.getId())){
             this.save(accountPaymentDto);
         }else {

+ 6 - 1
hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductInfoSelectDto.java

@@ -76,7 +76,7 @@ public class ProductInfoSelectDto extends BaseSelectDto {
     private String name;
 
     /**
-     * 产品名称
+     * 产品英文名称
      */
     private String englishName;
 
@@ -91,4 +91,9 @@ public class ProductInfoSelectDto extends BaseSelectDto {
      */
     private String barCode;
 
+    /**
+     * 海关编号
+     */
+    private String customsCode;
+
 }

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

@@ -38,5 +38,9 @@ public interface ProductClassifyService extends BaseService<ProductClassify> {
      */
     void delete(Long id);
 
+    /**
+     * 获取子集id
+     */
+    List<Long> getChildIdList(long classifyId);
 
 }

+ 24 - 6
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductClassifyServiceImpl.java

@@ -3,25 +3,21 @@ package com.fjhx.item.service.product.impl;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.item.entity.product.dto.ProductClassifyDto;
 import com.fjhx.item.entity.product.po.ProductClassify;
 import com.fjhx.item.mapper.product.ProductClassifyMapper;
 import com.fjhx.item.service.product.ProductClassifyService;
-import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.exception.ServiceException;
-import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.TreeUtil;
 import com.ruoyi.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Arrays;
+import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
+import java.util.Objects;
 
 
 /**
@@ -90,6 +86,28 @@ public class ProductClassifyServiceImpl extends ServiceImpl<ProductClassifyMappe
     public void delete(Long id) {
         this.removeById(id);
     }
+
+    @Override
+    public List<Long> getChildIdList(long classifyId) {
+        List<Long> idList = new ArrayList<>();
+        idList.add(classifyId);
+
+        recursionSetChildId(idList, list(), classifyId);
+        return idList;
+    }
+
+    /**
+     * 递归赋值子集id
+     */
+    private void recursionSetChildId(List<Long> idList, List<ProductClassify> list, Long id) {
+        for (ProductClassify productClassify : list) {
+            if (Objects.equals(id, productClassify.getParentId())) {
+                idList.add(productClassify.getId());
+                recursionSetChildId(idList, list, productClassify.getId());
+            }
+        }
+    }
+
     /**
      * 保证同级名称不重复
      */

+ 26 - 13
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java

@@ -8,7 +8,6 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -43,7 +42,6 @@ import com.ruoyi.common.utils.wrapper.SqlField;
 import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.utils.UserUtil;
 import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.ListUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
@@ -68,8 +66,10 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
 
     @Autowired
     private ProductClassifyService productClassifyService;
+
     @Autowired
     private ISysDeptService sysDeptService;
+
     @Autowired
     private CustomerService customerService;
 
@@ -82,15 +82,21 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
         wrapper.orderByDesc("pi", ProductInfo::getId);
         wrapper.eq("pi", ProductInfo::getType, dto.getType());
         wrapper.eq("pi", ProductInfo::getDefinition, dto.getDefinition());
-        wrapper.eq("pi", ProductInfo::getProductClassifyId, dto.getProductClassifyId());
-        wrapper.like("pi",ProductInfo::getName,dto.getName());
-        wrapper.like("pi",ProductInfo::getCustomCode,dto.getCustomCode());
-        wrapper.like("pi",ProductInfo::getBarCode,dto.getBarCode());
-        wrapper.like("json_unquote(standard_json->'$.englishName')",dto.getEnglishName());
-//        wrapper.keyword(dto,
-//                new SqlField("pi", ProductInfo::getName),
-//                new SqlField("pi", ProductInfo::getCode),
-//                new SqlField("pi", ProductInfo::getCustomCode)
+
+        if (dto.getProductClassifyId() != null) {
+            List<Long> childIdList = productClassifyService.getChildIdList(dto.getProductClassifyId());
+            wrapper.in("pi", ProductInfo::getProductClassifyId, childIdList);
+        }
+
+        wrapper.like("pi", ProductInfo::getName, dto.getName());
+        wrapper.like("pi", ProductInfo::getCustomCode, dto.getCustomCode());
+        wrapper.like("pi", ProductInfo::getBarCode, dto.getBarCode());
+        wrapper.like("json_unquote(standard_json->'$.englishName')", dto.getEnglishName());
+        wrapper.like("json_unquote(standard_json->'$.customsCode')", dto.getCustomsCode());
+        //        wrapper.keyword(dto,
+        //                new SqlField("pi", ProductInfo::getName),
+        //                new SqlField("pi", ProductInfo::getCode),
+        //                new SqlField("pi", ProductInfo::getCustomCode)
 //        );
         //计算并根据生命周期过滤
         wrapper.eq("IF(DATEDIFF(now(),pi.create_time)> json_unquote( victoriatourist_json -> '$.growUpDay' ),3,IF( DATEDIFF(now(),pi.create_time)> json_unquote( victoriatourist_json -> '$.newProductsDay' ), 2, 1 ))", dto.getLifeCycle());
@@ -131,16 +137,23 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
 
     @Override
     public Page<ProductInfoVo> getPageByWdly(ProductInfoSelectDto dto) {
+
+
         IWrapper<ProductInfo> wrapper = getWrapper();
         wrapper.orderByDesc("pi", ProductInfo::getId);
         wrapper.eq("pi", ProductInfo::getType, dto.getType());
         wrapper.eq("pi", ProductInfo::getDefinition, dto.getDefinition());
-        wrapper.eq("pi", ProductInfo::getProductClassifyId, dto.getProductClassifyId());
+
+        if (dto.getProductClassifyId() != null) {
+            List<Long> childId = productClassifyService.getChildIdList(dto.getProductClassifyId());
+            wrapper.in("pi", ProductInfo::getProductClassifyId, childId);
+        }
+
         wrapper.keyword(dto,
                 new SqlField("pi", ProductInfo::getName),
                 new SqlField("pi", ProductInfo::getCustomCode)
         );
-        //计算并根据生命周期过滤
+        // 计算并根据生命周期过滤
         wrapper.eq("IF(DATEDIFF(now(),pi.create_time)> json_unquote( victoriatourist_json -> '$.growUpDay' ),3,IF( DATEDIFF(now(),pi.create_time)> json_unquote( victoriatourist_json -> '$.newProductsDay' ), 2, 1 ))", dto.getLifeCycle());
         wrapper.eq("json_unquote( victoriatourist_json -> '$.combination' )", dto.getCombination());
         Page<ProductInfoVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);

+ 25 - 1
hx-mes/src/main/java/com/fjhx/mes/controller/production/ProductionTaskDetailController.java

@@ -1,6 +1,12 @@
 package com.fjhx.mes.controller.production;
 
 import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.mes.entity.production.vo.ProductionTaskDetailVo;
+import com.fjhx.mes.entity.production.dto.ProductionTaskDetailSelectDto;
+import com.fjhx.mes.entity.production.dto.ProductionTaskDetailDto;
+import com.fjhx.mes.service.production.ProductionTaskDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
 
 
 /**
@@ -9,11 +15,29 @@ import org.springframework.web.bind.annotation.*;
  * </p>
  *
  * @author 
- * @since 2023-05-17
+ * @since 2023-05-18
  */
 @RestController
 @RequestMapping("/productionTaskDetail")
 public class ProductionTaskDetailController {
 
+    @Autowired
+    private ProductionTaskDetailService productionTaskDetailService;
+
+    /**
+     * 生产任务明细分页
+     */
+    @PostMapping("/page")
+    public Page<ProductionTaskDetailVo> page(@RequestBody ProductionTaskDetailSelectDto dto) {
+        return productionTaskDetailService.getPage(dto);
+    }
+
+    /**
+     * 生产任务明细编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody ProductionTaskDetailDto productionTaskDetailDto) {
+        productionTaskDetailService.edit(productionTaskDetailDto);
+    }
 
 }

+ 19 - 0
hx-mes/src/main/java/com/fjhx/mes/controller/production/ProductionTaskDetailRecordController.java

@@ -0,0 +1,19 @@
+package com.fjhx.mes.controller.production;
+
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * <p>
+ * 任务明细记录 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-18
+ */
+@RestController
+@RequestMapping("/productionTaskDetailRecord")
+public class ProductionTaskDetailRecordController {
+
+
+}

+ 17 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/production/dto/ProductionTaskDetailRecordDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.mes.entity.production.dto;
+
+import com.fjhx.mes.entity.production.po.ProductionTaskDetailRecord;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 任务明细记录新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-05-18
+ */
+@Getter
+@Setter
+public class ProductionTaskDetailRecordDto extends ProductionTaskDetailRecord {
+
+}

+ 17 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/production/dto/ProductionTaskDetailRecordSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.mes.entity.production.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 任务明细记录列表查询入参实体
+ *
+ * @author 
+ * @since 2023-05-18
+ */
+@Getter
+@Setter
+public class ProductionTaskDetailRecordSelectDto extends BaseSelectDto {
+
+}

+ 13 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/production/po/ProductionTaskDetail.java

@@ -54,4 +54,17 @@ public class ProductionTaskDetail extends BasePo {
      */
     private Long personLiableId;
 
+    /**
+     * 下一工序id
+     */
+    private Long nextProductionProcessesId;
+    /**
+     * 流转人id
+     */
+    private Long circulationUserId;
+    /**
+     * 流转状态
+     */
+    private Integer circulationStatus;
+
 }

+ 37 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/production/po/ProductionTaskDetailRecord.java

@@ -0,0 +1,37 @@
+package com.fjhx.mes.entity.production.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 任务明细记录
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-18
+ */
+@Getter
+@Setter
+@TableName("production_task_detail_record")
+public class ProductionTaskDetailRecord extends BasePo {
+
+    /**
+     * 任务明细id
+     */
+    private Long productionTaskDetailId;
+
+    /**
+     * 工序id
+     */
+    private Long productionProcessesId;
+
+    /**
+     * 负责人id
+     */
+    private Long personLiableId;
+
+}

+ 17 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/production/vo/ProductionTaskDetailRecordVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.mes.entity.production.vo;
+
+import com.fjhx.mes.entity.production.po.ProductionTaskDetailRecord;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 任务明细记录列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-05-18
+ */
+@Getter
+@Setter
+public class ProductionTaskDetailRecordVo extends ProductionTaskDetailRecord {
+
+}

+ 10 - 1
hx-mes/src/main/java/com/fjhx/mes/mapper/production/ProductionTaskDetailMapper.java

@@ -2,6 +2,10 @@ package com.fjhx.mes.mapper.production;
 
 import com.fjhx.mes.entity.production.po.ProductionTaskDetail;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.mes.entity.production.vo.ProductionTaskDetailVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
 
 
 /**
@@ -10,8 +14,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * </p>
  *
  * @author 
- * @since 2023-05-17
+ * @since 2023-05-18
  */
 public interface ProductionTaskDetailMapper extends BaseMapper<ProductionTaskDetail> {
 
+    /**
+     * 生产任务明细分页
+     */
+    Page<ProductionTaskDetailVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ProductionTaskDetail> wrapper);
+
 }

+ 17 - 0
hx-mes/src/main/java/com/fjhx/mes/mapper/production/ProductionTaskDetailRecordMapper.java

@@ -0,0 +1,17 @@
+package com.fjhx.mes.mapper.production;
+
+import com.fjhx.mes.entity.production.po.ProductionTaskDetailRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * <p>
+ * 任务明细记录 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-18
+ */
+public interface ProductionTaskDetailRecordMapper extends BaseMapper<ProductionTaskDetailRecord> {
+
+}

+ 17 - 0
hx-mes/src/main/java/com/fjhx/mes/service/production/ProductionTaskDetailRecordService.java

@@ -0,0 +1,17 @@
+package com.fjhx.mes.service.production;
+
+import com.fjhx.mes.entity.production.po.ProductionTaskDetailRecord;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * 任务明细记录 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-18
+ */
+public interface ProductionTaskDetailRecordService extends BaseService<ProductionTaskDetailRecord> {
+
+}

+ 15 - 1
hx-mes/src/main/java/com/fjhx/mes/service/production/ProductionTaskDetailService.java

@@ -2,6 +2,10 @@ package com.fjhx.mes.service.production;
 
 import com.fjhx.mes.entity.production.po.ProductionTaskDetail;
 import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.mes.entity.production.vo.ProductionTaskDetailVo;
+import com.fjhx.mes.entity.production.dto.ProductionTaskDetailSelectDto;
+import com.fjhx.mes.entity.production.dto.ProductionTaskDetailDto;
 
 
 /**
@@ -10,8 +14,18 @@ import com.ruoyi.common.core.service.BaseService;
  * </p>
  *
  * @author 
- * @since 2023-05-17
+ * @since 2023-05-18
  */
 public interface ProductionTaskDetailService extends BaseService<ProductionTaskDetail> {
 
+    /**
+     * 生产任务明细分页
+     */
+    Page<ProductionTaskDetailVo> getPage(ProductionTaskDetailSelectDto dto);
+
+    /**
+     * 生产任务明细编辑
+     */
+    void edit(ProductionTaskDetailDto productionTaskDetailDto);
+
 }

+ 21 - 0
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskDetailRecordServiceImpl.java

@@ -0,0 +1,21 @@
+package com.fjhx.mes.service.production.impl;
+
+import com.fjhx.mes.entity.production.po.ProductionTaskDetailRecord;
+import com.fjhx.mes.mapper.production.ProductionTaskDetailRecordMapper;
+import com.fjhx.mes.service.production.ProductionTaskDetailRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ * 任务明细记录 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-18
+ */
+@Service
+public class ProductionTaskDetailRecordServiceImpl extends ServiceImpl<ProductionTaskDetailRecordMapper, ProductionTaskDetailRecord> implements ProductionTaskDetailRecordService {
+
+}

+ 129 - 3
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskDetailServiceImpl.java

@@ -1,21 +1,147 @@
 package com.fjhx.mes.service.production.impl;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.mes.entity.applicable.po.ApplicableProducts;
+import com.fjhx.mes.entity.production.dto.ProductionTaskDetailDto;
+import com.fjhx.mes.entity.production.dto.ProductionTaskDetailSelectDto;
+import com.fjhx.mes.entity.production.po.ProductionPlan;
+import com.fjhx.mes.entity.production.po.ProductionTask;
 import com.fjhx.mes.entity.production.po.ProductionTaskDetail;
+import com.fjhx.mes.entity.production.po.ProductionTaskDetailRecord;
+import com.fjhx.mes.entity.production.vo.ProductionTaskDetailVo;
+import com.fjhx.mes.entity.technology.po.Technology;
+import com.fjhx.mes.entity.work.po.WorkOrder;
+import com.fjhx.mes.entity.work.po.WorkOrderProductionProcesses;
 import com.fjhx.mes.mapper.production.ProductionTaskDetailMapper;
+import com.fjhx.mes.service.production.ProductionPlanService;
+import com.fjhx.mes.service.production.ProductionTaskDetailRecordService;
 import com.fjhx.mes.service.production.ProductionTaskDetailService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.mes.service.production.ProductionTaskService;
+import com.fjhx.mes.service.work.WorkOrderProductionProcessesService;
+import com.fjhx.mes.service.work.WorkOrderService;
+import com.obs.services.internal.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 
 /**
  * <p>
  * 生产任务明细 服务实现类
  * </p>
  *
- * @author 
- * @since 2023-05-17
+ * @author
+ * @since 2023-05-18
  */
 @Service
 public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskDetailMapper, ProductionTaskDetail> implements ProductionTaskDetailService {
+    @Autowired
+    private ProductionTaskDetailRecordService productionTaskDetailRecordService;
+    @Autowired
+    private ProductionTaskService productionTaskService;
+    @Autowired
+    private ProductionPlanService productionPlanService;
+    @Autowired
+    private WorkOrderService workOrderService;
+    @Autowired
+    private WorkOrderProductionProcessesService workOrderProductionProcessesService;
+
+    @Override
+    public Page<ProductionTaskDetailVo> getPage(ProductionTaskDetailSelectDto dto) {
+        IWrapper<ProductionTaskDetail> wrapper = getWrapper();
+        //过滤负责人为自己的任务
+        wrapper.eq(ProductionTaskDetail::getPersonLiableId, SecurityUtils.getUserId());
+        wrapper.orderByDesc("ptd", ProductionTaskDetail::getId);
+        Page<ProductionTaskDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public void edit(ProductionTaskDetailDto productionTaskDetailDto) {
+        this.updateById(productionTaskDetailDto);
+    }
+
+    /**
+     * 任务流转
+     */
+    public void circulation(ProductionTaskDetailDto productionTaskDetailDto) {
+        //修改流转状态
+        productionTaskDetailDto.setCirculationStatus(1);
+        //赋值流转人id
+        productionTaskDetailDto.setCirculationUserId(SecurityUtils.getUserId());
+        this.updateById(productionTaskDetailDto);
+    }
+
+    /**
+     * 任务流转接收
+     */
+    public void receive(ProductionTaskDetailDto productionTaskDetailDto) {
+        //修改流转状态
+        productionTaskDetailDto.setCirculationStatus(0);
+        //将下一工序赋值到当前工序
+        productionTaskDetailDto.setProductionProcessesId(productionTaskDetailDto.getNextProductionProcessesId());
+        //将负责人赋值为接收人id
+        productionTaskDetailDto.setPersonLiableId(SecurityUtils.getUserId());
+
+        //赋值下一工序相关信息
+//        ProductionTask productionTask = productionTaskService.getById(productionTaskDetailDto.getProductionTaskId());
+//        ProductionPlan productionPlan = productionPlanService.getById(productionTask.getProductionPlanId());
+//        WorkOrder workOrder = workOrderService.getById(productionPlan.getWorkOrderId());
+//        if ("1".equals(workOrder.getIsCustomized())) {
+//            List<WorkOrderProductionProcesses> workOrderProductionProcesses = workOrderProductionProcessesService.list(q -> q
+//                    .eq(WorkOrderProductionProcesses::getWorkOrderId, workOrder.getId())
+//                    .orderByAsc(WorkOrderProductionProcesses::getSort));
+//            if (ObjectUtil.isEmpty(workOrderProductionProcesses)) {
+//                throw new ServiceException("定制工单 工序列表为空");
+//            }
+//
+//            for (int i = 0; i < workOrderProductionProcesses.size(); i++) {
+//                WorkOrderProductionProcesses wopp = workOrderProductionProcesses.get(i);
+//                if(wopp.getId().equals(productionTaskDetailDto.getProductionProcessesId())){
+//
+//                }
+//            }
+//
+//            productionProcessesId = workOrderProductionProcesses.get(0).getId();
+//            //赋值下一工序id
+//            if (workOrderProductionProcesses.size() > 1) {
+//                nextProductionProcessesId = workOrderProductionProcesses.get(1).getId();
+//            }
+//        } else {
+//            ApplicableProducts applicableProducts = applicableProductsService.getOne(q -> q.eq(ApplicableProducts::getProductId, workOrder.getProductId()));
+//            if (ObjectUtil.isEmpty(applicableProducts)) {
+//                throw new ServiceException("未找到适用于该产品的工艺信息");
+//            }
+//            Technology technology = technologyService.getById(applicableProducts.getTechnologyId());
+//            if (ObjectUtil.isEmpty(technology)) {
+//                throw new ServiceException("工艺信息不存在");
+//            }
+//            String processRoute = technology.getProcessRoute();
+//            if (ObjectUtil.isEmpty(processRoute)) {
+//                throw new ServiceException("工艺线路为空");
+//            }
+//            String[] split = processRoute.split(",");
+//            productionProcessesId = Long.valueOf(split[0]);
+//            //赋值下一工序id
+//            if (split.length > 1) {
+//                nextProductionProcessesId = Long.valueOf(split[1]);
+//            }
+//        }
+
+        this.updateById(productionTaskDetailDto);
+
+        //创建任务明细记录
+        ProductionTaskDetailRecord productionTaskDetailRecord = new ProductionTaskDetailRecord();
+        productionTaskDetailRecord.setProductionTaskDetailId(productionTaskDetailDto.getId());
+        productionTaskDetailRecord.setProductionProcessesId(productionTaskDetailDto.getProductionProcessesId());
+        productionTaskDetailRecord.setPersonLiableId(SecurityUtils.getUserId());
+        productionTaskDetailRecordService.save(productionTaskDetailRecord);
+
+    }
 
 }

+ 26 - 10
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.item.entity.product.po.ProductInfo;
@@ -13,10 +14,7 @@ import com.fjhx.mes.entity.bom.po.BomDetail;
 import com.fjhx.mes.entity.bom.po.BomInfo;
 import com.fjhx.mes.entity.production.dto.ProductionTaskDto;
 import com.fjhx.mes.entity.production.dto.ProductionTaskSelectDto;
-import com.fjhx.mes.entity.production.po.ProductionPlan;
-import com.fjhx.mes.entity.production.po.ProductionProcesses;
-import com.fjhx.mes.entity.production.po.ProductionTask;
-import com.fjhx.mes.entity.production.po.ProductionTaskDetail;
+import com.fjhx.mes.entity.production.po.*;
 import com.fjhx.mes.entity.production.vo.ProductionTaskDetailVo;
 import com.fjhx.mes.entity.production.vo.ProductionTaskVo;
 import com.fjhx.mes.entity.technology.po.Technology;
@@ -27,10 +25,7 @@ import com.fjhx.mes.mapper.production.ProductionTaskMapper;
 import com.fjhx.mes.service.applicable.ApplicableProductsService;
 import com.fjhx.mes.service.bom.BomDetailService;
 import com.fjhx.mes.service.bom.BomInfoService;
-import com.fjhx.mes.service.production.ProductionPlanService;
-import com.fjhx.mes.service.production.ProductionProcessesService;
-import com.fjhx.mes.service.production.ProductionTaskDetailService;
-import com.fjhx.mes.service.production.ProductionTaskService;
+import com.fjhx.mes.service.production.*;
 import com.fjhx.mes.service.technology.TechnologyService;
 import com.fjhx.mes.service.work.WorkOrderBomService;
 import com.fjhx.mes.service.work.WorkOrderProductionProcessesService;
@@ -89,6 +84,8 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
     private ProductionTaskDetailService productionTaskDetailService;
     @Autowired
     private ProductionProcessesService productionProcessesService;
+    @Autowired
+    private ProductionTaskDetailRecordService productionTaskDetailRecordService;
 
     @Override
     public Page<ProductionTaskVo> getPage(ProductionTaskSelectDto dto) {
@@ -228,14 +225,19 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
         }
         //判断是否为定制 获取工序信息
         Long productionProcessesId;
+        Long nextProductionProcessesId = null;
         if ("1".equals(workOrder.getIsCustomized())) {
-            WorkOrderProductionProcesses workOrderProductionProcesses = workOrderProductionProcessesService.getOne(q -> q
+            List<WorkOrderProductionProcesses> workOrderProductionProcesses = workOrderProductionProcessesService.list(q -> q
                     .eq(WorkOrderProductionProcesses::getWorkOrderId, workOrder.getId())
                     .orderByAsc(WorkOrderProductionProcesses::getSort));
             if (ObjectUtil.isEmpty(workOrderProductionProcesses)) {
                 throw new ServiceException("定制工单 工序列表为空");
             }
-            productionProcessesId = workOrderProductionProcesses.getId();
+            productionProcessesId = workOrderProductionProcesses.get(0).getId();
+            //赋值下一工序id
+            if(workOrderProductionProcesses.size()>1){
+                nextProductionProcessesId =  workOrderProductionProcesses.get(1).getId();
+            }
         } else {
             ApplicableProducts applicableProducts = applicableProductsService.getOne(q -> q.eq(ApplicableProducts::getProductId, workOrder.getProductId()));
             if (ObjectUtil.isEmpty(applicableProducts)) {
@@ -251,21 +253,35 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
             }
             String[] split = processRoute.split(",");
             productionProcessesId = Long.valueOf(split[0]);
+            //赋值下一工序id
+            if(split.length>1){
+                nextProductionProcessesId =  Long.valueOf(split[1]);
+            }
         }
         //创建任务明细
         List<ProductionTaskDetail> productionTaskDetailList = new ArrayList<>();
+        List<ProductionTaskDetailRecord> productionTaskDetailRecordList = new ArrayList<>();
         for (int i = 0; i < productionTaskDto.getQuantity().intValue(); i++) {
             ProductionTaskDetail productionTaskDetail = new ProductionTaskDetail();
+            productionTaskDetail.setId(IdWorker.getId());
             productionTaskDetail.setProductionTaskId(productionTaskDto.getId());//任务id
             productionTaskDetail.setFinishStatus(0);//默认状态未完工
             productionTaskDetail.setProductId(workOrder.getProductId());//产品id
             productionTaskDetail.setProductionProcessesId(productionProcessesId);//第一个工序id
+            productionTaskDetail.setNextProductionProcessesId(nextProductionProcessesId);//第二个工序id
             //生成SN
             productionTaskDetail.setProductSn(String.format("%s-%03d", productionTaskDto.getCode(), i + 1));
             productionTaskDetail.setPersonLiableId(productionTaskDto.getPersonLiableId());//负责人ID
             productionTaskDetailList.add(productionTaskDetail);
+            //创建任务明细记录
+            ProductionTaskDetailRecord productionTaskDetailRecord = new ProductionTaskDetailRecord();
+            productionTaskDetailRecord.setProductionTaskDetailId(productionTaskDetail.getId());
+            productionTaskDetailRecord.setProductionProcessesId(productionProcessesId);
+            productionTaskDetailRecord.setPersonLiableId(productionTaskDto.getPersonLiableId());
+            productionTaskDetailRecordList.add(productionTaskDetailRecord);
         }
         productionTaskDetailService.saveBatch(productionTaskDetailList);
+        productionTaskDetailRecordService.saveBatch(productionTaskDetailRecordList);
     }
 
     @Override

+ 1 - 1
hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderServiceImpl.java

@@ -145,7 +145,7 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
             throw new ServiceException("查询不到产品信息 产品id->" + workOrderDto.getProductId());
         }
         //搜索BOM明细并到冻结库存
-        BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrderDto.getProductId()));
+        BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrderDto.getProductId()).eq(BomInfo::getCurrentVersion,1));
         if (ObjectUtil.isEmpty(bomInfo)) {
             throw new ServiceException("查询不到产品的BOM信息 产品名称->" + productInfo.getName());
         }

+ 18 - 0
hx-mes/src/main/resources/mapper/production/ProductionTaskDetailMapper.xml

@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.mes.mapper.production.ProductionTaskDetailMapper">
+    <select id="getPage" resultType="com.fjhx.mes.entity.production.vo.ProductionTaskDetailVo">
+        select
+            ptd.id,
+            ptd.product_id,
+            ptd.production_task_id,
+            ptd.product_sn,
+            ptd.production_processes_id,
+            ptd.finish_time,
+            ptd.finish_status,
+            ptd.person_liable_id,
+            ptd.create_user,
+            ptd.create_time,
+            ptd.update_user,
+            ptd.update_time
+        from production_task_detail ptd
+            ${ew.customSqlSegment}
+    </select>
+
 </mapper>

+ 4 - 0
hx-mes/src/main/resources/mapper/production/ProductionTaskDetailRecordMapper.xml

@@ -0,0 +1,4 @@
+<?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.mes.mapper.production.ProductionTaskDetailRecordMapper">
+</mapper>

+ 8 - 0
hx-purchase/src/main/java/com/fjhx/purchase/controller/subscribe/SubscribeController.java

@@ -3,6 +3,7 @@ package com.fjhx.purchase.controller.subscribe;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.purchase.entity.subscribe.po.Subscribe;
+import com.ruoyi.common.core.domain.entity.SysDept;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.purchase.entity.subscribe.vo.SubscribeVo;
@@ -12,6 +13,8 @@ import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.fjhx.purchase.service.subscribe.SubscribeService;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -77,4 +80,9 @@ public class SubscribeController {
         subscribeService.delete(dto.getId());
     }
 
+    @GetMapping("/getDepts")
+    public List<SysDept> getDepts() {
+        return subscribeService.getDepts();
+    }
+
 }

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

@@ -80,4 +80,9 @@ public class ArrivalDetailVo extends ArrivalDetail {
      * 质检总数
      */
     private BigDecimal sumQualityCount;
+
+    /**
+     * 发货物流单号
+     */
+    private String logisticsCode;
 }

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

@@ -1,10 +1,14 @@
 package com.fjhx.purchase.entity.purchase.vo;
 
+import com.fjhx.purchase.entity.arrival.vo.ArrivalDetailVo;
+import com.fjhx.purchase.entity.deliver.DeliverGoodsDetailsPo;
 import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
+import com.fjhx.purchase.entity.quality.po.QualityDetail;
 import lombok.Getter;
 import lombok.Setter;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * 申购单列表查询返回值实体
@@ -49,5 +53,18 @@ public class PurchaseDetailVo extends PurchaseDetail {
      * 产品定义
      */
     private Integer productDefinition;
+    /**
+     * 产品自定义编号
+     */
+    private String productCustomCode;
+
+    private List<QualityDetail> qualityDetailsList;
+
+    /**
+     * 发货数量
+     */
+    private BigDecimal arrivalQuantity;
 
+    List<Object> deliverGoodsDetailList;
+    List<ArrivalDetailVo> arrivalDetailList;
 }

+ 7 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/vo/PurchaseVo.java

@@ -4,6 +4,8 @@ import com.fjhx.purchase.entity.purchase.po.Purchase;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * 采购列表查询返回值实体
  *
@@ -20,4 +22,9 @@ public class PurchaseVo extends Purchase {
      * 到货状态
      */
     private Integer arrivalStatus;
+
+    /**
+     * 采购明细列表
+     */
+    private List<PurchaseDetailVo> purchaseDetailVoList;
 }

+ 5 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/dto/SubscribeDetailSelectDto.java

@@ -43,4 +43,9 @@ public class SubscribeDetailSelectDto extends BaseSelectDto {
      */
     private Integer definition;
 
+    /**
+     * 部门id
+     */
+    private Long deptId;
+
 }

+ 6 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/po/SubscribeDetail.java

@@ -97,4 +97,10 @@ public class SubscribeDetail extends BasePo {
      */
     @TableField(exist = false)
     private Long deptId;
+
+    /**
+     * 产品定义
+     */
+    @TableField(exist = false)
+    private Integer productDefinition;
 }

+ 5 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/vo/SubscribeDetailVo.java

@@ -71,4 +71,9 @@ public class SubscribeDetailVo extends SubscribeDetail {
      * 产品自定义编码
      */
     private String productCustomCode;
+
+    /**
+     * 流程id
+     */
+    private Long flowId;
 }

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

@@ -8,6 +8,7 @@ import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 
 /**
@@ -30,4 +31,9 @@ public interface ArrivalDetailMapper extends BaseMapper<ArrivalDetail> {
      * @return
      */
     BigDecimal getSumCount(@Param("purchaseDetailId")Long purchaseDetailId,@Param("businessId")Long businessId);
+
+    /**
+     * 获取到货明细
+     */
+    List<ArrivalDetailVo> getArrivalDetail(@Param("ew") IWrapper<ArrivalDetail> wrapper);
 }

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

@@ -6,6 +6,7 @@ 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.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
@@ -49,8 +50,10 @@ public interface ArrivalDetailService extends BaseService<ArrivalDetail> {
 
     /**
      * 统计到货明细总数
+     *
      * @return
      */
     BigDecimal getSumCount(Long purchaseDetailId, Long businessId);
 
+    List<ArrivalDetailVo> getArrivalDetail(IWrapper<ArrivalDetail> wrapper1);
 }

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

@@ -160,4 +160,9 @@ public class ArrivalDetailServiceImpl extends ServiceImpl<ArrivalDetailMapper, A
         return baseMapper.getSumCount(purchaseDetailId,businessId);
     }
 
+    @Override
+    public List<ArrivalDetailVo> getArrivalDetail(IWrapper<ArrivalDetail> wrapper1) {
+        return baseMapper.getArrivalDetail(wrapper1);
+    }
+
 }

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

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.enums.CodingRuleEnum;
 import com.fjhx.common.service.coding.CodingRuleService;
+import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.kd100.entity.company.po.CompanyInfo;
 import com.fjhx.kd100.service.company.CompanyInfoService;
 import com.fjhx.purchase.entity.arrival.dto.ArrivalDto;
@@ -23,6 +24,8 @@ import com.fjhx.purchase.entity.deliver.DeliverGoodsDetailsPo;
 import com.fjhx.purchase.entity.deliver.DeliverGoodsPo;
 import com.fjhx.purchase.entity.purchase.po.Purchase;
 import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
+import com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo;
+import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
 import com.fjhx.purchase.entity.subscribe.po.Subscribe;
 import com.fjhx.purchase.entity.subscribe.po.SubscribeDetail;
 import com.fjhx.purchase.mapper.arrival.ArrivalMapper;
@@ -34,9 +37,12 @@ import com.fjhx.purchase.service.purchase.PurchaseService;
 import com.fjhx.purchase.service.subscribe.SubscribeDetailService;
 import com.fjhx.purchase.service.subscribe.SubscribeService;
 import com.fjhx.purchase.util.code.CodeEnum;
+import com.fjhx.supply.entity.supplier.po.SupplierInfo;
+import com.fjhx.supply.service.supplier.SupplierInfoService;
 import com.fjhx.wms.entity.stock.emums.StockWaitType;
 import com.fjhx.wms.entity.stock.po.StockWait;
 import com.fjhx.wms.entity.stock.po.StockWaitDetails;
+import com.fjhx.wms.entity.stock.vo.StockVo;
 import com.fjhx.wms.service.stock.StockWaitDetailsService;
 import com.fjhx.wms.service.stock.StockWaitService;
 import com.obs.services.internal.ServiceException;
@@ -89,6 +95,10 @@ public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> impl
 
     @Autowired
     private CompanyInfoService companyInfoService;
+    @Autowired
+    private SupplierInfoService supplierInfoService;
+    @Autowired
+    private ProductInfoService productInfoService;
 
     @Autowired
     private CodingRuleService codingRuleService;
@@ -319,4 +329,6 @@ public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> impl
         this.removeById(id);
     }
 
+
+
 }

+ 8 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/SubscribeService.java

@@ -1,12 +1,15 @@
 package com.fjhx.purchase.service.subscribe;
 
 import com.fjhx.purchase.entity.subscribe.po.Subscribe;
+import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.service.BaseService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.purchase.entity.subscribe.vo.SubscribeVo;
 import com.fjhx.purchase.entity.subscribe.dto.SubscribeSelectDto;
 import com.fjhx.purchase.entity.subscribe.dto.SubscribeDto;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -47,4 +50,9 @@ public interface SubscribeService extends BaseService<Subscribe> {
      */
     void delete(Long id);
 
+    /**
+     * 获取待采购所有产品的部门列表
+     * @return
+     */
+    List<SysDept> getDepts();
 }

+ 5 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeDetailServiceImpl.java

@@ -78,6 +78,7 @@ public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMappe
 
         // 维多利亚扩展根据到货仓库id过滤
         wrapper.eq("json_unquote(t2.victoriatourist_json -> '$.receiptWarehouseId')", dto.getReceiptWarehouseId());
+        wrapper.eq("json_unquote(pi.victoriatourist_json -> '$.deptId')", dto.getDeptId());
         wrapper.orderByDesc("t1", SubscribeDetail::getCreateTime);
 
         Page<SubscribeDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
@@ -97,6 +98,10 @@ public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMappe
             s.setProductUnit(productInfo.getUnit());
             s.setProductDefinition(productInfo.getDefinition());
             s.setProductCustomCode(productInfo.getCustomCode());
+
+            String victoriatouristJson = productInfo.getVictoriatouristJson();
+            JSONObject json = ObjectUtil.isNotEmpty(victoriatouristJson) ? JSONObject.parseObject(victoriatouristJson) : new JSONObject();
+            s.setDeptId(json.getLong("deptId"));
         }
 
         return page;

+ 32 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -12,6 +13,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.enums.CodingRuleEnum;
 import com.fjhx.common.service.coding.CodingRuleService;
+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.subscribe.dto.SubscribeDto;
@@ -26,11 +28,14 @@ import com.fjhx.purchase.util.code.CodeEnum;
 import com.fjhx.wms.entity.warehouse.po.Warehouse;
 import com.fjhx.wms.service.warehouse.WarehouseService;
 import com.obs.services.internal.ServiceException;
+import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.ruoyi.system.service.ISysDeptService;
 import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -56,6 +61,8 @@ public class SubscribeServiceImpl extends ServiceImpl<SubscribeMapper, Subscribe
 
     @Autowired
     WarehouseService warehouseService;
+    @Autowired
+    ISysDeptService deptService;
 
     @Autowired
     private CodingRuleService codingRuleService;
@@ -101,6 +108,7 @@ public class SubscribeServiceImpl extends ServiceImpl<SubscribeMapper, Subscribe
                     s.setProductUnit(p.getUnit());
                     s.setProductType(p.getType());
                     s.setProductName(p.getName());
+                    s.setProductDefinition(p.getDefinition());
                 }
             }
         }
@@ -158,4 +166,28 @@ public class SubscribeServiceImpl extends ServiceImpl<SubscribeMapper, Subscribe
         this.removeById(id);
     }
 
+    @Override
+    public List<SysDept> getDepts() {
+        List<Long> deptIds = new ArrayList<>();
+        List<SubscribeDetail> list = subscribeDetailService.list();
+        if(ObjectUtils.isEmpty(list)){
+            return new ArrayList<>();
+        }
+        List<Long> ids = list.stream().map(SubscribeDetail::getBussinessId).collect(Collectors.toList());
+        List<ProductInfo> list1 = productInfoService.listByIds(ids);
+        for (ProductInfo productInfo : list1) {
+            String victoriatouristJson = productInfo.getVictoriatouristJson();
+            JSONObject json = ObjectUtils.isNotEmpty(victoriatouristJson) ? JSONObject.parseObject(victoriatouristJson) : new JSONObject();
+            Long deptId = json.getLong("deptId");
+            deptIds.add(deptId);
+        }
+        if(ObjectUtils.isEmpty(deptIds)){
+            return new ArrayList<>();
+        }
+        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+        List<SysDept> sysDepts = deptService.listByIds(deptIds);
+        DynamicDataSourceContextHolder.poll();
+        return sysDepts;
+    }
+
 }

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

@@ -24,4 +24,13 @@
             purchase_detail_id = #{purchaseDetailId}
           AND bussiness_id = #{businessId}
     </select>
+    <select id="getArrivalDetail" resultType="com.fjhx.purchase.entity.arrival.vo.ArrivalDetailVo">
+        SELECT
+            a.purchase_id,
+            ad.*
+        FROM
+            arrival a
+                JOIN arrival_detail ad ON ad.arrival_id = a.id
+            ${ew.customSqlSegment}
+    </select>
 </mapper>

+ 3 - 1
hx-purchase/src/main/resources/mapper/subscribe/SubscribeDetailMapper.xml

@@ -11,10 +11,12 @@
             t2.id AS subcribeId,
             t2.required_arrival_time AS requiredArrivalTime,
             t2.put_warehouse_id AS putWarehouseId,
-            t2.victoriatourist_json
+            t2.victoriatourist_json,
+            t2.flow_id
         FROM
             subscribe_detail t1
         LEFT JOIN subscribe t2 ON t1.subscribe_id = t2.id
+        left JOIN bytesailing_item.product_info pi on t1.bussiness_id = pi.id
             ${ew.customSqlSegment}
     </select>
 

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
hx-sale/src/main/java/com/fjhx/sale/a-json/ContractBudgetApi.json


+ 8 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractController.java

@@ -162,4 +162,12 @@ public class ContractController {
     public void contractHandover(@RequestBody ContractDto dto) {
         contractService.contractHandover(dto);
     }
+
+    /**
+     * 合同销售统计(合同列表)
+     */
+    @PostMapping("/covenantStatistics")
+    public  Map<String,Object> covenantStatistics(@RequestBody ContractDto dto){
+        return  contractService.covenantStatistics(dto);
+    }
 }

+ 10 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/serviceContract/ServiceContractController.java

@@ -10,6 +10,8 @@ import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.fjhx.sale.service.serviceContract.ServiceContractService;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.Map;
+
 
 /**
  * <p>
@@ -51,5 +53,13 @@ public class ServiceContractController {
         serviceContractService.updateById(serviceContractDto);
     }
 
+    /**
+     * 服务合同统计(根据归属公司)
+     */
+    @PostMapping("/serviceContractStatistics")
+    public Map<String, Object> serviceContractStatistics(@RequestBody ServiceContractDto serviceContractDto){
+        return serviceContractService.serviceContractStatistics(serviceContractDto);
+    }
+
 
 }

+ 6 - 1
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/Contract.java

@@ -316,10 +316,15 @@ public class Contract extends BasePo {
     private List<ContractProject> contractProjectList;
 
     /**
-     * 版本号
+     * 合同数量
      */
     @TableField(exist = false)
     private Integer count;
 
+    /**
+     * 归属公司名称
+     */
+    @TableField(exist = false)
+    private String sellCorporationName;
 
 }

+ 28 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractSelectDto.java

@@ -4,6 +4,8 @@ import com.ruoyi.common.core.domain.BaseSelectDto;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
+
 /**
  * 服务合同表列表查询入参实体
  *
@@ -23,4 +25,30 @@ public class ServiceContractSelectDto extends BaseSelectDto {
      */
     private String ServiceStatus;
 
+    /**
+     * 归属公司ID
+     */
+    private Long sellCorporationId;
+
+
+    /**
+     * 客户ID
+     */
+    private Long buyCorporationId;
+
+    /**
+     * 编码
+     */
+    private String code;
+
+    /**
+     * 合同开始金额
+     */
+    private BigDecimal beginAmount;
+
+    /**
+     * 合同结束金额
+     */
+    private BigDecimal endAmount;
+
 }

+ 13 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/po/ServiceContract.java

@@ -1,5 +1,6 @@
 package com.fjhx.sale.entity.serviceContract.po;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.ruoyi.common.core.domain.BasePo;
 import com.baomidou.mybatisplus.annotation.TableName;
 
@@ -178,6 +179,18 @@ public class ServiceContract extends BasePo {
      */
     private Long shroffAccountId;
 
+    /**
+     * 合同个数
+     */
+    @TableField(exist = false)
+    private Integer count;
+
+    /**
+     * 归属公司名称
+     */
+    @TableField(exist = false)
+    private String  sellCorporationName;
+
 
 
 }

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java

@@ -137,4 +137,9 @@ public interface ContractService extends BaseService<Contract> {
      * 合同交接单
      */
     void contractHandover(ContractDto dto);
+
+    /**
+     * 合同销售统计(合同列表)
+     */
+    Map<String, Object> covenantStatistics(ContractDto dto);
 }

+ 38 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -16,6 +17,7 @@ import com.fjhx.account.entity.account.po.AccountManagement;
 import com.fjhx.account.service.account.AccountManagementService;
 import com.fjhx.area.service.SetCustomizeAreaId;
 import com.fjhx.area.utils.CustomizeAreaUtil;
+import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.entity.corporation.po.Corporation;
 import com.fjhx.common.entity.currency.po.CurrencyRate;
 import com.fjhx.common.entity.documentary.bo.DocumentaryData;
@@ -27,6 +29,7 @@ import com.fjhx.customer.entity.customer.dto.CustomerDto;
 import com.fjhx.customer.entity.customer.po.Customer;
 import com.fjhx.customer.service.customer.CustomerService;
 import com.fjhx.sale.entity.purchase.po.EhsdPurchaseProduct;
+import com.fjhx.sale.entity.serviceContract.po.ServiceContract;
 import com.fjhx.sale.service.purchase.EhsdPurchaseProductService;
 import com.fjhx.file.entity.FileInfoVo;
 import com.fjhx.file.utils.ObsFileUtil;
@@ -540,6 +543,41 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         ObsFileUtil.editFile(dto.getPackageFileList(),dto.getId(),2);
     }
 
+    /**
+     * 合同销售统计(合同列表)
+     */
+    @Override
+    public Map<String, Object> covenantStatistics(ContractDto dto) {
+        Map<String, Object> map = new HashMap<>();
+
+        QueryWrapper<Contract> query = Wrappers.query();
+        query.select("count(*) count,ifnull(sum(amount),0) amount,sell_corporation_id sellCorporationId");
+        query.groupBy("sell_corporation_id");
+        query.eq("status",30);
+        List<Contract> contractList = baseMapper.selectList(query);
+
+        //计算合计数量
+        Integer countAmount = contractList.stream().map(Contract::getCount).reduce(Integer::sum).orElse(0);
+        //计算合计金额
+        BigDecimal amount = contractList.stream().map(Contract::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        map.put("countAmount",countAmount);
+        map.put("amount",amount);
+
+        //赋值归属公司名称
+        DynamicDataSourceContextHolder.push(SourceConstant.COMMON);
+        corporationService.attributeAssign(contractList, Contract::getSellCorporationId, (item, corporation) -> {
+            item.setSellCorporationName(corporation.getName());
+        });
+        DynamicDataSourceContextHolder.poll();
+
+        //过滤掉卖方公司为null的数据(因为如果归属公司为null说明服务合同表的是没有数据)
+        contractList = contractList.stream().filter(serviceContract -> ObjectUtil
+                .isNotEmpty(serviceContract.getSellCorporationId())).collect(Collectors.toList());
+
+        map.put("serviceContractList",contractList);
+        return map;
+    }
+
 
     /**
      * 赋值外销合同信息

+ 6 - 0
hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/ServiceContractService.java

@@ -7,6 +7,8 @@ import com.fjhx.sale.entity.serviceContract.vo.ServiceContractVo;
 import com.fjhx.sale.entity.serviceContract.dto.ServiceContractSelectDto;
 import com.fjhx.sale.entity.serviceContract.dto.ServiceContractDto;
 
+import java.util.Map;
+
 
 /**
  * <p>
@@ -43,4 +45,8 @@ public interface ServiceContractService extends BaseService<ServiceContract> {
      */
     void delete(Long id);
 
+    /**
+     * 服务合同统计(根据归属公司)
+     */
+    Map<String, Object> serviceContractStatistics(ServiceContractDto serviceContractDto);
 }

+ 61 - 0
hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/impl/ServiceContractServiceImpl.java

@@ -2,10 +2,14 @@ package com.fjhx.sale.service.serviceContract.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.common.constant.SourceConstant;
+import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.sale.entity.serviceContract.dto.ServiceContractDto;
 import com.fjhx.sale.entity.serviceContract.dto.ServiceContractSelectDto;
 import com.fjhx.sale.entity.serviceContract.po.ServiceContract;
@@ -21,7 +25,11 @@ import com.ruoyi.system.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /**
@@ -41,6 +49,8 @@ public class ServiceContractServiceImpl extends ServiceImpl<ServiceContractMappe
     @Autowired
     private ServiceContractPayService serviceContractPayService;
 
+    @Autowired
+    private CorporationService corporationService;
     /**
      * 服务合同表分页
      */
@@ -48,8 +58,24 @@ public class ServiceContractServiceImpl extends ServiceImpl<ServiceContractMappe
     public Page<ServiceContractVo> getPage(ServiceContractSelectDto dto) {
         QueryWrapper<Object> query = Wrappers.query();
         query.orderByDesc("sc.create_time");
+        //审批状态
         query.eq(ObjectUtil.isNotEmpty(dto.getStatus()),"sc.status",dto.getStatus());
+        //服务状态
         query.eq(ObjectUtil.isNotEmpty(dto.getServiceStatus()),"cc.status",dto.getServiceStatus());
+        //归属公司查询
+        query.eq(ObjectUtil.isNotEmpty(dto.getSellCorporationId()),"sc.sell_corporation_id",dto.getSellCorporationId());
+        //客户查询
+        query.eq(ObjectUtil.isNotEmpty(dto.getBuyCorporationId()),"sc.buy_corporation_id",dto.getBuyCorporationId());
+        //合同编码查询
+        query.eq(ObjectUtil.isNotEmpty(dto.getCode()),"sc.code",dto.getCode());
+        //合同金额
+        query.ge(ObjectUtil.isNotEmpty(dto.getBeginAmount()),"sc.amount",dto.getEndAmount());
+        query.le(ObjectUtil.isNotEmpty(dto.getEndAmount()),"sc.amount",dto.getEndAmount());
+        //下单时间
+        query.ge(ObjectUtil.isNotEmpty(dto.getBeginTime()),"sc.create_time",dto.getBeginAmount());
+        query.ge(ObjectUtil.isNotEmpty(dto.getEndTime()),"sc.create_time",dto.getEndTime());
+
+        //查询服务合同列表
         Page<ServiceContractVo> page = this.baseMapper.getPage(dto.getPage(), query);
         List<ServiceContractVo> records = page.getRecords();
         //赋值用户名称
@@ -94,4 +120,39 @@ public class ServiceContractServiceImpl extends ServiceImpl<ServiceContractMappe
         this.removeById(id);
     }
 
+    /**
+     * 服务合同统计(根据归属公司统计)
+     */
+    @Override
+    public Map<String, Object> serviceContractStatistics(ServiceContractDto serviceContractDto) {
+        Map<String, Object> map = new HashMap<>();
+
+        QueryWrapper<ServiceContract> query = Wrappers.query();
+        query.select("count(*) count,ifnull(sum(amount),0) amount,sell_corporation_id sellCorporationId");
+        query.groupBy("sell_corporation_id");
+        query.eq("status",30);
+        List<ServiceContract> serviceContractList = baseMapper.selectList(query);
+
+        //计算合计数量
+        Integer countAmount = serviceContractList.stream().map(ServiceContract::getCount).reduce(Integer::sum).orElse(0);
+        //计算合计金额
+        BigDecimal amount = serviceContractList.stream().map(ServiceContract::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        map.put("countAmount",countAmount);
+        map.put("amount",amount);
+
+        //赋值归属公司名称
+        DynamicDataSourceContextHolder.push(SourceConstant.COMMON);
+        corporationService.attributeAssign(serviceContractList, ServiceContract::getSellCorporationId, (item, corporation) -> {
+            item.setSellCorporationName(corporation.getName());
+        });
+        DynamicDataSourceContextHolder.poll();
+
+        //过滤掉卖方公司为null的数据(因为如果归属公司为null说明服务合同表的是没有数据)
+        serviceContractList = serviceContractList.stream().filter(serviceContract -> ObjectUtil
+                .isNotEmpty(serviceContract.getSellCorporationId())).collect(Collectors.toList());
+
+        map.put("serviceContractList",serviceContractList);
+        return map;
+    }
+
 }

+ 6 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/controller/deliver/DeliverGoodsController.java

@@ -1,5 +1,6 @@
 package com.fjhx.victoriatourist.controller.deliver;
 
+import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
 import com.fjhx.victoriatourist.entity.deliver.po.DeliverGoods;
 import com.fjhx.victoriatourist.entity.deliver.vo.DeliverGoodsDetailsVo;
 import org.springframework.web.bind.annotation.*;
@@ -79,4 +80,9 @@ public class DeliverGoodsController {
         return deliverGoodsService.list(dto.getId());
     }
 
+    @PostMapping("/arrivalDetail")
+    public PurchaseVo arrivalDetail(@RequestBody DeliverGoodsDto dto) {
+        return deliverGoodsService.arrivalDetail(dto.getPurchaseId());
+    }
+
 }

+ 5 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/deliver/vo/DeliverGoodsDetailsVo.java

@@ -56,4 +56,9 @@ public class DeliverGoodsDetailsVo extends DeliverGoodsDetails {
      */
     private BigDecimal transitQuantity;
 
+    /**
+     * 物流单号
+     */
+    private String logisticsCode;
+
 }

+ 3 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/mapper/deliver/DeliverGoodsMapper.java

@@ -1,5 +1,6 @@
 package com.fjhx.victoriatourist.mapper.deliver;
 
+import com.fjhx.purchase.entity.quality.po.QualityDetail;
 import com.fjhx.victoriatourist.entity.deliver.po.DeliverGoods;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -28,4 +29,6 @@ public interface DeliverGoodsMapper extends BaseMapper<DeliverGoods> {
 
     List<DeliverGoodsDetailsVo> listDeliverGoodsDetails(@Param("ew") IWrapper<DeliverGoods> wrapper);
 
+    List<QualityDetail> getQualityInfoByPurchaseId(@Param("id") Long id);
+
 }

+ 7 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/deliver/DeliverGoodsService.java

@@ -1,5 +1,6 @@
 package com.fjhx.victoriatourist.service.deliver;
 
+import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
 import com.fjhx.victoriatourist.entity.deliver.po.DeliverGoods;
 import com.fjhx.victoriatourist.entity.deliver.vo.DeliverGoodsDetailsVo;
 import com.ruoyi.common.core.service.BaseService;
@@ -53,4 +54,10 @@ public interface DeliverGoodsService extends BaseService<DeliverGoods> {
      */
     List<DeliverGoods> list(Long id);
 
+    /**
+     * 维多利亚到货明细
+     *
+     * @return
+     */
+    PurchaseVo arrivalDetail(Long purchaseId);
 }

+ 104 - 6
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/deliver/impl/DeliverGoodsServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fjhx.victoriatourist.service.deliver.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
@@ -9,10 +10,18 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.purchase.entity.arrival.po.ArrivalDetail;
+import com.fjhx.purchase.entity.arrival.vo.ArrivalDetailVo;
 import com.fjhx.purchase.entity.purchase.po.Purchase;
 import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
+import com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo;
+import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
+import com.fjhx.purchase.entity.quality.po.QualityDetail;
+import com.fjhx.purchase.service.arrival.ArrivalDetailService;
 import com.fjhx.purchase.service.purchase.PurchaseDetailService;
 import com.fjhx.purchase.service.purchase.PurchaseService;
+import com.fjhx.supply.entity.supplier.po.SupplierInfo;
+import com.fjhx.supply.service.supplier.SupplierInfoService;
 import com.fjhx.victoriatourist.entity.deliver.dto.DeliverGoodsDto;
 import com.fjhx.victoriatourist.entity.deliver.dto.DeliverGoodsSelectDto;
 import com.fjhx.victoriatourist.entity.deliver.po.DeliverGoods;
@@ -29,10 +38,10 @@ import com.fjhx.victoriatourist.service.logistics.LogisticsInfosService;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 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.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
@@ -62,6 +71,10 @@ public class DeliverGoodsServiceImpl extends ServiceImpl<DeliverGoodsMapper, Del
     LogisticsDetailsService logisticsDetailsService;
     @Autowired
     PurchaseService purchaseService;
+    @Autowired
+    private SupplierInfoService supplierInfoService;
+    @Autowired
+    private ArrivalDetailService arrivalDetailService;
 
     @Override
     public Page<DeliverGoodsVo> getPage(DeliverGoodsSelectDto dto) {
@@ -81,7 +94,7 @@ public class DeliverGoodsServiceImpl extends ServiceImpl<DeliverGoodsMapper, Del
         //获取采购明细列表
         //赋值产品信息
         List<Long> pdids = deliverGoodsDetailsVos.stream().map(DeliverGoodsDetails::getPurchaseDetailId).collect(Collectors.toList());
-        if(ObjectUtil.isEmpty(pdids)){
+        if (ObjectUtil.isEmpty(pdids)) {
             return deliverGoodsDetailsVos;
         }
         List<PurchaseDetail> purchaseDetailList = purchaseDetailService.listByIds(pdids);
@@ -90,7 +103,7 @@ public class DeliverGoodsServiceImpl extends ServiceImpl<DeliverGoodsMapper, Del
         List<ProductInfo> productInfos = productInfoService.listByIds(goodids);
         Map<Long, ProductInfo> productInfoMap = productInfos.stream().collect(Collectors.toMap(ProductInfo::getId, Function.identity()));
         //获取采购明细信息
-        Map<Long, PurchaseDetail> purchaseDetailMap = purchaseDetailList.stream().collect(Collectors.toMap(PurchaseDetail::getId,Function.identity()));
+        Map<Long, PurchaseDetail> purchaseDetailMap = purchaseDetailList.stream().collect(Collectors.toMap(PurchaseDetail::getId, Function.identity()));
 
         for (DeliverGoodsDetailsVo deliverGoodsDetailsVo : deliverGoodsDetailsVos) {
             //赋值产品信息
@@ -110,8 +123,8 @@ public class DeliverGoodsServiceImpl extends ServiceImpl<DeliverGoodsMapper, Del
             deliverGoodsDetailsVo.setCount(purchaseDetail.getCount());
             //赋值在途数量
             IWrapper<DeliverGoods> wrapper1 = IWrapper.getWrapper();
-            wrapper1.eq("dgd",DeliverGoodsDetails::getPurchaseDetailId, deliverGoodsDetailsVo.getPurchaseDetailId());
-            wrapper1.eq("dg.status",0);
+            wrapper1.eq("dgd", DeliverGoodsDetails::getPurchaseDetailId, deliverGoodsDetailsVo.getPurchaseDetailId());
+            wrapper1.eq("dg.status", 0);
             List<DeliverGoodsDetailsVo> list = baseMapper.listDeliverGoodsDetails(wrapper1);
             BigDecimal count = list.stream()
                     .map(DeliverGoodsDetails::getDeliverGoodsQuantity)
@@ -135,7 +148,7 @@ public class DeliverGoodsServiceImpl extends ServiceImpl<DeliverGoodsMapper, Del
         logisticsInfos.setBusinessId(deliverGoodsDto.getId());//设置业务id为发货id
 //        logisticsInfos.setBusinessCode(purchase.getCode());//设置采购单号为业务单号
         String victoriatouristJson2 = purchase.getVictoriatouristJson();
-        JSONObject json2 = ObjectUtil.isNotEmpty(victoriatouristJson2) ? JSONObject.parseObject(victoriatouristJson2):new JSONObject();
+        JSONObject json2 = ObjectUtil.isNotEmpty(victoriatouristJson2) ? JSONObject.parseObject(victoriatouristJson2) : new JSONObject();
         logisticsInfos.setBusinessCode(json2.getString("contractCode"));
         logisticsInfos.setBusinessType(1);//采购到货
         logisticsInfos.setStatus(0);
@@ -180,4 +193,89 @@ public class DeliverGoodsServiceImpl extends ServiceImpl<DeliverGoodsMapper, Del
         return list;
     }
 
+    @Override
+    public PurchaseVo arrivalDetail(Long purchaseId) {
+        Purchase purchase = purchaseService.getById(purchaseId);
+        PurchaseVo result = BeanUtil.toBean(purchase, PurchaseVo.class);
+        //赋值供应商信息
+        SupplierInfo supplierInfo = supplierInfoService.getById(purchase.getSupplyId());
+        if (ObjectUtil.isNotEmpty(supplierInfo)) {
+            result.setSupplyName(supplierInfo.getName());
+        }
+        //赋值采购明细
+        List<PurchaseDetail> purchaseDetailList = purchaseDetailService.list(q -> q.eq(PurchaseDetail::getPurchaseId, purchase.getId()));
+        List<PurchaseDetailVo> purchaseDetailVoList = BeanUtil.copyToList(purchaseDetailList, PurchaseDetailVo.class);
+        //赋值产品信息
+        productInfoService.attributeAssign(purchaseDetailVoList, PurchaseDetailVo::getBussinessId, (item, productInfo) -> {
+            item.setProductCode(productInfo.getCode());
+            item.setProductName(productInfo.getName());
+            item.setProductCustomCode(productInfo.getCustomCode());
+        });
+        //赋值质检信息
+        List<QualityDetail> qualityInfoByPurchaseId = baseMapper.getQualityInfoByPurchaseId(purchase.getId());
+        if (ObjectUtil.isNotEmpty(qualityInfoByPurchaseId)) {
+            Map<Long, QualityDetail> qualityDetailsMap = qualityInfoByPurchaseId.stream().collect(Collectors.toMap(QualityDetail::getBussinessId, Function.identity()));
+            for (PurchaseDetailVo purchaseDetailVo : purchaseDetailVoList) {
+                QualityDetail qualityDetails = qualityDetailsMap.get(purchaseDetailVo.getBussinessId());
+                if(ObjectUtil.isEmpty(qualityDetails)){
+                    purchaseDetailVo.setQualifiedCount(BigDecimal.ZERO);
+                    purchaseDetailVo.setNoQualifiedCount(BigDecimal.ZERO);
+                    continue;
+                }
+                purchaseDetailVo.setQualifiedCount(qualityDetails.getQualifiedCount());
+                purchaseDetailVo.setNoQualifiedCount(qualityDetails.getNoQualifiedCount());
+            }
+        }
+        //赋值发货信息
+        IWrapper<DeliverGoods> wrapper = getWrapper();
+        wrapper.eq("dg", DeliverGoods::getPurchaseId, purchaseId);
+        List<DeliverGoodsDetailsVo> list = baseMapper.listDeliverGoodsDetails(wrapper);
+        if (ObjectUtil.isNotEmpty(list)) {
+            Map<Long, List<DeliverGoodsDetailsVo>> collect = list.stream().collect(Collectors.groupingBy(DeliverGoodsDetailsVo::getPurchaseDetailId));
+            for (PurchaseDetailVo purchaseDetailVo : purchaseDetailVoList) {
+                List<DeliverGoodsDetailsVo> list1 = collect.get(purchaseDetailVo.getId());
+                if(ObjectUtil.isEmpty(list1)){
+                    purchaseDetailVo.setDeliverGoodsQuantity(BigDecimal.ZERO);
+                    continue;
+                }
+                //发货数量求和
+                BigDecimal dgdCount = list1.stream()
+                        .map(DeliverGoodsDetailsVo::getDeliverGoodsQuantity)
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+                purchaseDetailVo.setDeliverGoodsQuantity(dgdCount);
+                purchaseDetailVo.setDeliverGoodsDetailList(Collections.singletonList(list1));
+            }
+        }
+        //赋值到货信息
+        IWrapper<ArrivalDetail> wrapper1 = arrivalDetailService.getWrapper();
+        wrapper1.eq("a.purchase_id", purchaseId);
+        List<ArrivalDetailVo> arrivalDetail = arrivalDetailService.getArrivalDetail(wrapper1);
+        if (ObjectUtil.isNotEmpty(arrivalDetail)) {
+            Map<Long, List<ArrivalDetailVo>> collect = arrivalDetail.stream().collect(Collectors.groupingBy(ArrivalDetailVo::getBussinessId));
+
+            Map<Long, String> dgdMap = list.stream().collect(Collectors.toMap(DeliverGoodsDetailsVo::getId, DeliverGoodsDetailsVo::getLogisticsCode));
+            for (PurchaseDetailVo purchaseDetailVo : purchaseDetailVoList) {
+                List<ArrivalDetailVo> list1 = collect.get(purchaseDetailVo.getBussinessId());
+                if(ObjectUtil.isEmpty(list1)){
+                    purchaseDetailVo.setArrivalQuantity(BigDecimal.ZERO);
+                    continue;
+                }
+
+                //赋值发货单号
+                for (ArrivalDetailVo arrivalDetailVo : list1) {
+                    arrivalDetailVo.setLogisticsCode(dgdMap.get(arrivalDetailVo.getDeliverGoodsDetailsId()));
+                }
+
+                //到货数量求和
+                BigDecimal arrCount = list1.stream()
+                        .map(ArrivalDetailVo::getCount)
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+                purchaseDetailVo.setArrivalQuantity(arrCount);
+                purchaseDetailVo.setArrivalDetailList(list1);
+            }
+        }
+        result.setPurchaseDetailVoList(purchaseDetailVoList);
+        return result;
+    }
+
 }

+ 16 - 0
hx-victoriatourist/src/main/resources/mapper/deliver/DeliverGoodsMapper.xml

@@ -18,11 +18,27 @@
     <select id="listDeliverGoodsDetails"
             resultType="com.fjhx.victoriatourist.entity.deliver.vo.DeliverGoodsDetailsVo">
         SELECT
+            dg.code logisticsCode,
             dgd.*
         FROM
             deliver_goods dg
                 JOIN deliver_goods_details dgd ON dgd.deliver_goods_id = dg.id
             ${ew.customSqlSegment}
     </select>
+    <select id="getQualityInfoByPurchaseId" resultType="com.fjhx.purchase.entity.quality.po.QualityDetail">
+        SELECT
+            qd.product_info_id bussiness_id,
+            sum( qd.qualified_quantity ) qualifiedCount,
+            sum( qd.disqualification_quantity ) noQualifiedCount
+        FROM
+            bytesailing_wms.stock_wait sw
+                JOIN bytesailing_wms.arrival_stock_records asr ON asr.stock_wait_id = sw.id
+                JOIN bytesailing_wms.arrival_stock_records_details asrd ON asrd.arrival_stock_records_id = asr.id
+                JOIN bytesailing_victoriatourist.quality_details qd ON qd.arrival_stock_records_details_id = asrd.id
+        WHERE
+            sw.business_id = #{id}
+        ORDER BY
+            qd.product_info_id
+    </select>
 
 </mapper>

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно