浏览代码

定制工单

yzc 2 年之前
父节点
当前提交
fe8498a80f
共有 27 个文件被更改,包括 698 次插入6 次删除
  1. 5 0
      hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java
  2. 44 0
      hx-jxst/src/main/java/com/fjhx/jxst/controller/work/WorkOrderBomController.java
  3. 44 0
      hx-jxst/src/main/java/com/fjhx/jxst/controller/work/WorkOrderProductionProcessesController.java
  4. 5 0
      hx-jxst/src/main/java/com/fjhx/jxst/entity/sales/vo/SalesContractDetailsVo.java
  5. 6 0
      hx-jxst/src/main/java/com/fjhx/jxst/entity/sales/vo/SalesContractVo.java
  6. 24 0
      hx-jxst/src/main/java/com/fjhx/jxst/entity/work/dto/WorkOrderBomDto.java
  7. 17 0
      hx-jxst/src/main/java/com/fjhx/jxst/entity/work/dto/WorkOrderBomSelectDto.java
  8. 25 0
      hx-jxst/src/main/java/com/fjhx/jxst/entity/work/dto/WorkOrderProductionProcessesDto.java
  9. 17 0
      hx-jxst/src/main/java/com/fjhx/jxst/entity/work/dto/WorkOrderProductionProcessesSelectDto.java
  10. 43 0
      hx-jxst/src/main/java/com/fjhx/jxst/entity/work/po/WorkOrderBom.java
  11. 47 0
      hx-jxst/src/main/java/com/fjhx/jxst/entity/work/po/WorkOrderProductionProcesses.java
  12. 30 0
      hx-jxst/src/main/java/com/fjhx/jxst/entity/work/vo/WorkOrderBomVo.java
  13. 30 0
      hx-jxst/src/main/java/com/fjhx/jxst/entity/work/vo/WorkOrderProductionProcessesVo.java
  14. 1 0
      hx-jxst/src/main/java/com/fjhx/jxst/flow/SalesContractFlow.java
  15. 22 0
      hx-jxst/src/main/java/com/fjhx/jxst/mapper/work/WorkOrderBomMapper.java
  16. 21 0
      hx-jxst/src/main/java/com/fjhx/jxst/mapper/work/WorkOrderProductionProcessesMapper.java
  17. 17 0
      hx-jxst/src/main/java/com/fjhx/jxst/service/sales/impl/SalesContractServiceImpl.java
  18. 31 0
      hx-jxst/src/main/java/com/fjhx/jxst/service/work/WorkOrderBomService.java
  19. 31 0
      hx-jxst/src/main/java/com/fjhx/jxst/service/work/WorkOrderProductionProcessesService.java
  20. 91 0
      hx-jxst/src/main/java/com/fjhx/jxst/service/work/impl/WorkOrderBomServiceImpl.java
  21. 115 0
      hx-jxst/src/main/java/com/fjhx/jxst/service/work/impl/WorkOrderProductionProcessesServiceImpl.java
  22. 5 0
      hx-jxst/src/main/resources/mapper/work/WorkOrderBomMapper.xml
  23. 5 0
      hx-jxst/src/main/resources/mapper/work/WorkOrderProductionProcessesMapper.xml
  24. 5 0
      hx-mes/src/main/java/com/fjhx/mes/entity/work/po/WorkOrder.java
  25. 2 1
      hx-mes/src/main/resources/mapper/work/WorkOrderMapper.xml
  26. 10 5
      hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/po/SubscribeDetail.java
  27. 5 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeDetailServiceImpl.java

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

@@ -320,6 +320,11 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
         if (count != 0) {
             throw new ServiceException("产品自定义编码重复");
         }
+        // 排除不为空的条码编号重复
+        long count1 = this.count(q -> q.eq(ProductInfo::getBarCode, productInfoDto.getBarCode()).ne(ProductInfo::getBarCode,""));
+        if (count1 != 0) {
+            throw new ServiceException("产品条码编码重复");
+        }
 
         this.save(productInfoDto);
         ObsFileUtil.saveFile(productInfoDto.getFileList(), productInfoDto.getId());

+ 44 - 0
hx-jxst/src/main/java/com/fjhx/jxst/controller/work/WorkOrderBomController.java

