diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWcsServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWcsServiceImpl.java index d282558..5f53f63 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWcsServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWcsServiceImpl.java @@ -28,6 +28,7 @@ import com.ruoyi.out.outStockout.service.IOutStockoutService; import com.ruoyi.pda.domain.TrayCodeMsg; import com.ruoyi.pda.mapper.PdaMapper; import com.ruoyi.pda.service.PdaService; +import com.ruoyi.stock.stock.service.IBasStockService; import lombok.extern.slf4j.Slf4j; import org.aspectj.weaver.loadtime.Aj; import org.springframework.beans.factory.annotation.Autowired; @@ -56,6 +57,8 @@ public class ToWcsServiceImpl implements IToWcsService { private PdaService pdaService; @Autowired private PdaMapper pdaMapper; + @Autowired + private IBasStockService basStockService; @Autowired private IBasCargoSpaceWeightRuleService basCargoSpaceWeightRuleService; @@ -67,7 +70,7 @@ public class ToWcsServiceImpl implements IToWcsService { @Override - @Scheduled(fixedDelay = 3000) + //@Scheduled(fixedDelay = 3000) public void pushOutMydoJob() { //查询所有未推送的料箱出库作业 List list = new ArrayList<>(); @@ -76,6 +79,7 @@ public class ToWcsServiceImpl implements IToWcsService { list.add("22"); list.add("23"); list.add("24"); + list.add("25"); list.add("26"); for (int i = 1; i <= 6; i++) { MydoJob mydoJobParam = new MydoJob(); @@ -318,7 +322,7 @@ public class ToWcsServiceImpl implements IToWcsService { MydoJob outJob = outMydoJobs.get(0); outJob.setExecutionPhase("2"); mydoJobService.updateMydoJob(outJob); - if ("24".equals(outJob.getInOrOut())) { + if ("24".equals(outJob.getInOrOut()) || "25".equals(outJob.getInOut())) { String[] jobIds = new String[]{outJob.getJobId()}; mydoJobService.OuthandFinish(jobIds); } @@ -359,16 +363,20 @@ public class ToWcsServiceImpl implements IToWcsService { @Override public AjaxResult reMaterial(ReMaterialParam reMaterialParam) { - //重新分配物料 MydoJob mydoJob = mydoJobService.selectMydoJobByJobId(reMaterialParam.getJobId()); - MydoJobDetail mydoJobDetailParam = new MydoJobDetail(); - mydoJobDetailParam.setJobId(mydoJob.getJobId()); - List mydoJobDetails = mydoJobDetailService.selectMydoJobDetailList(mydoJobDetailParam); - String stockOutId = mydoJobDetails.get(0).getInOrOutId(); - // 作废作业 - mydoJobService.OuthandInvalidation(new String[]{mydoJob.getJobId()}); - //调用自动分配 - return outStockoutService.autoAllot(stockOutId); + mydoJob.setStatus("4"); + mydoJob.setFinishTime(DateUtil.formatDateTime(new Date())); + mydoJobService.updateMydoJob(mydoJob); + //标记异常货位 + String cargoSpaceId = mydoJob.getCargoSpaceId(); + BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(cargoSpaceId); + basCargoSpace.setStatus("6"); + basCargoSpaceService.updateBasCargoSpace(basCargoSpace); + //删除库存 + //basStockService.deleteKtpStockByTrayCodeAndWarehouseId(mydoJob.getTrayCode(),mydoJob.getWarehouseId()); + //删除作业 + mydoJobService.insertHistory(mydoJob.getJobId()); + return AjaxResult.success(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/bind/controller/InStockTraycodeBindMsgController.java b/ruoyi-admin/src/main/java/com/ruoyi/in/bind/controller/InStockTraycodeBindMsgController.java new file mode 100644 index 0000000..4f02481 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/bind/controller/InStockTraycodeBindMsgController.java @@ -0,0 +1,104 @@ +package com.ruoyi.in.bind.controller; + +import java.util.List; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.in.bind.domain.InStockTraycodeBindMsg; +import com.ruoyi.in.bind.service.IInStockTraycodeBindMsgService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 入库单据入库绑定Controller + * + * @author ruoyi + * @date 2026-03-20 + */ +@RestController +@RequestMapping("/trayCodeBind/trayCodeBind") +public class InStockTraycodeBindMsgController extends BaseController +{ + @Autowired + private IInStockTraycodeBindMsgService inStockTraycodeBindMsgService; + + /** + * 查询入库单据入库绑定列表 + */ + @PreAuthorize("@ss.hasPermi('trayCodeBind:trayCodeBind:list')") + @GetMapping("/list") + public TableDataInfo list(InStockTraycodeBindMsg inStockTraycodeBindMsg) + { + startPage(); + List list = inStockTraycodeBindMsgService.selectInStockTraycodeBindMsgList(inStockTraycodeBindMsg); + return getDataTable(list); + } + + /** + * 导出入库单据入库绑定列表 + */ + @PreAuthorize("@ss.hasPermi('trayCodeBind:trayCodeBind:export')") + @Log(title = "入库单据入库绑定", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, InStockTraycodeBindMsg inStockTraycodeBindMsg) + { + List list = inStockTraycodeBindMsgService.selectInStockTraycodeBindMsgList(inStockTraycodeBindMsg); + ExcelUtil util = new ExcelUtil(InStockTraycodeBindMsg.class); + util.exportExcel(response, list, "入库单据入库绑定数据"); + } + + /** + * 获取入库单据入库绑定详细信息 + */ + @PreAuthorize("@ss.hasPermi('trayCodeBind:trayCodeBind:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(inStockTraycodeBindMsgService.selectInStockTraycodeBindMsgById(id)); + } + + /** + * 新增入库单据入库绑定 + */ + @PreAuthorize("@ss.hasPermi('trayCodeBind:trayCodeBind:add')") + @Log(title = "入库单据入库绑定", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody InStockTraycodeBindMsg inStockTraycodeBindMsg) + { + return toAjax(inStockTraycodeBindMsgService.insertInStockTraycodeBindMsg(inStockTraycodeBindMsg)); + } + + /** + * 修改入库单据入库绑定 + */ + @PreAuthorize("@ss.hasPermi('trayCodeBind:trayCodeBind:edit')") + @Log(title = "入库单据入库绑定", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody InStockTraycodeBindMsg inStockTraycodeBindMsg) + { + return toAjax(inStockTraycodeBindMsgService.updateInStockTraycodeBindMsg(inStockTraycodeBindMsg)); + } + + /** + * 删除入库单据入库绑定 + */ + @PreAuthorize("@ss.hasPermi('trayCodeBind:trayCodeBind:remove')") + @Log(title = "入库单据入库绑定", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(inStockTraycodeBindMsgService.deleteInStockTraycodeBindMsgByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/bind/domain/InStockTraycodeBindMsg.java b/ruoyi-admin/src/main/java/com/ruoyi/in/bind/domain/InStockTraycodeBindMsg.java new file mode 100644 index 0000000..951a719 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/bind/domain/InStockTraycodeBindMsg.java @@ -0,0 +1,173 @@ +package com.ruoyi.in.bind.domain; + +import java.math.BigDecimal; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 入库单据入库绑定对象 in_stock_traycode_bind_msg + * + * @author ruoyi + * @date 2026-03-20 + */ +public class InStockTraycodeBindMsg extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long id; + + /** 主单id */ + @Excel(name = "主单id") + private String inStockId; + + /** 子单id */ + @Excel(name = "子单id") + private String inStockDetailId; + + /** 托盘码 */ + @Excel(name = "托盘码") + private String trayCode; + + /** 数量 */ + @Excel(name = "数量") + private BigDecimal quantity; + + /** 位置 */ + @Excel(name = "位置") + private String location; + + /** 备用1 */ + @Excel(name = "备用1") + private String spare1; + + /** 备用2 */ + @Excel(name = "备用2") + private String spare2; + + /** 备用3 */ + @Excel(name = "备用3") + private String spare3; + + /** 备用4 */ + @Excel(name = "备用4") + private String spare4; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + + public void setInStockId(String inStockId) + { + this.inStockId = inStockId; + } + + public String getInStockId() + { + return inStockId; + } + + public void setInStockDetailId(String inStockDetailId) + { + this.inStockDetailId = inStockDetailId; + } + + public String getInStockDetailId() + { + return inStockDetailId; + } + + public void setTrayCode(String trayCode) + { + this.trayCode = trayCode; + } + + public String getTrayCode() + { + return trayCode; + } + + public void setQuantity(BigDecimal quantity) + { + this.quantity = quantity; + } + + public BigDecimal getQuantity() + { + return quantity; + } + + public void setLocation(String location) + { + this.location = location; + } + + public String getLocation() + { + return location; + } + + public void setSpare1(String spare1) + { + this.spare1 = spare1; + } + + public String getSpare1() + { + return spare1; + } + + public void setSpare2(String spare2) + { + this.spare2 = spare2; + } + + public String getSpare2() + { + return spare2; + } + + public void setSpare3(String spare3) + { + this.spare3 = spare3; + } + + public String getSpare3() + { + return spare3; + } + + public void setSpare4(String spare4) + { + this.spare4 = spare4; + } + + public String getSpare4() + { + return spare4; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("inStockId", getInStockId()) + .append("inStockDetailId", getInStockDetailId()) + .append("trayCode", getTrayCode()) + .append("quantity", getQuantity()) + .append("location", getLocation()) + .append("spare1", getSpare1()) + .append("spare2", getSpare2()) + .append("spare3", getSpare3()) + .append("spare4", getSpare4()) + .toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/bind/mapper/InStockTraycodeBindMsgMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/in/bind/mapper/InStockTraycodeBindMsgMapper.java new file mode 100644 index 0000000..8e104c2 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/bind/mapper/InStockTraycodeBindMsgMapper.java @@ -0,0 +1,66 @@ +package com.ruoyi.in.bind.mapper; + +import java.util.List; +import com.ruoyi.in.bind.domain.InStockTraycodeBindMsg; +import com.ruoyi.in.stockin.domain.TrayCodeModel; + +/** + * 入库单据入库绑定Mapper接口 + * + * @author ruoyi + * @date 2026-03-20 + */ +public interface InStockTraycodeBindMsgMapper +{ + /** + * 查询入库单据入库绑定 + * + * @param id 入库单据入库绑定主键 + * @return 入库单据入库绑定 + */ + public InStockTraycodeBindMsg selectInStockTraycodeBindMsgById(Long id); + + /** + * 查询入库单据入库绑定列表 + * + * @param inStockTraycodeBindMsg 入库单据入库绑定 + * @return 入库单据入库绑定集合 + */ + public List selectInStockTraycodeBindMsgList(InStockTraycodeBindMsg inStockTraycodeBindMsg); + + /** + * 新增入库单据入库绑定 + * + * @param inStockTraycodeBindMsg 入库单据入库绑定 + * @return 结果 + */ + public int insertInStockTraycodeBindMsg(InStockTraycodeBindMsg inStockTraycodeBindMsg); + + /** + * 修改入库单据入库绑定 + * + * @param inStockTraycodeBindMsg 入库单据入库绑定 + * @return 结果 + */ + public int updateInStockTraycodeBindMsg(InStockTraycodeBindMsg inStockTraycodeBindMsg); + + /** + * 删除入库单据入库绑定 + * + * @param id 入库单据入库绑定主键 + * @return 结果 + */ + public int deleteInStockTraycodeBindMsgById(Long id); + + /** + * 批量删除入库单据入库绑定 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteInStockTraycodeBindMsgByIds(Long[] ids); + + void deleteInStockTraycodeBindMsgByInStockDetailId(String stockinDetailId); + + List selectModelByTrayCode(String stockinGuid); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/bind/service/IInStockTraycodeBindMsgService.java b/ruoyi-admin/src/main/java/com/ruoyi/in/bind/service/IInStockTraycodeBindMsgService.java new file mode 100644 index 0000000..6314da4 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/bind/service/IInStockTraycodeBindMsgService.java @@ -0,0 +1,61 @@ +package com.ruoyi.in.bind.service; + +import java.util.List; +import com.ruoyi.in.bind.domain.InStockTraycodeBindMsg; + +/** + * 入库单据入库绑定Service接口 + * + * @author ruoyi + * @date 2026-03-20 + */ +public interface IInStockTraycodeBindMsgService +{ + /** + * 查询入库单据入库绑定 + * + * @param id 入库单据入库绑定主键 + * @return 入库单据入库绑定 + */ + public InStockTraycodeBindMsg selectInStockTraycodeBindMsgById(Long id); + + /** + * 查询入库单据入库绑定列表 + * + * @param inStockTraycodeBindMsg 入库单据入库绑定 + * @return 入库单据入库绑定集合 + */ + public List selectInStockTraycodeBindMsgList(InStockTraycodeBindMsg inStockTraycodeBindMsg); + + /** + * 新增入库单据入库绑定 + * + * @param inStockTraycodeBindMsg 入库单据入库绑定 + * @return 结果 + */ + public int insertInStockTraycodeBindMsg(InStockTraycodeBindMsg inStockTraycodeBindMsg); + + /** + * 修改入库单据入库绑定 + * + * @param inStockTraycodeBindMsg 入库单据入库绑定 + * @return 结果 + */ + public int updateInStockTraycodeBindMsg(InStockTraycodeBindMsg inStockTraycodeBindMsg); + + /** + * 批量删除入库单据入库绑定 + * + * @param ids 需要删除的入库单据入库绑定主键集合 + * @return 结果 + */ + public int deleteInStockTraycodeBindMsgByIds(Long[] ids); + + /** + * 删除入库单据入库绑定信息 + * + * @param id 入库单据入库绑定主键 + * @return 结果 + */ + public int deleteInStockTraycodeBindMsgById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/bind/service/impl/InStockTraycodeBindMsgServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/in/bind/service/impl/InStockTraycodeBindMsgServiceImpl.java new file mode 100644 index 0000000..2e4ac63 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/bind/service/impl/InStockTraycodeBindMsgServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.in.bind.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.in.bind.mapper.InStockTraycodeBindMsgMapper; +import com.ruoyi.in.bind.domain.InStockTraycodeBindMsg; +import com.ruoyi.in.bind.service.IInStockTraycodeBindMsgService; + +/** + * 入库单据入库绑定Service业务层处理 + * + * @author ruoyi + * @date 2026-03-20 + */ +@Service +public class InStockTraycodeBindMsgServiceImpl implements IInStockTraycodeBindMsgService +{ + @Autowired + private InStockTraycodeBindMsgMapper inStockTraycodeBindMsgMapper; + + /** + * 查询入库单据入库绑定 + * + * @param id 入库单据入库绑定主键 + * @return 入库单据入库绑定 + */ + @Override + public InStockTraycodeBindMsg selectInStockTraycodeBindMsgById(Long id) + { + return inStockTraycodeBindMsgMapper.selectInStockTraycodeBindMsgById(id); + } + + /** + * 查询入库单据入库绑定列表 + * + * @param inStockTraycodeBindMsg 入库单据入库绑定 + * @return 入库单据入库绑定 + */ + @Override + public List selectInStockTraycodeBindMsgList(InStockTraycodeBindMsg inStockTraycodeBindMsg) + { + return inStockTraycodeBindMsgMapper.selectInStockTraycodeBindMsgList(inStockTraycodeBindMsg); + } + + /** + * 新增入库单据入库绑定 + * + * @param inStockTraycodeBindMsg 入库单据入库绑定 + * @return 结果 + */ + @Override + public int insertInStockTraycodeBindMsg(InStockTraycodeBindMsg inStockTraycodeBindMsg) + { + return inStockTraycodeBindMsgMapper.insertInStockTraycodeBindMsg(inStockTraycodeBindMsg); + } + + /** + * 修改入库单据入库绑定 + * + * @param inStockTraycodeBindMsg 入库单据入库绑定 + * @return 结果 + */ + @Override + public int updateInStockTraycodeBindMsg(InStockTraycodeBindMsg inStockTraycodeBindMsg) + { + return inStockTraycodeBindMsgMapper.updateInStockTraycodeBindMsg(inStockTraycodeBindMsg); + } + + /** + * 批量删除入库单据入库绑定 + * + * @param ids 需要删除的入库单据入库绑定主键 + * @return 结果 + */ + @Override + public int deleteInStockTraycodeBindMsgByIds(Long[] ids) + { + return inStockTraycodeBindMsgMapper.deleteInStockTraycodeBindMsgByIds(ids); + } + + /** + * 删除入库单据入库绑定信息 + * + * @param id 入库单据入库绑定主键 + * @return 结果 + */ + @Override + public int deleteInStockTraycodeBindMsgById(Long id) + { + return inStockTraycodeBindMsgMapper.deleteInStockTraycodeBindMsgById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/controller/InStockinController.java b/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/controller/InStockinController.java index 72df758..10d798b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/controller/InStockinController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/controller/InStockinController.java @@ -12,6 +12,7 @@ import com.ruoyi.in.stockin.domain.InStockin; import com.ruoyi.in.stockin.domain.vo.InstockInVo; import com.ruoyi.in.stockin.service.IInStockinService; import com.ruoyi.in.stockinfinish.service.IInStockinFinishService; +import com.ruoyi.search.ViewOutJobFlow.domain.ViewOutJobFlow; import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -107,4 +108,12 @@ public class InStockinController extends BaseController { return toAjax(inStockinService.deleteInStockinByStockinGuids(stockinGuids)); } + + @PreAuthorize("@ss.hasPermi('in:stockIn:productBack')") + @Log(title = "生成退货入库单据", businessType = BusinessType.INSERT) + @PostMapping("/productBack") + public AjaxResult productBack(@RequestBody List list) + { + return inStockinService.productBack(list); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/domain/TrayCodeModel.java b/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/domain/TrayCodeModel.java new file mode 100644 index 0000000..07520e0 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/domain/TrayCodeModel.java @@ -0,0 +1,14 @@ +package com.ruoyi.in.stockin.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TrayCodeModel { + + private String trayCode; + private String model; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/service/IInStockinService.java b/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/service/IInStockinService.java index 6d1c8e1..1c1b54a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/service/IInStockinService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/service/IInStockinService.java @@ -3,6 +3,7 @@ package com.ruoyi.in.stockin.service; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.in.stockin.domain.InStockin; import com.ruoyi.in.stockin.domain.vo.InstockInVo; +import com.ruoyi.search.ViewOutJobFlow.domain.ViewOutJobFlow; import java.util.List; @@ -72,4 +73,6 @@ public interface IInStockinService public int deleteInStockinByStockinGuid(String stockinGuid); public List selectStockinByDetail(String stockinDetailId); + + AjaxResult productBack(List list); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/service/impl/InStockinServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/service/impl/InStockinServiceImpl.java index b096ded..c164552 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/service/impl/InStockinServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/stockin/service/impl/InStockinServiceImpl.java @@ -5,11 +5,13 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import com.ruoyi.bas.BasProduct.domain.BasProduct; import com.ruoyi.bas.basJobId.service.IBasJobIdService; -import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.in.bind.domain.InStockTraycodeBindMsg; +import com.ruoyi.in.bind.mapper.InStockTraycodeBindMsgMapper; import com.ruoyi.in.stockin.domain.InStockin; import com.ruoyi.in.stockin.domain.vo.InstockInVo; import com.ruoyi.in.stockin.mapper.InStockinMapper; @@ -18,12 +20,17 @@ import com.ruoyi.in.stockindetail.domain.InStockinDetail; import com.ruoyi.in.stockindetail.service.IInStockinDetailService; import com.ruoyi.mes.callback.domain.MesBillCallback; import com.ruoyi.mes.callback.service.IMesBillCallbackService; +import com.ruoyi.search.ViewOutJobFlow.domain.ViewOutJobFlow; +import com.ruoyi.stock.stock.domain.BasStock; +import com.ruoyi.stock.stock.service.IBasStockService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.List; +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; /** * 入库单据Service业务层处理 @@ -43,6 +50,12 @@ public class InStockinServiceImpl implements IInStockinService private IBasJobIdService iBasJobIdService; @Autowired private IMesBillCallbackService mesBillCallbackService; + @Autowired + private IBasJobIdService basJobIdService; + @Autowired + private InStockTraycodeBindMsgMapper inStockTraycodeBindMsgMapper; + @Autowired + private IBasStockService basStockService; /** * 查询入库单据 @@ -66,9 +79,26 @@ public class InStockinServiceImpl implements IInStockinService //@DataScope(warehouseAlias = "is2") public List selectInStockinList(InStockin inStockin) { - /*if (!"admin".equals(SecurityUtils.getUsername())){ - inStockin.setDepartmentNo(cn.hutool.core.convert.Convert.toStr(SecurityUtils.getDeptId())); - }*/ + if (!"admin".equals(SecurityUtils.getUsername())) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + List roles = loginUser.getUser().getRoles(); + if (CollUtil.isEmpty(roles)) { + //如果未设置角色 ,直接返回空列表 + return new ArrayList<>(); + } + //入库需要查看本部门任务 + Optional first = roles.stream().filter(x -> "role1".equals(x.getRoleKey()) || "role3".equals(x.getRoleKey())).findFirst(); + if (first.isPresent()) { + //二联合普通人员 + inStockin.setWarehouseId("02"); + } + Optional first1 = roles.stream().filter(x -> "role2".equals(x.getRoleKey()) || "role4".equals(x.getRoleKey())).findFirst(); + if (first1.isPresent()) { + //三联合普通人员 + inStockin.setWarehouseId("01"); + } + + } return inStockinMapper.selectInStockinList(inStockin); } @@ -129,7 +159,7 @@ public class InStockinServiceImpl implements IInStockinService inStockin.setWarehouseId(inStockinVo.getWarehouseId()); inStockin.setStatus("1"); inStockin.setStockSource(inStockinVo.getStockSource()); - inStockin.setSpare1(inStockinVo.getProductType()); + //inStockin.setSpare1(inStockinVo.getProductType()); inStockin.setSpare5(inStockinVo.getRemark()); inStockinMapper.insertInStockin(inStockin); for (int i = 1; i <= productVoList.size(); i++) { @@ -177,19 +207,102 @@ public class InStockinServiceImpl implements IInStockinService if (!"3".equals(old.getStatus())){ throw new RuntimeException("单据状态非正执行状态!"); } - //对比扫码数量 与实际入库数量是否一致 + //查询单据信息 修改结束日期 InStockinDetail inStockinDetailParam = new InStockinDetail(); inStockinDetailParam.setStockinGuid(inStockin.getStockinGuid()); - List list = iInStockinDetailService.selectInStockinDetailList(inStockinDetailParam); - if (CollUtil.isNotEmpty(list)){ - boolean b = list.stream().allMatch(x -> x.getAssignNum().equals(x.getScanNum())); - if (!b){ - throw new RuntimeException("扫码数量与实际入库数量不一致!"); - } - } inStockin.setFinishDate(DateUtil.formatDateTime(DateUtil.date())); inStockinMapper.updateInStockin(inStockin); + //查询子单信息 生成库存列表 + List list = iInStockinDetailService.selectInStockinDetailList(inStockinDetailParam); + InStockTraycodeBindMsg param = new InStockTraycodeBindMsg(); + param.setInStockId(inStockin.getStockinGuid()); + //查询子单绑定信息 + List inStockTraycodeBindMsgs = inStockTraycodeBindMsgMapper.selectInStockTraycodeBindMsgList(param); + Map> detailTrayCodeBindMap = inStockTraycodeBindMsgs.stream().collect(Collectors.groupingBy(InStockTraycodeBindMsg::getInStockDetailId)); + List basStockList = new ArrayList<>(); + for (InStockinDetail inStockinDetail : list) { + List inStockTraycodeBindMsgList = detailTrayCodeBindMap.get(inStockinDetail.getStockinDetailId()); + for (InStockTraycodeBindMsg inStockTraycodeBindMsg : inStockTraycodeBindMsgList) { + String location = inStockTraycodeBindMsg.getLocation(); + if ("直发".equals(location)) { + //todo 未入库 直接生产 直接生成出库记录并回传 + } else { + //根据托盘码 判断是平库入库还是立体库入库 + //查询托盘入库货位 + List oldBasStockList = basStockService.selectBasStockByTrayCode(inStockTraycodeBindMsg.getTrayCode()); + //如果是4位数字 必须存在托盘对应库位 如果不是4位数字则证明是平库 货位就是托盘码 + if (CollUtil.isEmpty(oldBasStockList) && is4DigitNumber(inStockTraycodeBindMsg.getTrayCode())) { + throw new RuntimeException(inStockTraycodeBindMsg.getTrayCode() + "尚未入库,查询不到库存"); + } + //查询 合同号 产品号 代号 台次 物料编码 一致的老库存 进行数量合并 + Optional sameStock = oldBasStockList.stream().filter(x -> + inStockinDetail.getSpare6().equals(x.getOrderId()) && + inStockinDetail.getSpare7().equals(x.getPower()) && + inStockinDetail.getSpare9().equals(x.getDistribution()) && + inStockinDetail.getSpare5().equals(x.getSpare5()) && + inStockinDetail.getProductId().equals(x.getProductId()) + ).findFirst(); + if (sameStock.isPresent()) { + //存在相同合同号 产品号 代号 台次 物料编码的库存 + BasStock basStock = sameStock.get(); + BigDecimal oldQuantity = Convert.toBigDecimal(basStock.getQuantity()); + BigDecimal quantity = inStockTraycodeBindMsg.getQuantity(); + BigDecimal newQuantity = oldQuantity.add(quantity); + basStock.setQuantity(Convert.toStr(newQuantity)); + basStockService.updateBasStock(basStock); + } else { + //不存在,生成新库存 + BasStock stock = new BasStock(); + stock.setStockId(basJobIdService.getJobId("KC")); + if (is4DigitNumber(inStockTraycodeBindMsg.getTrayCode())) { + stock.setCargoSpaceId(oldBasStockList.get(0).getCargoSpaceId()); + } else { + stock.setCargoSpaceId(inStockTraycodeBindMsg.getTrayCode()); + } + stock.setStockStatus("1"); + stock.setOutQuantity("0"); + stock.setProductStatus("0"); + //stock.setLotNo(mydoJobDetail.getLotNo()); + stock.setInDate(DateUtil.formatDateTime(new Date())); + stock.setProductGuid(inStockinDetail.getProductGuid()); + stock.setQuantity(Convert.toStr(inStockTraycodeBindMsg.getQuantity())); + //stock.setJobId(mydoJob.getJobId()); + stock.setTrayCode(inStockTraycodeBindMsg.getTrayCode()); + stock.setWarehouseId(old.getWarehouseId()); + stock.setProductId(inStockinDetail.getProductId()); + stock.setStockinId(inStockinDetail.getStockinId()); + stock.setStockinDetailId(inStockinDetail.getStockinDetailId()); + stock.setInType(old.getInType()); + //stock.setLotNo(mydoJobDetail.getLotNo()); + stock.setProductName(inStockinDetail.getProductName()); + //合同号 + stock.setOrderId(inStockinDetail.getSpare6()); + //产品号 + stock.setPower(inStockinDetail.getSpare7()); + //代号 + stock.setDistribution(inStockinDetail.getSpare9()); + //台次 + stock.setSpare5(inStockinDetail.getSpare5()); + //部门 + stock.setModel(SecurityUtils.getDeptId().toString()); + basStockList.add(stock); + } + } + } + //删除当前子单绑定信息 + inStockTraycodeBindMsgMapper.deleteInStockTraycodeBindMsgByInStockDetailId(inStockinDetail.getStockinDetailId()); + //修改子单入库数量 + iInStockinDetailService.updateInStockinDetail(inStockinDetail); + } + if (CollUtil.isNotEmpty(basStockList)) { + //插入库存 + basStockService.insertBasStockList(basStockList); + + //删除新生成库存的托盘的空托盘库存记录 + basStockService.deleteKtpStockByList(basStockList, inStockin.getWarehouseId()); + } + //插入回传信息 if ("3".equals(old.getStockSource())){ //插入MES上位系统回传表 for (InStockinDetail inStockinDetail : list) { @@ -211,13 +324,31 @@ public class InStockinServiceImpl implements IInStockinService }else if ("2".equals(old.getStockSource())){ //插入ERP上位系统回传表 } - //插入历史 insertInStockinHistory(inStockin); } return AjaxResult.success(); } + + /** + * 判断字符串是否为4位数字 + * + * @param str 待校验的字符串 + * @return true=是4位数字,false=不是 + */ + public boolean is4DigitNumber(String str) { + // 1. 先判空,避免空指针异常 + if (str == null) { + return false; + } + // 2. 正则表达式 ^\\d{4}$ 含义: + // ^ 表示字符串开始 + // \\d{4} 表示恰好4个数字(\\d代表数字,{4}表示数量为4) + // $ 表示字符串结束 + return str.matches("^\\d{4}$"); + } + /** * 插入入库单据 入库子单据历史 * 删除入库单据 @@ -261,4 +392,52 @@ public class InStockinServiceImpl implements IInStockinService public List selectStockinByDetail(String stockinDetailId) { return inStockinMapper.selectStockinByDetail(stockinDetailId); } + + @Override + @Transactional(rollbackFor = Exception.class) + public AjaxResult productBack(List list) { + + String warehouseId = list.get(0).getWarehouseId(); + InStockin inStockin = new InStockin(); + String rkdId = iBasJobIdService.getJobId("RKD"); + inStockin.setStockinGuid(rkdId); + inStockin.setStockinId(rkdId); + inStockin.setCreateDate(DateUtil.formatDateTime(DateUtil.date())); + inStockin.setCreateManId(Convert.toStr(SecurityUtils.getUserId())); + inStockin.setDepartmentNo(Convert.toStr(SecurityUtils.getDeptId())); + inStockin.setInType("3"); + inStockin.setWarehouseId(warehouseId); + inStockin.setStatus("1"); + inStockin.setStockSource("0"); + inStockinMapper.insertInStockin(inStockin); + for (int i = 1; i <= list.size(); i++) { + ViewOutJobFlow viewOutJobFlow = list.get(i - 1); + InStockinDetail inStockinDetail = new InStockinDetail(); + //合同号 + inStockinDetail.setSpare6(viewOutJobFlow.getContract()); + //产品号 + inStockinDetail.setSpare7(viewOutJobFlow.getCases()); + //代号 + inStockinDetail.setSpare9(viewOutJobFlow.getManagementNo()); + //台次 + inStockinDetail.setSpare5(viewOutJobFlow.getUnits()); + //物料编码 + inStockinDetail.setProductGuid(viewOutJobFlow.getProductId()); + inStockinDetail.setProductId(viewOutJobFlow.getProductId()); + //数量 + inStockinDetail.setQuantity(viewOutJobFlow.getOutQuantity()); + inStockinDetail.setStockinGuid(inStockin.getStockinGuid()); + inStockinDetail.setStockinDetailId(inStockin.getStockinId() + "-" + i); + inStockinDetail.setStockinId(inStockin.getStockinId()); + iInStockinDetailService.insertInStockinDetail(inStockinDetail); + + InStockTraycodeBindMsg bindMsg = new InStockTraycodeBindMsg(); + bindMsg.setInStockId(inStockin.getStockinId()); + bindMsg.setInStockDetailId(inStockinDetail.getStockinDetailId()); + bindMsg.setTrayCode(viewOutJobFlow.getTrayCode()); + bindMsg.setQuantity(Convert.toBigDecimal(inStockinDetail.getQuantity())); + inStockTraycodeBindMsgMapper.insertInStockTraycodeBindMsg(bindMsg); + } + return AjaxResult.success(); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/controller/InStockinDetailController.java b/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/controller/InStockinDetailController.java index f6f053a..9732ff2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/controller/InStockinDetailController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/controller/InStockinDetailController.java @@ -51,6 +51,11 @@ public class InStockinDetailController extends BaseController return getDataTable(list); } + @PostMapping("/updateBatch") + public AjaxResult updateBatch(@RequestBody List inStockinDetailList) { + return toAjax(inStockinDetailService.updateInStockinDetailList(inStockinDetailList)); + } + /** * 导出入库单据子表列表 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/domain/InStockinDetail.java b/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/domain/InStockinDetail.java index 8291daa..80caf3c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/domain/InStockinDetail.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/domain/InStockinDetail.java @@ -3,11 +3,14 @@ package com.ruoyi.in.stockindetail.domain; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.domain.ExtraField; +import com.ruoyi.in.bind.domain.InStockTraycodeBindMsg; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; +import java.util.List; + /** * 入库单据子表对象 in_stockin_detail * @@ -150,4 +153,6 @@ public class InStockinDetail extends BaseEntity private String warehouseId; + private List trayList; + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/service/IInStockinDetailService.java b/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/service/IInStockinDetailService.java index aef8ee6..f49a257 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/service/IInStockinDetailService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/service/IInStockinDetailService.java @@ -81,4 +81,6 @@ public interface IInStockinDetailService public InStockinDetail selectStockinByDetailById(InStockinDetail inStockinDetail); + + int updateInStockinDetailList(List inStockinDetailList); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/service/impl/InStockinDetailServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/service/impl/InStockinDetailServiceImpl.java index af30d42..0c16d47 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/service/impl/InStockinDetailServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/stockindetail/service/impl/InStockinDetailServiceImpl.java @@ -1,13 +1,17 @@ package com.ruoyi.in.stockindetail.service.impl; -import com.ruoyi.common.annotation.DataScope; +import cn.hutool.core.collection.CollUtil; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.in.bind.domain.InStockTraycodeBindMsg; +import com.ruoyi.in.bind.mapper.InStockTraycodeBindMsgMapper; import com.ruoyi.in.stockin.domain.InStockin; +import com.ruoyi.in.stockin.mapper.InStockinMapper; import com.ruoyi.in.stockindetail.domain.InStockinDetail; import com.ruoyi.in.stockindetail.mapper.InStockinDetailMapper; import com.ruoyi.in.stockindetail.service.IInStockinDetailService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; @@ -23,6 +27,10 @@ public class InStockinDetailServiceImpl implements IInStockinDetailService { @Autowired private InStockinDetailMapper inStockinDetailMapper; + @Autowired + private InStockTraycodeBindMsgMapper inStockTraycodeBindMsgMapper; + @Autowired + private InStockinMapper inStockinMapper; /** * 查询入库单据子表 @@ -45,9 +53,6 @@ public class InStockinDetailServiceImpl implements IInStockinDetailService @Override public List selectInStockinDetailList(InStockinDetail inStockinDetail) { - /*for (InStockinDetail res : inStockinDetails) { - res.setExtraField(JSONUtil.toBean(res.getSpare1(), ExtraField.class)); - }*/ return inStockinDetailMapper.selectInStockinDetailList(inStockinDetail); } @@ -123,8 +128,33 @@ public class InStockinDetailServiceImpl implements IInStockinDetailService @Override //@DataScope(warehouseAlias = "ist") public InStockinDetail selectStockinByDetailById(InStockinDetail inStockinDetail) { + return inStockinDetailMapper.selectStockinByDetailById(inStockinDetail); + } - return inStockinDetailMapper.selectStockinByDetailById(inStockinDetail); + @Override + @Transactional(rollbackFor = Exception.class) + public int updateInStockinDetailList(List inStockinDetailList) { + int i =0; + if (CollUtil.isNotEmpty(inStockinDetailList)) { + InStockin inStockin = new InStockin(); + inStockin.setStockinGuid(inStockinDetailList.get(0).getStockinGuid()); + inStockin.setStatus("3"); + inStockinMapper.updateInStockin(inStockin); + for (InStockinDetail inStockinDetail : inStockinDetailList) { + List trayList = inStockinDetail.getTrayList(); + if (CollUtil.isNotEmpty(trayList)) { + inStockTraycodeBindMsgMapper.deleteInStockTraycodeBindMsgByInStockDetailId(inStockinDetail.getStockinDetailId()); + for (InStockTraycodeBindMsg inStockTraycodeBindMsg : trayList) { + inStockTraycodeBindMsg.setInStockDetailId(inStockinDetail.getStockinDetailId()); + inStockTraycodeBindMsg.setInStockId(inStockinDetail.getStockinId()); + i += inStockTraycodeBindMsgMapper.insertInStockTraycodeBindMsg(inStockTraycodeBindMsg); + } + inStockinDetailMapper.updateInStockinDetail(inStockinDetail); + } + } + } + + return i; } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/controller/OutMydoJobController.java b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/controller/OutMydoJobController.java index 192dcc7..0682852 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/controller/OutMydoJobController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/controller/OutMydoJobController.java @@ -72,6 +72,14 @@ public class OutMydoJobController extends BaseController { return mydoJobService.pointOut(stockIds,exitId,type); } + @Log(title = "指定排列层出库", businessType = BusinessType.INSERT) + @RequestMapping("/cargoSpaceOut") + @PreAuthorize("@ss.hasAnyPermi('job:outmydoJob:cargoSpaceOut,job:outmydoJob:cargoSpaceOut1,job:outmydoJob:cargoSpaceOut2')") + public AjaxResult cargoSpaceOut(@RequestParam("exitId")String exitId,@RequestParam("warehouseId")String warehouseId,@RequestParam("cargoSpaceId")String cargoSpaceId) + { + return mydoJobService.cargoSpaceOut(warehouseId,cargoSpaceId,exitId); + } + @Log(title = "修改优先级",businessType = BusinessType.UPDATE) @PostMapping("/updatePriority") diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/mapper/MydoJobMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/mapper/MydoJobMapper.java index 3c3e1ea..f809e1e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/mapper/MydoJobMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/mapper/MydoJobMapper.java @@ -74,4 +74,6 @@ public interface MydoJobMapper MydoJob selectByTrayCode(String trayCode); MydoJob selectMydoJobByEntranceId(MydoJob mydoJob); + + void cargoSpaceOut(HashMap map); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/IMydoJobService.java b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/IMydoJobService.java index aabdc82..f3b7a70 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/IMydoJobService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/IMydoJobService.java @@ -113,4 +113,8 @@ public interface IMydoJobService AjaxResult manualCompletedCheckMydoJob(MydoJob mydoJob, int i); AjaxResult updatePriority(MydoJob mydoJob); + + public void insertHistory(String jobId) ; + + AjaxResult cargoSpaceOut(String warehouseId, String cargoSpaceId, String exitId); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java index ef483c5..e4f027a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java @@ -291,13 +291,26 @@ public class MydoJobServiceImpl implements IMydoJobService { * * @param jobId */ - private void insertHistory(String jobId) { + public void insertHistory(String jobId) { mydoJobMapper.insertHistory(jobId); mydoJobDetailService.insertHistory(jobId); mydoJobMapper.deleteMydoJobByJobId(jobId); mydoJobDetailService.deleteMydoJobDetailByJobId(jobId); } + @Override + public AjaxResult cargoSpaceOut(String warehouseId, String cargoSpaceId, String exitId) { + HashMap map = new HashMap<>(); + map.put("v_warehouse_id", warehouseId); + map.put("v_exit_id", exitId); + map.put("v_cargo_space_id", cargoSpaceId); + mydoJobMapper.cargoSpaceOut(map); + if (!"10".equals(Convert.toStr(map.get("v_result")))) { + return AjaxResult.error(Convert.toStr(map.get("v_resultmsg"))); + } + return AjaxResult.success(map.get("v_resultmsg")); + } + /** * 手动完成任务表 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/mapper/BasStockMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/mapper/BasStockMapper.java index 59a1219..634524b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/mapper/BasStockMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/mapper/BasStockMapper.java @@ -75,4 +75,10 @@ public interface BasStockMapper int updateBasStockDept(BasStock basStock); int selectCountByTrayCodeAndWarehouseId(String trayCode, String warehouseId); + + List selectBasStockByTrayCode(String trayCode); + + void deleteKtpStockByList(@Param("list") List basStockList,@Param("warehouseId")String warehouseId); + + void deleteKtpStockByTrayCodeAndWarehouseId(@Param("trayCode") String trayCode, @Param("warehouseId") String warehouseId); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/service/IBasStockService.java b/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/service/IBasStockService.java index 30de663..48dc123 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/service/IBasStockService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/service/IBasStockService.java @@ -86,4 +86,10 @@ public interface IBasStockService List selectBasStockSummary(BasStock basStock); AjaxResult updateBasStockDept(BasStock basStock); + + List selectBasStockByTrayCode(String trayCode); + + void deleteKtpStockByList(List basStockList,String warehouseId); + + void deleteKtpStockByTrayCodeAndWarehouseId(String trayCode, String warehouseId); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/service/impl/BasStockServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/service/impl/BasStockServiceImpl.java index d6793f3..ff14514 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/service/impl/BasStockServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/stock/stock/service/impl/BasStockServiceImpl.java @@ -470,6 +470,21 @@ public class BasStockServiceImpl implements IBasStockService } } + @Override + public List selectBasStockByTrayCode(String trayCode) { + return basStockMapper.selectBasStockByTrayCode(trayCode); + } + + @Override + public void deleteKtpStockByList(List basStockList,String warehouseId) { + basStockMapper.deleteKtpStockByList(basStockList,warehouseId); + } + + @Override + public void deleteKtpStockByTrayCodeAndWarehouseId(String trayCode, String warehouseId) { + basStockMapper.deleteKtpStockByTrayCodeAndWarehouseId(trayCode,warehouseId); + } + /** * 新增库存信息(不记录维护记录) * diff --git a/ruoyi-admin/src/main/resources/mapper/in/InStockinDetailMapper.xml b/ruoyi-admin/src/main/resources/mapper/in/InStockinDetailMapper.xml index d34b0c3..1b1a15e 100644 --- a/ruoyi-admin/src/main/resources/mapper/in/InStockinDetailMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/in/InStockinDetailMapper.xml @@ -42,16 +42,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - - - - - - - - - + + + + + + @@ -62,8 +61,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" isd.supplier_id, isd.customer_id, bp.unit, bp.spec, isd.spare1, isd.spare2, isd.spare3, isd.spare4, isd.spare5, isd.spare6, isd.scan_num, isd.scan_num_x, isd.scan_num_j, bp.product_name, - isd.spare7,isd.spare8,isd.spare9,bs.supplier_name + isd.spare7, + isd.spare8, + isd.spare9, + bs.supplier_name, + istbm.tray_code, + istbm.location, + istbm.quantity as traycode_quantity, + istbm.id as bind_msg_id from in_stockin_detail isd + left join in_stock_traycode_bind_msg istbm on isd.stockin_detail_id = istbm.in_stock_detail_id left join bas_product bp on bp.product_id = isd.product_id left join bas_supplier bs on bs.supplier_no = isd.supplier_id diff --git a/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml b/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml index a01c79d..22333c1 100644 --- a/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml @@ -238,4 +238,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and mj.line_id = #{lineId} order by mj.create_time + diff --git a/ruoyi-admin/src/main/resources/mapper/stock/BasStockMapper.xml b/ruoyi-admin/src/main/resources/mapper/stock/BasStockMapper.xml index bb53483..483c48a 100644 --- a/ruoyi-admin/src/main/resources/mapper/stock/BasStockMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/stock/BasStockMapper.xml @@ -322,6 +322,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{stockId} + + delete from bas_stock + where tray_code in + + #{it.trayCode} + + and product_guid = 'KTP0001' and warehouse_id = #{warehouseId} + + + delete from bas_stock + where tray_code = #{trayCode} and warehouse_id = #{warehouseId} + select count(1) from bas_stock where tray_code = #{trayCode} and warehouse_id = #{warehouseId} + diff --git a/ruoyi-admin/src/main/resources/mapper/trayCodeBind/InStockTraycodeBindMsgMapper.xml b/ruoyi-admin/src/main/resources/mapper/trayCodeBind/InStockTraycodeBindMsgMapper.xml new file mode 100644 index 0000000..939556c --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/trayCodeBind/InStockTraycodeBindMsgMapper.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + select id, in_stock_id, in_stock_detail_id, tray_code, quantity, location, spare1, spare2, spare3, spare4 from in_stock_traycode_bind_msg + + + + + + + + + insert into in_stock_traycode_bind_msg + + in_stock_id, + in_stock_detail_id, + tray_code, + quantity, + location, + spare1, + spare2, + spare3, + spare4, + + + #{inStockId}, + #{inStockDetailId}, + #{trayCode}, + #{quantity}, + #{location}, + #{spare1}, + #{spare2}, + #{spare3}, + #{spare4}, + + + + + update in_stock_traycode_bind_msg + + in_stock_id = #{inStockId}, + in_stock_detail_id = #{inStockDetailId}, + tray_code = #{trayCode}, + quantity = #{quantity}, + location = #{location}, + spare1 = #{spare1}, + spare2 = #{spare2}, + spare3 = #{spare3}, + spare4 = #{spare4}, + + where id = #{id} + + + + delete from in_stock_traycode_bind_msg where id = #{id} + + + + delete from in_stock_traycode_bind_msg where id in + + #{id} + + + + delete from in_stock_traycode_bind_msg where in_stock_detail_id = #{inStockDetailId} + + diff --git a/ruoyi-ui/src/api/in/stockIn.js b/ruoyi-ui/src/api/in/stockIn.js index e5b7a0a..f17983a 100644 --- a/ruoyi-ui/src/api/in/stockIn.js +++ b/ruoyi-ui/src/api/in/stockIn.js @@ -67,4 +67,13 @@ export function confirmationStockIn(data) { }) } +// 退料入库 +export function productBack(data) { + return request({ + url: '/in/stockIn/productBack', + method: 'post', + data: data + }) +} + diff --git a/ruoyi-ui/src/api/in/stockInDetail.js b/ruoyi-ui/src/api/in/stockInDetail.js index f193502..33dfdb2 100644 --- a/ruoyi-ui/src/api/in/stockInDetail.js +++ b/ruoyi-ui/src/api/in/stockInDetail.js @@ -50,3 +50,12 @@ export function barcodePrinting(data) { data:data }) } + +// 批量修改入库单据子表 +export function updateStockInDetailBatch(data) { + return request({ + url: '/in/stockInDetail/updateBatch', + method: 'post', + data: data + }) +} diff --git a/ruoyi-ui/src/api/job/OutmydoJob.js b/ruoyi-ui/src/api/job/OutmydoJob.js index 6d5523c..a962168 100644 --- a/ruoyi-ui/src/api/job/OutmydoJob.js +++ b/ruoyi-ui/src/api/job/OutmydoJob.js @@ -54,3 +54,12 @@ export function updateOutJobPriority(data) { data: data }) } + +// 货位出库生成任务 +export function cargoSpaceOut(params) { + return request({ + url: '/job/outmydoJob/cargoSpaceOut', + method: 'get', + params: params + }) +} diff --git a/ruoyi-ui/src/views/in/receive/index.vue b/ruoyi-ui/src/views/in/receive/index.vue index 5ee9bf3..0b872af 100644 --- a/ruoyi-ui/src/views/in/receive/index.vue +++ b/ruoyi-ui/src/views/in/receive/index.vue @@ -435,7 +435,9 @@ export default { /** 获取子单据列表 */ getDetailList(stockinId) { this.detailLoading = true; - this.queryDetailParams.stockinId = stockinId; + if (typeof stockinId === 'string' || typeof stockinId === 'number') { + this.queryDetailParams.stockinId = stockinId; + } this.queryDetailParams.status = this.queryParams.status; listStockInDetail(this.queryDetailParams).then(response => { this.stockInDetailList = response.rows; @@ -445,13 +447,7 @@ export default { }, //主单点击触发事件 handleRowClick(selection) { - this.detailLoading = true; - this.queryDetailParams.stockinId = selection.stockinId; - listStockInDetail(this.queryDetailParams).then(response => { - this.stockInDetailList = response.rows; - this.detailTotal = response.total; - this.detailLoading = false; - }); + this.getDetailList(selection.stockinId); }, // 删除子单据按钮操作 handleStockinDetailDelete(row) { diff --git a/ruoyi-ui/src/views/in/stockIn/index.vue b/ruoyi-ui/src/views/in/stockIn/index.vue index fffa09c..bdb22ac 100644 --- a/ruoyi-ui/src/views/in/stockIn/index.vue +++ b/ruoyi-ui/src/views/in/stockIn/index.vue @@ -1,196 +1,176 @@