From e1eddc736da84e554afb07d89563e2c93292ab4c Mon Sep 17 00:00:00 2001 From: ruanqi Date: Fri, 7 Jun 2024 18:04:17 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=87=E8=B4=AD=E5=85=A5=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ProductionStockController.java | 142 +++++++++ .../material/dao/ProductionStockMapper.java | 55 ++++ .../Impl/ProductionStockServiceImpl.java | 279 ++++++++++++++++++ .../service/ProductionStockService.java | 38 +++ .../production/entity/SoFinalRollOutData.java | 166 +++++++++++ .../mapper/material/ProductionStockMapper.xml | 143 +++++++++ 6 files changed, 823 insertions(+) create mode 100644 src/main/java/com/spring/modules/material/controller/ProductionStockController.java create mode 100644 src/main/java/com/spring/modules/material/dao/ProductionStockMapper.java create mode 100644 src/main/java/com/spring/modules/material/service/Impl/ProductionStockServiceImpl.java create mode 100644 src/main/java/com/spring/modules/material/service/ProductionStockService.java create mode 100644 src/main/java/com/spring/modules/production/entity/SoFinalRollOutData.java create mode 100644 src/main/resources/mapper/material/ProductionStockMapper.xml diff --git a/src/main/java/com/spring/modules/material/controller/ProductionStockController.java b/src/main/java/com/spring/modules/material/controller/ProductionStockController.java new file mode 100644 index 0000000..eb43105 --- /dev/null +++ b/src/main/java/com/spring/modules/material/controller/ProductionStockController.java @@ -0,0 +1,142 @@ +package com.spring.modules.material.controller; + +import com.spring.common.utils.PageUtils; +import com.spring.common.utils.R; +import com.spring.modules.material.data.*; +import com.spring.modules.material.service.ProductionStockService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping(value = "/productionStock") +public class ProductionStockController { + + @Autowired + private ProductionStockService productionStockService; + + /** + * @Description TODO + * @Title searchTransHeader + * @param data + * @author rq + * @date 2024/5/31 11:45 + * @return R + * @throw + */ + @PostMapping(value="/searchTransHeader") + public R searchTransHeader(@RequestBody TransHeaderData data) { + PageUtils page = productionStockService.searchTransHeader(data); + return R.ok().put("page", page); + } + + /** + * @Description TODO + * @Title searchTransDetail + * @param data + * @author rq + * @date 2024/5/31 15:23 + * @return R + * @throw + */ + @PostMapping(value="/searchTransDetail") + public R searchTransDetail(@RequestBody TransHeaderData data){ + List rows = productionStockService.searchTransDetail(data); + return R.ok().put("rows", rows); + } + + @PostMapping(value="/searchTransDetailSub") + public R searchTransDetailSub(@RequestBody TransHeaderData data){ + List rows = productionStockService.searchTransDetailSub(data); + return R.ok().put("rows", rows); + } + + + @PostMapping(value="/getWareHouseList") + public R getWareHouseList(@RequestBody WareHouseSearchOutData data){ + List rows = productionStockService.getWareHouseList(data); + return R.ok().put("rows", rows); + } + /** + * @Description 保存入库单抬头 + * @Title saveTransHeaderData + * @param data + * @author rq + * @date 2024/5/31 17:37 + * @return R + * @throw + */ + @PostMapping(value="/saveTransHeaderData") + public R saveTransHeaderData(@RequestBody TransHeaderData data) { + String result= productionStockService.saveTransHeaderData(data); + return R.ok().put("transNo",result); + } + /** + * @Description TODO + * @Title searchTransDetailAndSubCach + * @param data + * @author rq + * @date 2024/6/4 11:31 + * @return R + * @throw + */ + @PostMapping(value="/searchTransDetailAndSubCach") + public R searchTransDetailAndSubCach(@RequestBody TransHeaderData data) { + TransHeaderData row= productionStockService.searchTransHeaderData(data); + List rows =productionStockService.searchTransDetailsubCachData(data); + return R.ok().put("row",row).put("rows",rows); + } + /** + * @Description 手工创建缓存卷 + * @Title createNewCachRoll + * @param data + * @author rq + * @date 2024/6/4 14:16 + * @return R + * @throw + */ + @PostMapping(value="/saveStockCach") + public R saveStockCach(@RequestBody TransDetailsubCachData data) { + String reStr= productionStockService.saveStockCach(data); + return R.ok().put("str",reStr); + } + @PostMapping(value="/deleteSubCach") + public R deleteSubCach(@RequestBody TransDetailsubCachData data) { + productionStockService.deleteSubCach(data); + return R.ok(); + } + + /** + * @Description TODO + * @Title finalSaveTransHeaderDetail + * @param data + * @author rq + * @date 2024/6/4 15:48 + * @return R + * @throw + */ + @PostMapping(value="/finalSaveTransHeaderDetail") + public R finalSaveTransHeaderDetail(@RequestBody TransHeaderData data) { + productionStockService.finalSaveTransHeaderDetail(data); + return R.ok(); + } + /** + * @Description 删除入库主表 + * @Title deleteTransHeaderData + * @param data + * @author rq + * @date 2024/6/5 14:55 + * @return R + * @throw + */ + @PostMapping(value="/deleteTransHeaderData") + public R deleteTransHeaderData(@RequestBody TransHeaderData data) { + productionStockService.deleteTransHeaderData(data); + return R.ok(); + } + +} diff --git a/src/main/java/com/spring/modules/material/dao/ProductionStockMapper.java b/src/main/java/com/spring/modules/material/dao/ProductionStockMapper.java new file mode 100644 index 0000000..e4c2488 --- /dev/null +++ b/src/main/java/com/spring/modules/material/dao/ProductionStockMapper.java @@ -0,0 +1,55 @@ +package com.spring.modules.material.dao; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.spring.modules.material.data.*; +import com.spring.modules.production.entity.SoFinalRollOutData; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Mapper +@Repository +public interface ProductionStockMapper { + + IPage searchTransHeader(Page page, @Param("query") TransHeaderData data); + + + List searchTransDetail(TransHeaderData data); + + List searchTransDetailSub(TransHeaderData data); + + List getWareHouseList(WareHouseSearchOutData inData); + + TransHeaderData searchTransHeaderData(TransHeaderData data); + + List searchTransDetailsubCachData(TransHeaderData inData); + + void saveIssureCach(TransDetailsubCachData data); + + List getDetailDataByCach(TransHeaderData inData); + + Double getNextTransHeaderSeqNo (TransHeaderData inData); + + void saveTransDetailData(TransDetailData inData); + + + + void batchInsertTransDetailSub( List inlist); + + void deleteTransCach(TransHeaderData inData); + + void deleteSubCach(TransDetailsubCachData inData); + + void deleteTransHeaderData(TransHeaderData inData); + + void updateTransHeader(TransHeaderData inData); + + List checkTransDetailSubIsScan(@Param("site") String site,@Param("rollNo")String rollNo); + + SoFinalRollOutData getFinalRoll(@Param("site") String site,@Param("rollNo")String rollNo); + + void updateFinalRollStatus(@Param("site") String site,@Param("rollNo")String rollNo,@Param("statusCode") Integer statusCode,@Param("status")String status); +} diff --git a/src/main/java/com/spring/modules/material/service/Impl/ProductionStockServiceImpl.java b/src/main/java/com/spring/modules/material/service/Impl/ProductionStockServiceImpl.java new file mode 100644 index 0000000..740d484 --- /dev/null +++ b/src/main/java/com/spring/modules/material/service/Impl/ProductionStockServiceImpl.java @@ -0,0 +1,279 @@ +package com.spring.modules.material.service.Impl; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.spring.common.utils.DateUtil; +import com.spring.common.utils.PageUtils; +import com.spring.modules.base.dao.NormalSearchMapper; +import com.spring.modules.base.entity.InventoryStockRoll; +import com.spring.modules.base.service.InventoryStockRollService; +import com.spring.modules.base.service.TransNoControlService; +import com.spring.modules.material.dao.ProductionStockMapper; +import com.spring.modules.material.data.*; +import com.spring.modules.material.service.IssureSoService; +import com.spring.modules.material.service.ProductionStockService; +import com.spring.modules.production.entity.SoFinalRollOutData; +import com.spring.modules.production.mapper.ShopOrderMapper; +import com.spring.modules.production.vo.ShopOrderVo; +import com.spring.modules.report.dao.ProcedureDao; +import com.spring.modules.sys.entity.SysUserEntity; +import org.apache.shiro.SecurityUtils; +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.Date; +import java.util.List; +import java.util.Map; + +@Service +public class ProductionStockServiceImpl implements ProductionStockService { + @Autowired + private InventoryStockRollService inventoryStockRollService; + @Autowired + private ShopOrderMapper shopOrderMapper; + @Autowired + private ProcedureDao procedureDao; + @Autowired + private NormalSearchMapper normalSearchMapper; + @Autowired + private ProductionStockMapper productionStockMapper; + @Autowired + private TransNoControlService transNoControlService; + @Override + public PageUtils searchTransHeader(TransHeaderData data) { + IPage resultList = this.productionStockMapper.searchTransHeader(new Page(data.getPage(), data.getLimit()), data); + return new PageUtils(resultList); + } + + @Override + public List searchTransDetail(TransHeaderData data){ + return productionStockMapper.searchTransDetail(data); + } + + @Override + public List searchTransDetailSub(TransHeaderData data){ + return productionStockMapper.searchTransDetailSub(data); + } + + @Override + public List getWareHouseList(WareHouseSearchOutData inData){ + return productionStockMapper.getWareHouseList(inData); + } + + @Override + @Transactional + public String saveTransHeaderData(TransHeaderData inData){ + ShopOrderVo shopOrder=new ShopOrderVo(); + shopOrder.setSite(inData.getSite()); + shopOrder.setOrderNo(inData.getOrderRef1()); + List searchShopOrder = shopOrderMapper.selectShopOrderList(shopOrder); + if(searchShopOrder.size()==0){ + throw new RuntimeException("生产订单不存在!"); + } + + if("0".equals(inData.getTransNo())){ + // 公共参数 + String site = inData.getSite(); + String wareHouseId = inData.getWarehouseID(); + String transTypeDb = "SR"; + String transDate = DateUtil.getStringDate(inData.getTransDate(),"yyyy-MM-dd"); + String userId = inData.getEnterBy(); + String receiver = inData.getReceiver(); + String partnerType = ""; + String partnerID = ""; + String remark=""; + String orderNo=inData.getOrderRef1(); + String projectID=""; + List params = new ArrayList<>(); + params.add(site); + params.add(wareHouseId); + params.add(transTypeDb); + params.add(transDate); + params.add(userId); + params.add(receiver); + params.add(partnerType); + params.add(partnerID); + params.add(remark); + params.add(orderNo); + params.add(projectID); + // 执行方法 + List> resultList = procedureDao.getProcedureData("LNJ_Create_TransHeader", params); + String code = String.valueOf(resultList.get(0).get("result_code")); + if ("400".equalsIgnoreCase(code)) { + String msg = String.valueOf(resultList.get(0).get("result_msg")); + throw new RuntimeException(msg); + } + return String.valueOf(resultList.get(0).get("result_msg")); + + }else { + List detailList= productionStockMapper.searchTransDetail(inData); + if(detailList.size()>0){ + throw new RuntimeException("入库单有明细记录无法修改"); + } + List searchTransDetailsubCachData= productionStockMapper.searchTransDetailsubCachData(inData); + if(searchTransDetailsubCachData.size()>0){ + throw new RuntimeException("入库单有扫描标签记录无法修改"); + } + // if(inData.getPartnerID()!=null&&!"".equals(inData.getPartnerID())){ + // Supplier checkSupplier=new Supplier(); + // checkSupplier.setSite(inData.getSite()); + // checkSupplier.setActive("Y"); + // checkSupplier.setSupplierID(inData.getPartnerID()); + // List checkSupplierList=normalSearchMapper.getSupplierListForSearch(checkSupplier); + // if(checkSupplierList.size()==0){ + // throw new RuntimeException("供应商不可用或者不存在"); + // } + // } + SysUserEntity sysUserEntity=new SysUserEntity(); + sysUserEntity.setUsername(inData.getReceiver()); + List getUserListForSearch=normalSearchMapper.getUserListForSearch(sysUserEntity); + if(getUserListForSearch.size()==0){ + throw new RuntimeException("经手人不可用或者不存在"); + } + productionStockMapper.updateTransHeader(inData); + return inData.getTransNo(); + } + } + + + @Override + public TransHeaderData searchTransHeaderData(TransHeaderData inData){ + return productionStockMapper.searchTransHeaderData(inData); + + } + + @Override + public List searchTransDetailsubCachData(TransHeaderData inData){ + return productionStockMapper.searchTransDetailsubCachData(inData); + + } + + @Override + @Transactional + public String saveStockCach(TransDetailsubCachData inData){ + TransHeaderData searchData=new TransHeaderData(); + searchData.setSite(inData.getSite()); + searchData.setTransNo(inData.getTransNo()); + TransHeaderData transHeaderData=productionStockMapper.searchTransHeaderData(searchData); + if(transHeaderData==null){ + throw new RuntimeException("入库单号有误!"); + } + // List InventoryStockRollList = inventoryStockRollService.lambdaQuery() + // .eq(InventoryStockRoll::getSite, inData.getSite()).gt(InventoryStockRoll::getQtyOnHand,0) + // .eq(InventoryStockRoll::getRollNo,inData.getRollNo()).list(); + // if(InventoryStockRollList.size()==0){ + // throw new RuntimeException("卷号不存在或者不在库!"); + // } + SoFinalRollOutData getFinalRoll=productionStockMapper.getFinalRoll(inData.getSite(),inData.getRollNo()); + if(getFinalRoll==null){ + throw new RuntimeException("卷号不存在!"); + } + if(getFinalRoll.getStatusCode()!=0){ + throw new RuntimeException("卷状态不为已创建无法入库!"); + } + ShopOrderVo shopOrder=new ShopOrderVo(); + shopOrder.setSite(inData.getSite()); + shopOrder.setOrderNo(inData.getOrderNo()); + List searchShopOrder = shopOrderMapper.selectShopOrderList(shopOrder); + if(searchShopOrder.size()==0){ + throw new RuntimeException("生产订单不存在!"); + } + if (!getFinalRoll.getOrderNo().equals(searchShopOrder.get(0).getOrderNo())) { + throw new RuntimeException("该卷不属于入库单所选的生产订单!"); + } + // if (!getFinalRoll.getPartNo().equals(searchShopOrder.get(0).getPartNo())) { + // throw new RuntimeException("卷的物料与生产订单不符!"); + // } + + SysUserEntity sysUserEntity = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); + List searchTransDetailSub=productionStockMapper.checkTransDetailSubIsScan(inData.getSite(),inData.getRollNo()); + if(searchTransDetailSub.size()>0){ + throw new RuntimeException("该卷号已被入库单号:"+searchTransDetailSub.get(0).getTransNo()+"扫描进缓存,无法再次扫描!"); + } + + + TransDetailsubCachData saveData=new TransDetailsubCachData(); + saveData.setSite(inData.getSite()); + saveData.setTransNo(inData.getTransNo()); + saveData.setPartNo(getFinalRoll.getPartNo()); + saveData.setRollNo(getFinalRoll.getFinalRollNo()); + saveData.setRollQty(new BigDecimal(getFinalRoll.getRollQty())); + saveData.setBatchNo(inData.getOrderNo()+ DateUtil.getStringDate(new Date(),"yyyyMMdd")); + saveData.setLocationID(inData.getLocationID()); + saveData.setManufactureDate(getFinalRoll.getCreatedDate()); + saveData.setExpiredDate(null); + saveData.setEnterBy(sysUserEntity.getUsername()); + productionStockMapper.saveIssureCach(saveData); + String reStr=""; + return reStr; + } + @Override + public void deleteSubCach(TransDetailsubCachData inData){ + productionStockMapper.deleteSubCach(inData); + } + + @Override + public void deleteTransHeaderData(TransHeaderData inData){ + List detailList= productionStockMapper.searchTransDetail(inData); + if(detailList.size()>0){ + throw new RuntimeException("入库单有明细记录无法删除"); + } + List searchTransDetailsubCachData= productionStockMapper.searchTransDetailsubCachData(inData); + if(searchTransDetailsubCachData.size()>0){ + throw new RuntimeException("入库单有扫描标签记录无法删除"); + } + productionStockMapper.deleteTransHeaderData(inData); + } + + + @Override + @Transactional + public void finalSaveTransHeaderDetail(TransHeaderData inData){ + SysUserEntity sysUserEntity = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); + String userName=sysUserEntity.getUsername(); + inData.setEnterName(userName); + // + List transDetailData=productionStockMapper.getDetailDataByCach(inData); + if(transDetailData.size()==0){ + throw new RuntimeException("没有缓存卷需要保存"); + } + for (int i = 0; i < transDetailData.size(); i++) { + Double getNextTransHeaderSeqNo=productionStockMapper.getNextTransHeaderSeqNo(inData); + transDetailData.get(i).setItemNo(getNextTransHeaderSeqNo); + productionStockMapper.saveTransDetailData(transDetailData.get(i)); + } + TransHeaderData getHeader= productionStockMapper.searchTransHeaderData(inData); + List subData=productionStockMapper.searchTransDetailsubCachData(inData); + List inList=new ArrayList<>(); + for (int i = 0; i < transDetailData.size(); i++) { + Double seqNo=0.0; + for (int j = 0; j searchTransDetail(TransHeaderData data); + + List searchTransDetailSub(TransHeaderData data); + + List getWareHouseList(WareHouseSearchOutData inData); + + String saveTransHeaderData(TransHeaderData data); + + /** + * @Description TODO + * @Title searchTransDetail + * @param inData + * @author rq + * @date 2024/6/4 11:34 + * @return TransDetailData + * @throw + */ + TransHeaderData searchTransHeaderData(TransHeaderData inData); + + List searchTransDetailsubCachData(TransHeaderData inData); + + String saveStockCach(TransDetailsubCachData data); + + void finalSaveTransHeaderDetail(TransHeaderData inData); + + void deleteSubCach(TransDetailsubCachData data); + void deleteTransHeaderData(TransHeaderData inData); +} diff --git a/src/main/java/com/spring/modules/production/entity/SoFinalRollOutData.java b/src/main/java/com/spring/modules/production/entity/SoFinalRollOutData.java new file mode 100644 index 0000000..197728d --- /dev/null +++ b/src/main/java/com/spring/modules/production/entity/SoFinalRollOutData.java @@ -0,0 +1,166 @@ +package com.spring.modules.production.entity; + +import org.apache.ibatis.type.Alias; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Date; + +@Alias("SoFinalRollOutData") +public class SoFinalRollOutData { + /** + * + */ + private Integer id; + + /** + * + */ + private String site; + + /** + * + */ + private String orderNo; + + /** + * + */ + private String partNo; + + /** + * + */ + private String seqNo; + + /** + * + */ + private String finalRollNo; + + /** + * + */ + private Integer rollQty; + + /** + * + */ + private Integer statusCode; + + /** + * + */ + private String status; + + /** + * + */ + private String createdBy; + + /** + * + */ + private Date createdDate; + + /** + * 标签使用的日期 + */ + private Date labelDate; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getSite() { + return site; + } + + public void setSite(String site) { + this.site = site; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getPartNo() { + return partNo; + } + + public void setPartNo(String partNo) { + this.partNo = partNo; + } + + public String getSeqNo() { + return seqNo; + } + + public void setSeqNo(String seqNo) { + this.seqNo = seqNo; + } + + public String getFinalRollNo() { + return finalRollNo; + } + + public void setFinalRollNo(String finalRollNo) { + this.finalRollNo = finalRollNo; + } + + public Integer getRollQty() { + return rollQty; + } + + public void setRollQty(Integer rollQty) { + this.rollQty = rollQty; + } + + public Integer getStatusCode() { + return statusCode; + } + + public void setStatusCode(Integer statusCode) { + this.statusCode = statusCode; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public Date getCreatedDate() { + return createdDate; + } + + public void setCreatedDate(Date createdDate) { + this.createdDate = createdDate; + } + + public Date getLabelDate() { + return labelDate; + } + + public void setLabelDate(Date labelDate) { + this.labelDate = labelDate; + } +} + diff --git a/src/main/resources/mapper/material/ProductionStockMapper.xml b/src/main/resources/mapper/material/ProductionStockMapper.xml new file mode 100644 index 0000000..c8c038b --- /dev/null +++ b/src/main/resources/mapper/material/ProductionStockMapper.xml @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + insert into TransDetailsub_cach(Site,TransNo,PartNo,RollNo,RollQty,BatchNo,wdrNo,LocationID,ManufactureDate, + ExpiredDate,enterBy,enterDate) + values(#{site},#{transNo},#{partNo},#{rollNo},#{rollQty},#{batchNo},#{wdrNo},#{locationID},#{manufactureDate}, + #{expiredDate},#{enterBy},GetDate()) + + + + + + + + insert into TransDetail(TransNo,Site,ItemNo,PartNo,LocationID,TransQty,Direction,BatchNo,StandCost, + ActualCost,Price,Freight,Duty,OrderRef1,VitualPartFlag,ManufactureDate, + ExpiredDate,TransQty2,wdr_no,enterDate,enterBy) + values(#{transNo},#{site},#{itemNo,jdbcType=DOUBLE},#{partNo},#{locationID},#{transQty},#{direction},#{batchNo},#{standCost}, + #{actualCost},#{price},#{freight},#{duty},#{orderRef1},#{vitualPartFlag},#{manufactureDate}, + #{expiredDate},#{transQty2},#{wdrNo},GetDate(),#{enterBy}) + + + + + insert into TransDetailsub + (TransNo,Site,SeqNo,itemNo,LocationID,BatchNo,BoxNo,RollNo,RollQty,orderRef1) VALUES + + (#{item.transNo}, #{item.site}, #{item.seqNo}, #{item.itemNo}, #{item.locationID}, #{item.batchNo},'', #{item.rollNo,jdbcType=VARCHAR}, #{item.rollQty}, #{item.orderRef1}) + + + + + delete from TransDetailsub_cach where TransNo=#{transNo} and site=#{site} + + + + + + delete from transHeader where site=#{site} and transNo=#{transNo} + + + + update transHeader set WarehouseID=#{warehouseID} ,PartnerID=#{partnerID},Receiver=#{receiver},orderRef1=#{orderRef1},transDate=#{transDate} where site=#{site} and transNo=#{transNo} + + + + + + + update so_final_roll set status_code=#{statusCode,jdbcType=INTEGER},status=#{status} + where site=#{site} and final_roll_no=#{rollNo} + + \ No newline at end of file