@@ -0,0 +1,44 @@
+package com.fjhx.jxst.controller.work;
+
+import com.fjhx.jxst.entity.work.po.WorkOrderBom;
+import org.springframework.web.bind.annotation.*;
+import com.fjhx.jxst.entity.work.vo.WorkOrderBomVo;
+import com.fjhx.jxst.entity.work.dto.WorkOrderBomSelectDto;
+import com.fjhx.jxst.entity.work.dto.WorkOrderBomDto;
+import com.fjhx.jxst.service.work.WorkOrderBomService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 工单bom 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+@RestController
+@RequestMapping("/workOrderBom")
+public class WorkOrderBomController {
+
+    @Autowired
+    private WorkOrderBomService workOrderBomService;
+
+    /**
+     * 工单bom列表
+     */
+    @PostMapping("/list")
+    public List<WorkOrderBomVo> list(@RequestBody WorkOrderBom dto) {
+        return workOrderBomService.getList(dto);
+    }
+
+    /**
+     * 工单bom编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody WorkOrderBomDto workOrderBomDto) {
+        workOrderBomService.edit(workOrderBomDto);
+    }
+
+}

+ 44 - 0
hx-jxst/src/main/java/com/fjhx/jxst/controller/work/WorkOrderProductionProcessesController.java

@@ -0,0 +1,44 @@
+package com.fjhx.jxst.controller.work;
+
+import com.fjhx.jxst.entity.work.po.WorkOrderProductionProcesses;
+import org.springframework.web.bind.annotation.*;
+import com.fjhx.jxst.entity.work.vo.WorkOrderProductionProcessesVo;
+import com.fjhx.jxst.entity.work.dto.WorkOrderProductionProcessesSelectDto;
+import com.fjhx.jxst.entity.work.dto.WorkOrderProductionProcessesDto;
+import com.fjhx.jxst.service.work.WorkOrderProductionProcessesService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 工单工序 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+@RestController
+@RequestMapping("/workOrderProductionProcesses")
+public class WorkOrderProductionProcessesController {
+
+    @Autowired
+    private WorkOrderProductionProcessesService workOrderProductionProcessesService;
+
+    /**
+     * 工单工序列表
+     */
+    @PostMapping("/list")
+    public List<WorkOrderProductionProcessesVo> list(@RequestBody WorkOrderProductionProcesses dto) {
+        return workOrderProductionProcessesService.getList(dto);
+    }
+
+    /**
+     * 工单工序编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody WorkOrderProductionProcessesDto workOrderProductionProcessesDto) {
+        workOrderProductionProcessesService.edit(workOrderProductionProcessesDto);
+    }
+
+}

+ 5 - 0
hx-jxst/src/main/java/com/fjhx/jxst/entity/sales/vo/SalesContractDetailsVo.java

@@ -14,4 +14,9 @@ import lombok.Setter;
 @Setter
 public class SalesContractDetailsVo extends SalesContractDetails {
 
+    /**
+     * 产品名称
+     */
+    private String productName;
+
 }

+ 6 - 0
hx-jxst/src/main/java/com/fjhx/jxst/entity/sales/vo/SalesContractVo.java

@@ -5,6 +5,7 @@ import lombok.Getter;
 import lombok.Setter;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * 销售合同列表查询返回值实体
@@ -21,4 +22,9 @@ public class SalesContractVo extends SalesContract {
      */
     private String customerName;
 
+    /**
+     * 销售合同明细
+     */
+    private List<SalesContractDetailsVo> contractDetailsList;
+
 }

+ 24 - 0
hx-jxst/src/main/java/com/fjhx/jxst/entity/work/dto/WorkOrderBomDto.java

@@ -0,0 +1,24 @@
+package com.fjhx.jxst.entity.work.dto;
+
+import com.fjhx.jxst.entity.work.po.WorkOrderBom;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 工单bom新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+@Getter
+@Setter
+public class WorkOrderBomDto extends WorkOrderBom {
+
+    /**
+     * 定制bom列表
+     */
+    List<WorkOrderBom> workOrderBomList;
+
+}

+ 17 - 0
hx-jxst/src/main/java/com/fjhx/jxst/entity/work/dto/WorkOrderBomSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.jxst.entity.work.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 工单bom列表查询入参实体
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+@Getter
+@Setter
+public class WorkOrderBomSelectDto extends BaseSelectDto {
+
+}

