From a10f08b432788d6061f7d90c8a4469a719d781a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9A=B4=E7=82=B3=E6=9E=97?= <15237758276@163.com> Date: Fri, 7 Jun 2024 14:42:35 +0800 Subject: [PATCH] no message --- .../com/youchain/RequestData/ItemDate.java | 4 +- .../com/youchain/basicdata/domain/BigBom.java | 10 +-- .../repository/BigBomRepository.java | 6 ++ .../repository/BigItemRepository.java | 6 ++ .../com/youchain/businessdata/domain/Gd.java | 16 ----- .../businessdata/domain/GdDetail.java | 52 +++++++------- .../repository/GdDetailRepository.java | 7 ++ .../businessdata/rest/MesController.java | 69 +++++++++++++++---- .../businessdata/service/GdDetailService.java | 15 ++++ .../businessdata/service/dto/GdDetailDto.java | 6 +- .../service/impl/GdDetailServiceImpl.java | 33 +++++++-- 11 files changed, 155 insertions(+), 69 deletions(-) diff --git a/youchain-system/src/main/java/com/youchain/RequestData/ItemDate.java b/youchain-system/src/main/java/com/youchain/RequestData/ItemDate.java index 6a6e585..8857ac3 100644 --- a/youchain-system/src/main/java/com/youchain/RequestData/ItemDate.java +++ b/youchain-system/src/main/java/com/youchain/RequestData/ItemDate.java @@ -5,9 +5,9 @@ import lombok.Data; @Data public class ItemDate { - @ApiModelProperty(value ="物料代码",required = true,example = "xxx") + @ApiModelProperty(value ="物料代码",required = true,example = "物料代码") String itemCode; - @ApiModelProperty(value ="物料名称",required = true,example = "xxx") + @ApiModelProperty(value ="物料名称",required = true,example = "物料名称") String itemName; @ApiModelProperty(value ="物料数量",required = true,example = "1") Double itemQty=0d; diff --git a/youchain-system/src/main/java/com/youchain/basicdata/domain/BigBom.java b/youchain-system/src/main/java/com/youchain/basicdata/domain/BigBom.java index 78d3a64..dda5433 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/domain/BigBom.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/domain/BigBom.java @@ -16,6 +16,7 @@ package com.youchain.basicdata.domain; import com.youchain.base.BaseEntity; +import com.youchain.modules.system.domain.Dept; import lombok.Data; import cn.hutool.core.bean.BeanUtil; import io.swagger.annotations.ApiModelProperty; @@ -54,11 +55,12 @@ public class BigBom extends BaseEntity implements Serializable { @Column(name = "`quantity`") @ApiModelProperty(value = "数量") - private Float quantity; + private Double quantity; - @Column(name = "`dept_id`") - @ApiModelProperty(value = "仓库ID") - private Long deptId; + @OneToOne + @JoinColumn(name = "dept_id") + @ApiModelProperty(value = "仓库") + private Dept dept; diff --git a/youchain-system/src/main/java/com/youchain/basicdata/repository/BigBomRepository.java b/youchain-system/src/main/java/com/youchain/basicdata/repository/BigBomRepository.java index b76354a..7ce772c 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/repository/BigBomRepository.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/repository/BigBomRepository.java @@ -16,8 +16,12 @@ package com.youchain.basicdata.repository; import com.youchain.basicdata.domain.BigBom; +import com.youchain.basicdata.domain.Item; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; /** * @website https://eladmin.vip @@ -25,4 +29,6 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; * @date 2024-02-21 **/ public interface BigBomRepository extends JpaRepository, JpaSpecificationExecutor { + @Query(value = "SELECT b FROM BigBom b WHERE b.bigItem.id = ?1 and b.item.id=?2", nativeQuery = false) + List findRepeat(Long bigItemId, Long itemId); } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/basicdata/repository/BigItemRepository.java b/youchain-system/src/main/java/com/youchain/basicdata/repository/BigItemRepository.java index 8d955ad..50abd86 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/repository/BigItemRepository.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/repository/BigItemRepository.java @@ -16,8 +16,12 @@ package com.youchain.basicdata.repository; import com.youchain.basicdata.domain.BigItem; +import com.youchain.basicdata.domain.Item; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; /** * @website https://eladmin.vip @@ -25,4 +29,6 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; * @date 2024-02-21 **/ public interface BigItemRepository extends JpaRepository, JpaSpecificationExecutor { + @Query(value = "SELECT i FROM BigItem i WHERE i.code = ?1 and i.name=?2", nativeQuery = false) + List findRepeat(String completeCode, String completeName); } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/businessdata/domain/Gd.java b/youchain-system/src/main/java/com/youchain/businessdata/domain/Gd.java index 3b3aa55..a3e22fe 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/domain/Gd.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/domain/Gd.java @@ -44,22 +44,6 @@ public class Gd extends BaseEntity implements Serializable { @ApiModelProperty(value = "ID") private Long id; - @Column(name = "`create_by`") - @ApiModelProperty(value = "创建人") - private String createBy; - - @Column(name = "`update_by`") - @ApiModelProperty(value = "修改人") - private String updateBy; - - @Column(name = "`create_time`") - @ApiModelProperty(value = "创建时间") - private Timestamp createTime; - - @Column(name = "`update_time`") - @ApiModelProperty(value = "修改时间") - private Timestamp updateTime; - @Column(name = "`code`") @ApiModelProperty(value = "工单编号") private String code; diff --git a/youchain-system/src/main/java/com/youchain/businessdata/domain/GdDetail.java b/youchain-system/src/main/java/com/youchain/businessdata/domain/GdDetail.java index 4554064..7fd0088 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/domain/GdDetail.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/domain/GdDetail.java @@ -16,6 +16,10 @@ package com.youchain.businessdata.domain; import com.youchain.base.BaseEntity; +import com.youchain.basicdata.domain.BigItem; +import com.youchain.basicdata.domain.Item; +import com.youchain.basicdata.domain.Point; +import com.youchain.modules.system.domain.Dept; import lombok.Data; import cn.hutool.core.bean.BeanUtil; import io.swagger.annotations.ApiModelProperty; @@ -41,47 +45,37 @@ public class GdDetail extends BaseEntity implements Serializable { @Column(name = "`id`") @ApiModelProperty(value = "ID") private Long id; - - @Column(name = "`create_by`") - @ApiModelProperty(value = "创建人") - private String createBy; - - @Column(name = "`update_by`") - @ApiModelProperty(value = "修改人") - private String updateBy; - - @Column(name = "`create_time`") - @ApiModelProperty(value = "创建时间") - private Timestamp createTime; - - @Column(name = "`update_time`") - @ApiModelProperty(value = "修改时间") - private Timestamp updateTime; - + @OneToOne + @JoinColumn(name = "`gd_id`",nullable = false) + @ApiModelProperty(value = "工单") + private Gd gd; @Column(name = "`line_no`") @ApiModelProperty(value = "行号") private Long lineNo; - @Column(name = "`item_id`") - @ApiModelProperty(value = "关联物料") - private Long itemId; - + @OneToOne + @JoinColumn(name = "`item_id`",nullable = false) + @ApiModelProperty(value = "单品物料") + private Item item; @Column(name = "`item_qty`") @ApiModelProperty(value = "订单数量") - private Long itemQty; - - @Column(name = "`big_item_id`") - @ApiModelProperty(value = "总成代码") - private Long bigItemId; + private Double itemQty=0d; + @OneToOne + @JoinColumn(name = "`big_item_id`",nullable = true) + @ApiModelProperty(value = "成套物料") + private BigItem bigItem; @Column(name = "`big_item_qty`") @ApiModelProperty(value = "总成套数") - private Long bigItemQty; + private Double bigItemQty=0d; @Column(name = "`order_type`") @ApiModelProperty(value = "单据类型") - private Long orderType; - + private String orderType; + @OneToOne + @JoinColumn(name = "`dept_id`",nullable = false) + @ApiModelProperty(value = "仓库") + private Dept dept; public void copy(GdDetail source){ BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/repository/GdDetailRepository.java b/youchain-system/src/main/java/com/youchain/businessdata/repository/GdDetailRepository.java index f7cdb05..2c34b7f 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/repository/GdDetailRepository.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/repository/GdDetailRepository.java @@ -15,9 +15,13 @@ */ package com.youchain.businessdata.repository; +import com.youchain.businessdata.domain.Gd; import com.youchain.businessdata.domain.GdDetail; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; /** * @website https://eladmin.vip @@ -25,4 +29,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; * @date 2024-06-06 **/ public interface GdDetailRepository extends JpaRepository, JpaSpecificationExecutor { + @Query(value = "SELECT g FROM GdDetail g WHERE g.gd.id=?1 " + + " and (?2=null or g.bigItem.id=?2) and g.item.id=?3 and g.orderType=?4", nativeQuery = false) + List findRepeat(Long gdId, Long bigItemId, Long itemId,String orderType); } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/businessdata/rest/MesController.java b/youchain-system/src/main/java/com/youchain/businessdata/rest/MesController.java index a9246a4..c4d71e5 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/rest/MesController.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/rest/MesController.java @@ -3,8 +3,13 @@ package com.youchain.businessdata.rest; import com.youchain.RequestData.*; import com.youchain.annotation.AnonymousAccess; import com.youchain.annotation.Log; +import com.youchain.basicdata.domain.BigBom; +import com.youchain.basicdata.domain.BigItem; import com.youchain.basicdata.domain.Item; +import com.youchain.basicdata.repository.BigBomRepository; +import com.youchain.basicdata.repository.BigItemRepository; import com.youchain.basicdata.repository.ItemRepository; +import com.youchain.basicdata.service.BigBomService; import com.youchain.businessdata.domain.Gd; import com.youchain.businessdata.domain.GdDetail; import com.youchain.businessdata.service.GdDetailService; @@ -12,6 +17,7 @@ import com.youchain.businessdata.service.GdService; import com.youchain.businessdata.service.dto.TaskQueryCriteria; import com.youchain.exception.BadRequestException; import com.youchain.exception.handler.ApiResult; +import com.youchain.modules.system.service.DeptService; import com.youchain.utils.BaseStatus; import com.youchain.utils.BizStatus; import io.swagger.annotations.Api; @@ -34,7 +40,12 @@ import java.util.Set; @Slf4j public class MesController { private final GdService gdService; + private final GdDetailService gdDetailService; + private final DeptService deptService; + private final BigBomService bigBomService; private final ItemRepository itemRepository; + private final BigBomRepository bigBomRepository; + private final BigItemRepository bigItemRepository; @PostMapping("/yclbl") @Log("mes-原材料备料") @ApiOperation("mes-原材料备料") @@ -43,22 +54,34 @@ public class MesController { /* 添加工单单头*/ Gd gd = gdService.save(yclbl.getOrderNo(),yclbl.getTaskCode(),yclbl.getStation()); if (yclbl.getBlzc()!=null){ - /*String orderType = BaseStatus.GD_TYPE_CT; + String orderType = BaseStatus.GD_TYPE_CT; Set blzc = yclbl.getBlzc(); for (ZcData zcData : blzc) { - *//* 验证成套 物料*//* - Item bigItem=verifiedBigItem(zcData.getCompleteCode(),zcData.getCompleteName()); + /* 验证成套 物料*/ + BigItem bigItem=verifiedBigItem(zcData.getCompleteCode(),zcData.getCompleteName()); Set itemDates=zcData.getBlzcmx(); for (ItemDate itemDate : itemDates) { - *//* 验证单品 物料*//* + /* 验证单品 物料*/ Item item=verifiedItem(itemDate.getItemCode(),itemDate.getItemName()); - *//* 添加工单明细*//* -// GdDetail gdDetail = gdDetailService.save(gd.getId(),yc(),yclbl.getStation()); + /* 验证BOM*/ + BigBom bigBom=verifiedBigBom(bigItem,item,itemDate.getItemQty()); + /* 添加工单明细*/ + GdDetail gdDetail = gdDetailService.save(gd,orderType,bigItem,zcData.getCompleteQty(),item,itemDate.getItemQty()); } - }*/ - }else if (yclbl.getBlzcmx()!=null){ - String orderType = BaseStatus.GD_TYPE_DP; + } } + if (yclbl.getBlzcmx()!=null){ + String orderType = BaseStatus.GD_TYPE_DP; + Set itemDateList=yclbl.getBlzcmx(); + for (ItemDate itemDate:itemDateList){ + /* 验证单品物料*/ + Item item=verifiedItem(itemDate.getItemCode(),itemDate.getItemName()); + /* 添加工单明细*/ + GdDetail gdDetail = gdDetailService.save(gd,orderType,null,null,item,itemDate.getItemQty()); + } + } + /* 生成 出库明细*/ + addPickDetail(gd); ApiResult apiResult=ApiResult.result(200,"成功",null); return new ResponseEntity<>(apiResult, HttpStatus.valueOf(apiResult.getStatus())); } @@ -106,10 +129,10 @@ public class MesController { } /** 验证成套物料*/ - private Item verifiedBigItem(String completeCode, String completeName) { - List itemList = itemRepository.findRepeat(completeCode,completeName); - if (itemList.size()>0){ - return itemList.get(0); + private BigItem verifiedBigItem(String completeCode, String completeName) { + List bigItemList = bigItemRepository.findRepeat(completeCode,completeName); + if (bigItemList.size()>0){ + return bigItemList.get(0); }else { throw new BadRequestException(HttpStatus.INTERNAL_SERVER_ERROR, "未维护成套物料"+completeCode); } @@ -122,4 +145,24 @@ public class MesController { throw new BadRequestException(HttpStatus.INTERNAL_SERVER_ERROR, "未维护单品物料"+itemCode); } } + + private BigBom verifiedBigBom(BigItem bigItem, Item item, Double itemQty) { + List bigBomList = bigBomRepository.findRepeat(bigItem.getId(),item.getId()); + if (bigBomList.size()>0){ + return bigBomList.get(0); + }else { + // 添加BOM + BigBom bigBom= new BigBom(); + bigBom.setBigItem(bigItem); + bigBom.setItem(item); + bigBom.setQuantity(itemQty); + bigBom.setDept(deptService.isDept()); + bigBomRepository.save(bigBom); + return bigBom; + } + } + /** 拆分工单*/ + private void splitGd(Gd gd) { + List gdDetailList=gdDetailService.fingByDg(gd.getId()); + } } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/GdDetailService.java b/youchain-system/src/main/java/com/youchain/businessdata/service/GdDetailService.java index 14917af..13493e1 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/GdDetailService.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/GdDetailService.java @@ -15,6 +15,9 @@ */ package com.youchain.businessdata.service; +import com.youchain.basicdata.domain.BigItem; +import com.youchain.basicdata.domain.Item; +import com.youchain.businessdata.domain.Gd; import com.youchain.businessdata.domain.GdDetail; import com.youchain.businessdata.service.dto.GdDetailDto; import com.youchain.businessdata.service.dto.GdDetailQueryCriteria; @@ -80,4 +83,16 @@ public interface GdDetailService { * @throws IOException / */ void download(List all, HttpServletResponse response) throws IOException; + + /** + * 添加工单明细 + * @param gd 工单 + * @param orderType 分配类型 成套,单品 + * @param bigItem 成套 物料 + * @param completeQty 成套数 + * @param item 单品物料 + * @param itemQty 每套单品数 + * @return + */ + GdDetail save(Gd gd, String orderType, BigItem bigItem, Double completeQty, Item item, Double itemQty); } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/dto/GdDetailDto.java b/youchain-system/src/main/java/com/youchain/businessdata/service/dto/GdDetailDto.java index 9114248..a84a39e 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/dto/GdDetailDto.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/dto/GdDetailDto.java @@ -15,6 +15,8 @@ */ package com.youchain.businessdata.service.dto; +import com.youchain.basicdata.domain.BigItem; +import com.youchain.basicdata.domain.Item; import lombok.Data; import java.sql.Timestamp; import java.io.Serializable; @@ -48,16 +50,18 @@ public class GdDetailDto implements Serializable { /** 关联物料 */ private Long itemId; + private Item item; /** 订单数量 */ private Long itemQty; /** 总成代码 */ private Long bigItemId; + private BigItem bigItem; /** 总成套数 */ private Long bigItemQty; /** 单据类型 */ - private Long orderType; + private String orderType; } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/GdDetailServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/GdDetailServiceImpl.java index 64dfd23..2eb5df9 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/GdDetailServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/GdDetailServiceImpl.java @@ -15,11 +15,12 @@ */ package com.youchain.businessdata.service.impl; +import com.youchain.basicdata.domain.BigItem; +import com.youchain.basicdata.domain.Item; +import com.youchain.businessdata.domain.Gd; import com.youchain.businessdata.domain.GdDetail; -import com.youchain.utils.FileUtil; -import com.youchain.utils.PageUtil; -import com.youchain.utils.QueryHelp; -import com.youchain.utils.ValidationUtil; +import com.youchain.modules.system.service.DeptService; +import com.youchain.utils.*; import lombok.RequiredArgsConstructor; import com.youchain.businessdata.repository.GdDetailRepository; import com.youchain.businessdata.service.GdDetailService; @@ -49,6 +50,7 @@ public class GdDetailServiceImpl implements GdDetailService { private final GdDetailRepository gdDetailRepository; private final GdDetailMapper gdDetailMapper; + private final DeptService deptService; @Override public Map queryAll(GdDetailQueryCriteria criteria, Pageable pageable){ @@ -110,4 +112,27 @@ public class GdDetailServiceImpl implements GdDetailService { } FileUtil.downloadExcel(list, response); } + + @Override + public GdDetail save(Gd gd, String orderType, BigItem bigItem, Double completeQty, Item item, Double itemQty) { + GdDetail gdDetail= new GdDetail(); + List gdList; + if (orderType.equals(BaseStatus.GD_TYPE_DP)){ + gdList=gdDetailRepository.findRepeat(gd.getId(),null,item.getId(),BaseStatus.GD_TYPE_DP); + }else { + gdList=gdDetailRepository.findRepeat(gd.getId(),bigItem.getId(),item.getId(),BaseStatus.GD_TYPE_CT); + } + if (gdList.size()>0){ + gdDetail=gdList.get(0); + } + gdDetail.setGd(gd); + gdDetail.setItem(item); + gdDetail.setItemQty(itemQty); + gdDetail.setBigItem(bigItem); + gdDetail.setBigItemQty(completeQty); + gdDetail.setDept(deptService.isDept()); + gdDetail.setOrderType(orderType); + gdDetailRepository.save(gdDetail); + return gdDetail; + } } \ No newline at end of file