+ 25 - 0
hx-jxst/src/main/java/com/fjhx/jxst/entity/work/dto/WorkOrderProductionProcessesDto.java

@@ -0,0 +1,25 @@
+package com.fjhx.jxst.entity.work.dto;
+
+import com.fjhx.jxst.entity.work.po.WorkOrderProductionProcesses;
+import com.fjhx.jxst.entity.work.vo.WorkOrderProductionProcessesVo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 工单工序新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+@Getter
+@Setter
+public class WorkOrderProductionProcessesDto extends WorkOrderProductionProcesses {
+
+    /**
+     * 工序列表
+     */
+    List<WorkOrderProductionProcessesVo> workOrderProductionProcessesList;
+
+}

+ 17 - 0
hx-jxst/src/main/java/com/fjhx/jxst/entity/work/dto/WorkOrderProductionProcessesSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.jxst.entity.work.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 工单工序列表查询入参实体
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+@Getter
+@Setter
+public class WorkOrderProductionProcessesSelectDto extends BaseSelectDto {
+
+}

+ 43 - 0
hx-jxst/src/main/java/com/fjhx/jxst/entity/work/po/WorkOrderBom.java

@@ -0,0 +1,43 @@
+package com.fjhx.jxst.entity.work.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 工单bom
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+@Getter
+@Setter
+@TableName("work_order_bom")
+public class WorkOrderBom extends BasePo {
+
+    /**
+     * 工单id
+     */
+    private Long workOrderId;
+
+    /**
+     * 产品id
+     */
+    private Long productId;
+
+    /**
+     * 数量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 成本
+     */
+    private BigDecimal cost;
+
+}

+ 47 - 0
hx-jxst/src/main/java/com/fjhx/jxst/entity/work/po/WorkOrderProductionProcesses.java

@@ -0,0 +1,47 @@
+package com.fjhx.jxst.entity.work.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-17
+ */
+@Getter
+@Setter
+@TableName("work_order_production_processes")
+public class WorkOrderProductionProcesses extends BasePo {
+
+    /**
+     * 工单id
+     */
+    private Long workOrderId;
+
+    /**
+     * 排序
+     */
+    private Integer sort;
+
+    /**
+     * 工序名称
+     */
+    private String name;
+
+    /**
+     * 工序说明
+     */
+    private String remarks;
+
+    /**
+     * 工序文件名
+     */
+    private String fileName;
+
+}

+ 30 - 0
hx-jxst/src/main/java/com/fjhx/jxst/entity/work/vo/WorkOrderBomVo.java

@@ -0,0 +1,30 @@
+package com.fjhx.jxst.entity.work.vo;
+
+import com.fjhx.jxst.entity.work.po.WorkOrderBom;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 工单bom列表查询返回值实体
+ *
+ * @author
+ * @since 2023-05-17
+ */
+@Getter
+@Setter
+public class WorkOrderBomVo extends WorkOrderBom {
+
+    /**
+     * 产品编号
+     */
+    private String productCode;
+    /**
+     * 产品单位
+     */
+    private String productUnit;
+    /**
+     * 产品名称
+     */
+    private String productName;
+
+}

+ 30 - 0
hx-jxst/src/main/java/com/fjhx/jxst/entity/work/vo/WorkOrderProductionProcessesVo.java

@@ -0,0 +1,30 @@
+package com.fjhx.jxst.entity.work.vo;
+
+import com.fjhx.file.entity.ObsFile;
+import com.fjhx.jxst.entity.work.po.WorkOrderProductionProcesses;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 工单工序列表查询返回值实体
+ *
+ * @author
+ * @since 2023-05-17
+ */
+@Getter
+@Setter
+public class WorkOrderProductionProcessesVo extends WorkOrderProductionProcesses {
+
+    /**
+     * 附件列表
+     */
+    private List<ObsFile> fileList;
+
+    /**
+     * 带过来的工序id
+     */
+    private Long oldId;
+
+}

+ 1 - 0
hx-jxst/src/main/java/com/fjhx/jxst/flow/SalesContractFlow.java

@@ -47,6 +47,7 @@ public class SalesContractFlow extends FlowDelegate {
             workOrder.setSource("sales_contract");//销售合同
             workOrder.setProductId(salesContractDetails.getProductId());
             workOrder.setQuantity(salesContractDetails.getQuantity());
+            workOrder.setIsCustomized(salesContractDetails.getIsCustomized());
             //添加工单
             workOrderService.add(workOrder);
         }

+ 22 - 0
hx-jxst/src/main/java/com/fjhx/jxst/mapper/work/WorkOrderBomMapper.java

@@ -0,0 +1,22 @@
+package com.fjhx.jxst.mapper.work;
+
+import com.fjhx.jxst.entity.work.po.WorkOrderBom;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fjhx.jxst.entity.work.vo.WorkOrderBomVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 工单bom Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+public interface WorkOrderBomMapper extends BaseMapper<WorkOrderBom> {
+
+
+}

+ 21 - 0
hx-jxst/src/main/java/com/fjhx/jxst/mapper/work/WorkOrderProductionProcessesMapper.java

@@ -0,0 +1,21 @@
+package com.fjhx.jxst.mapper.work;
+
+import com.fjhx.jxst.entity.work.po.WorkOrderProductionProcesses;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fjhx.jxst.entity.work.vo.WorkOrderProductionProcessesVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 工单工序 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+public interface WorkOrderProductionProcessesMapper extends BaseMapper<WorkOrderProductionProcesses> {
+
+}

+ 17 - 0
hx-jxst/src/main/java/com/fjhx/jxst/service/sales/impl/SalesContractServiceImpl.java

@@ -6,20 +6,24 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.customer.entity.customer.po.Customer;
 import com.fjhx.customer.service.customer.CustomerService;
+import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.jxst.entity.sales.dto.SalesContractDto;
 import com.fjhx.jxst.entity.sales.dto.SalesContractSelectDto;
 import com.fjhx.jxst.entity.sales.po.SalesContract;
 import com.fjhx.jxst.entity.sales.po.SalesContractDetails;
+import com.fjhx.jxst.entity.sales.vo.SalesContractDetailsVo;
 import com.fjhx.jxst.entity.sales.vo.SalesContractVo;
 import com.fjhx.jxst.mapper.sales.SalesContractMapper;
 import com.fjhx.jxst.service.sales.SalesContractDetailsService;
 import com.fjhx.jxst.service.sales.SalesContractService;
+import com.fjhx.wms.entity.stock.vo.StockVo;
 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.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -39,6 +43,8 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
     private SalesContractDetailsService salesContractDetailsService;
     @Autowired
     private CustomerService customerService;
+    @Autowired
+    private ProductInfoService productInfoService;
 
     @Override
     public Page<SalesContractVo> getPage(SalesContractSelectDto dto) {
@@ -66,6 +72,17 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
     public SalesContractVo detail(Long id) {
         SalesContract SalesContract = this.getById(id);
         SalesContractVo result = BeanUtil.toBean(SalesContract, SalesContractVo.class);
+        List<SalesContractDetails> salesContractDetailsList = salesContractDetailsService.list(q -> q.eq(SalesContractDetails::getSalesContractId, result.getId()));
+        List<SalesContractDetailsVo> salesContractDetailsVos = BeanUtil.copyToList(salesContractDetailsList, SalesContractDetailsVo.class);
+        //赋值产品信息
+        productInfoService.attributeAssign(salesContractDetailsVos, SalesContractDetailsVo::getProductId, (item, productInfo) -> {
+            item.setProductName(productInfo.getName());
+        });
+        result.setContractDetailsList(salesContractDetailsVos);
+        //赋值客户名称
+        customerService.attributeAssign(Arrays.asList(result), SalesContractVo::getCustomerId, (item, customer) -> {
+            item.setCustomerName(customer.getName());
+        });
         return result;
     }
 

+ 31 - 0
hx-jxst/src/main/java/com/fjhx/jxst/service/work/WorkOrderBomService.java

@@ -0,0 +1,31 @@
+package com.fjhx.jxst.service.work;
+
+import com.fjhx.jxst.entity.work.po.WorkOrderBom;
+import com.ruoyi.common.core.service.BaseService;
+import com.fjhx.jxst.entity.work.vo.WorkOrderBomVo;
+import com.fjhx.jxst.entity.work.dto.WorkOrderBomSelectDto;
+import com.fjhx.jxst.entity.work.dto.WorkOrderBomDto;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 工单bom 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+public interface WorkOrderBomService extends BaseService<WorkOrderBom> {
+
+    /**
+     * 工单bom列表
+     */
+    List<WorkOrderBomVo> getList(WorkOrderBom dto);
+
+    /**
+     * 工单bom编辑
+     */
+    void edit(WorkOrderBomDto workOrderBomDto);
+
+}

+ 31 - 0
hx-jxst/src/main/java/com/fjhx/jxst/service/work/WorkOrderProductionProcessesService.java

@@ -0,0 +1,31 @@
+package com.fjhx.jxst.service.work;
+
+import com.fjhx.jxst.entity.work.po.WorkOrderProductionProcesses;
+import com.ruoyi.common.core.service.BaseService;
+import com.fjhx.jxst.entity.work.vo.WorkOrderProductionProcessesVo;
+import com.fjhx.jxst.entity.work.dto.WorkOrderProductionProcessesSelectDto;
+import com.fjhx.jxst.entity.work.dto.WorkOrderProductionProcessesDto;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 工单工序 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+public interface WorkOrderProductionProcessesService extends BaseService<WorkOrderProductionProcesses> {
+
+    /**
+     * 工单工序列表
+     */
+    List<WorkOrderProductionProcessesVo> getList(WorkOrderProductionProcesses dto);
+
+    /**
+     * 工单工序编辑
+     */
+    void edit(WorkOrderProductionProcessesDto workOrderProductionProcessesDto);
+
+}

+ 91 - 0
hx-jxst/src/main/java/com/fjhx/jxst/service/work/impl/WorkOrderBomServiceImpl.java

@@ -0,0 +1,91 @@
+package com.fjhx.jxst.service.work.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.jxst.entity.work.po.WorkOrderBom;
+import com.fjhx.jxst.mapper.work.WorkOrderBomMapper;
+import com.fjhx.jxst.service.work.WorkOrderBomService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.mes.entity.bom.po.BomDetail;
+import com.fjhx.mes.entity.bom.po.BomInfo;
+import com.fjhx.mes.entity.work.po.WorkOrder;
+import com.fjhx.mes.service.bom.BomDetailService;
+import com.fjhx.mes.service.bom.BomInfoService;
+import com.fjhx.mes.service.work.WorkOrderService;
+import com.fjhx.purchase.entity.arrival.po.ArrivalDetail;
+import com.obs.services.internal.ServiceException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.fjhx.jxst.entity.work.vo.WorkOrderBomVo;
+import com.fjhx.jxst.entity.work.dto.WorkOrderBomSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.jxst.entity.work.dto.WorkOrderBomDto;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 工单bom 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+@Service
+public class WorkOrderBomServiceImpl extends ServiceImpl<WorkOrderBomMapper, WorkOrderBom> implements WorkOrderBomService {
+
+    @Autowired
+    private BomInfoService bomInfoService;
+    @Autowired
+    private BomDetailService bomDetailService;
+    @Autowired
+    private WorkOrderService workOrderService;
+    @Autowired
+    private ProductInfoService productInfoService;
+
+    @Override
+    public List<WorkOrderBomVo> getList(WorkOrderBom dto) {
+        WorkOrder workOrder = workOrderService.getById(dto.getWorkOrderId());
+        if(ObjectUtil.isEmpty(workOrder)){
+            throw new ServiceException("查询不到工单信息");
+        }
+        List<WorkOrderBom> workOrderBomList = list(q -> q.eq(WorkOrderBom::getWorkOrderId, dto.getWorkOrderId()));
+        if(ObjectUtil.isEmpty(workOrderBomList)){
+            //如果不存在定制BOM就查询基本BOM信息
+            BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrder.getProductId()));
+            if(ObjectUtil.isEmpty(bomInfo)){
+                throw new ServiceException("查询不到产品基本BOM信息");
+            }
+            List<BomDetail> bomDetailList = bomDetailService.list(q -> q.eq(BomDetail::getBomInfoId, bomInfo.getId()));
+            if(ObjectUtil.isEmpty(bomDetailList)){
+                throw new ServiceException("查询不到产品基本BOM明细信息");
+            }
+            workOrderBomList = BeanUtil.copyToList(bomDetailList, WorkOrderBom.class);
+            for (WorkOrderBom workOrderBomVo : workOrderBomList) {
+                workOrderBomVo.setId(null);//清空id
+            }
+        }
+        List<WorkOrderBomVo> workOrderBomVos = BeanUtil.copyToList(workOrderBomList, WorkOrderBomVo.class);
+        //赋值产品明细
+        productInfoService.attributeAssign(workOrderBomVos, WorkOrderBomVo::getProductId, (item, productInfo) -> {
+            item.setProductCode(productInfo.getCode());
+            item.setProductUnit(productInfo.getUnit());
+            item.setProductName(productInfo.getName());
+        });
+        return workOrderBomVos;
+    }
+
+    @DSTransactional
+    @Override
+    public void edit(WorkOrderBomDto workOrderBomDto) {
+//        this.updateById(workOrderBomDto);
+
+        List<WorkOrderBom> afterSaleDetailList = workOrderBomDto.getWorkOrderBomList();
+        afterSaleDetailList.forEach(item -> item.setWorkOrderId(workOrderBomDto.getWorkOrderId()));
+        this.editLinked(afterSaleDetailList, WorkOrderBom::getWorkOrderId, workOrderBomDto.getWorkOrderId());
+
+    }
+
+}

+ 115 - 0
hx-jxst/src/main/java/com/fjhx/jxst/service/work/impl/WorkOrderProductionProcessesServiceImpl.java

@@ -0,0 +1,115 @@
+package com.fjhx.jxst.service.work.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.file.entity.ObsFile;
+import com.fjhx.file.utils.ObsFileUtil;
+import com.fjhx.jxst.entity.work.dto.WorkOrderProductionProcessesDto;
+import com.fjhx.jxst.entity.work.po.WorkOrderProductionProcesses;
+import com.fjhx.jxst.entity.work.vo.WorkOrderProductionProcessesVo;
+import com.fjhx.jxst.mapper.work.WorkOrderProductionProcessesMapper;
+import com.fjhx.jxst.service.work.WorkOrderProductionProcessesService;
+import com.fjhx.mes.entity.applicable.po.ApplicableProducts;
+import com.fjhx.mes.entity.production.po.ProductionProcesses;
+import com.fjhx.mes.entity.technology.po.Technology;
+import com.fjhx.mes.entity.work.po.WorkOrder;
+import com.fjhx.mes.service.applicable.ApplicableProductsService;
+import com.fjhx.mes.service.production.ProductionProcessesService;
+import com.fjhx.mes.service.technology.TechnologyService;
+import com.fjhx.mes.service.work.WorkOrderService;
+import com.obs.services.internal.ServiceException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 工单工序 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-05-17
+ */
+@Service
+public class WorkOrderProductionProcessesServiceImpl extends ServiceImpl<WorkOrderProductionProcessesMapper, WorkOrderProductionProcesses> implements WorkOrderProductionProcessesService {
+
+    @Autowired
+    private TechnologyService technologyService;
+    @Autowired
+    private ApplicableProductsService applicableProductsService;
+    @Autowired
+    private WorkOrderService workOrderService;
+    @Autowired
+    private ProductionProcessesService productionProcessesService;
+
+    @Override
+    public List<WorkOrderProductionProcessesVo> getList(WorkOrderProductionProcesses dto) {
+        WorkOrder workOrder = workOrderService.getById(dto.getWorkOrderId());
+        if (ObjectUtil.isEmpty(workOrder)) {
+            throw new ServiceException("查询不到工单信息");
+        }
+        List<WorkOrderProductionProcesses> workOrderProductionProcessesList = list(q -> q
+                .eq(WorkOrderProductionProcesses::getWorkOrderId, dto.getWorkOrderId())
+                .orderByAsc(WorkOrderProductionProcesses::getSort));
+        //如果定制工序信息为空就获取基础工艺工序信息
+        if (ObjectUtil.isEmpty(workOrderProductionProcessesList)) {
+            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(",");
+            List<ProductionProcesses> productionProcesses = productionProcessesService.list(q -> q.in(ProductionProcesses::getId, split));
+            List<WorkOrderProductionProcessesVo> workOrderProductionProcessesList0 = BeanUtil.copyToList(productionProcesses, WorkOrderProductionProcessesVo.class);
+            int i = 0;
+            for (WorkOrderProductionProcessesVo workOrderProductionProcesses : workOrderProductionProcessesList0) {
+                workOrderProductionProcesses.setOldId(workOrderProductionProcesses.getId());//赋值带过来的id
+                workOrderProductionProcesses.setId(null);
+                workOrderProductionProcesses.setSort(i);
+                i++;
+            }
+            return workOrderProductionProcessesList0;
+        }
+        List<WorkOrderProductionProcessesVo> workOrderProductionProcessesVos = BeanUtil.copyToList(workOrderProductionProcessesList, WorkOrderProductionProcessesVo.class);
+        return workOrderProductionProcessesVos;
+    }
+
+    @DSTransactional
+    @Override
+    public void edit(WorkOrderProductionProcessesDto workOrderProductionProcessesDto) {
+//        this.updateById(workOrderProductionProcessesDto);
+
+        List<WorkOrderProductionProcessesVo> workOrderProductionProcessesList = workOrderProductionProcessesDto.getWorkOrderProductionProcessesList();
+
+        int i = 0;
+        for (WorkOrderProductionProcessesVo workOrderProductionProcesses : workOrderProductionProcessesList) {
+            workOrderProductionProcesses.setWorkOrderId(workOrderProductionProcessesDto.getWorkOrderId());
+            workOrderProductionProcesses.setSort(i);
+            List<ObsFile> fileList = workOrderProductionProcesses.getFileList();
+            if (ObjectUtil.isNotEmpty(fileList)) {
+                workOrderProductionProcesses.setFileName(fileList.get(0).getFileName());
+            }
+            i++;
+
+            //处理附件信息
+            if (ObjectUtil.isEmpty(workOrderProductionProcesses.getId())) {
+                ObsFileUtil.saveFile(workOrderProductionProcesses.getFileList(), workOrderProductionProcesses.getId());
+            } else {
+                ObsFileUtil.editFile(workOrderProductionProcesses.getFileList(), workOrderProductionProcesses.getId());
+            }
+        }
+        List<WorkOrderProductionProcesses> workOrderProductionProcessesList1 = BeanUtil.copyToList(workOrderProductionProcessesList, WorkOrderProductionProcesses.class);
+        this.editLinked(workOrderProductionProcessesList1, WorkOrderProductionProcesses::getWorkOrderId, workOrderProductionProcessesDto.getWorkOrderId());
+    }
+
+}

+ 5 - 0
hx-jxst/src/main/resources/mapper/work/WorkOrderBomMapper.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.jxst.mapper.work.WorkOrderBomMapper">
+
+</mapper>

+ 5 - 0
hx-jxst/src/main/resources/mapper/work/WorkOrderProductionProcessesMapper.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.jxst.mapper.work.WorkOrderProductionProcessesMapper">
+
+</mapper>

+ 5 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/work/po/WorkOrder.java

@@ -57,4 +57,9 @@ public class WorkOrder extends BasePo {
      */
     private Integer status;
 
+    /**
+     * 是否定制
+     */
+    private String isCustomized;
+
 }

+ 2 - 1
hx-mes/src/main/resources/mapper/work/WorkOrderMapper.xml

@@ -13,7 +13,8 @@
             wo.create_user,
             wo.create_time,
             wo.update_user,
-            wo.update_time
+            wo.update_time,
+            wo.is_customized
         from work_order wo
             ${ew.customSqlSegment}
     </select>

+ 10 - 5
hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/po/SubscribeDetail.java

@@ -1,20 +1,19 @@
 package com.fjhx.purchase.entity.subscribe.po;
 
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.ruoyi.common.core.domain.BasePo;
 import com.baomidou.mybatisplus.annotation.TableName;
-
-import java.math.BigDecimal;
-import java.util.Date;
+import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
+
 /**
  * <p>
  * 申购单
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-03
  */
 @Getter
@@ -92,4 +91,10 @@ public class SubscribeDetail extends BasePo {
      */
     @TableField(exist = false)
     private String productSpec;
+
+    /**
+     * 部门id
+     */
+    @TableField(exist = false)
+    private Long deptId;
 }

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

@@ -169,6 +169,11 @@ public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMappe
                     s.setProductType(p.getType());
                     s.setProductName(p.getName());
                     s.setProductSpec(p.getSpec());
+
+                    //维多利亚赋值部门id
+                    String victoriatouristJson = p.getVictoriatouristJson();
+                    JSONObject json = ObjectUtil.isNotEmpty(victoriatouristJson) ? JSONObject.parseObject(victoriatouristJson) : new JSONObject();
+                    s.setDeptId(json.getLong("deptId"));
                 }
             }
         }