diff --git a/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/controller/CheckStockinController.java b/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/controller/CheckStockinController.java index 38f95f4..7b066d7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/controller/CheckStockinController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/controller/CheckStockinController.java @@ -5,17 +5,12 @@ import java.util.List; import javax.servlet.http.HttpServletResponse; import cn.hutool.core.convert.Convert; +import com.ruoyi.check.stockcheck.domain.CheckStockVo; import com.ruoyi.check.stockcheckfinish.service.ICheckStockinFinishService; +import com.ruoyi.out.outStockout.domain.OutStockoutVo; 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 org.springframework.web.bind.annotation.*; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; @@ -100,7 +95,7 @@ public class CheckStockinController extends BaseController @PutMapping public AjaxResult edit(@RequestBody CheckStockin checkStockin) { - return toAjax(checkStockinService.updateCheckStockin(checkStockin)); + return checkStockinService.updateCheckStockin(checkStockin); } /** @@ -113,4 +108,18 @@ public class CheckStockinController extends BaseController { return toAjax(checkStockinService.deleteCheckStockinByStockGuids(stockGuids)); } + + /** + * 出库单据保存 + * + * @param checkStockVo + * @return + */ + @Log(title = "盘点主单保存", businessType = BusinessType.INSERT) + @PostMapping("/saveBill") + @ResponseBody + public AjaxResult saveBill(@RequestBody CheckStockVo checkStockVo) { + String stockOutId = checkStockinService.saveBill(checkStockVo); + return AjaxResult.success(stockOutId); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/domain/CheckStockVo.java b/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/domain/CheckStockVo.java new file mode 100644 index 0000000..0f1fb64 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/domain/CheckStockVo.java @@ -0,0 +1,21 @@ +package com.ruoyi.check.stockcheck.domain; + +import com.ruoyi.check.stockcheckdetail.domain.CheckStockinDetail; +import com.ruoyi.out.outStockout.domain.OutStockout; +import com.ruoyi.out.outStockoutDetail.domain.OutStockoutDetail; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CheckStockVo { + + private CheckStockin checkStockin; + + private List detailList; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/mapper/CheckStockinMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/mapper/CheckStockinMapper.java index de95155..ed27d39 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/mapper/CheckStockinMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/mapper/CheckStockinMapper.java @@ -5,15 +5,15 @@ import com.ruoyi.check.stockcheck.domain.CheckStockin; /** * 盘库单据主信息Mapper接口 - * + * * @author ruoyi * @date 2025-05-29 */ -public interface CheckStockinMapper +public interface CheckStockinMapper { /** * 查询盘库单据主信息 - * + * * @param stockGuid 盘库单据主信息主键 * @return 盘库单据主信息 */ @@ -21,7 +21,7 @@ public interface CheckStockinMapper /** * 查询盘库单据主信息列表 - * + * * @param checkStockin 盘库单据主信息 * @return 盘库单据主信息集合 */ @@ -29,7 +29,7 @@ public interface CheckStockinMapper /** * 新增盘库单据主信息 - * + * * @param checkStockin 盘库单据主信息 * @return 结果 */ @@ -37,7 +37,7 @@ public interface CheckStockinMapper /** * 修改盘库单据主信息 - * + * * @param checkStockin 盘库单据主信息 * @return 结果 */ @@ -45,7 +45,7 @@ public interface CheckStockinMapper /** * 删除盘库单据主信息 - * + * * @param stockGuid 盘库单据主信息主键 * @return 结果 */ @@ -53,9 +53,11 @@ public interface CheckStockinMapper /** * 批量删除盘库单据主信息 - * + * * @param stockGuids 需要删除的数据主键集合 * @return 结果 */ public int deleteCheckStockinByStockGuids(String[] stockGuids); + + void insertCheckStockinHistory(CheckStockin checkStockin); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/service/ICheckStockinService.java b/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/service/ICheckStockinService.java index ef1eb88..2315cd6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/service/ICheckStockinService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/service/ICheckStockinService.java @@ -1,19 +1,23 @@ package com.ruoyi.check.stockcheck.service; import java.util.List; + +import com.ruoyi.check.stockcheck.domain.CheckStockVo; import com.ruoyi.check.stockcheck.domain.CheckStockin; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.out.outStockout.domain.OutStockoutVo; /** * 盘库单据主信息Service接口 - * + * * @author ruoyi * @date 2025-05-29 */ -public interface ICheckStockinService +public interface ICheckStockinService { /** * 查询盘库单据主信息 - * + * * @param stockGuid 盘库单据主信息主键 * @return 盘库单据主信息 */ @@ -21,7 +25,7 @@ public interface ICheckStockinService /** * 查询盘库单据主信息列表 - * + * * @param checkStockin 盘库单据主信息 * @return 盘库单据主信息集合 */ @@ -29,7 +33,7 @@ public interface ICheckStockinService /** * 新增盘库单据主信息 - * + * * @param checkStockin 盘库单据主信息 * @return 结果 */ @@ -37,15 +41,15 @@ public interface ICheckStockinService /** * 修改盘库单据主信息 - * + * * @param checkStockin 盘库单据主信息 * @return 结果 */ - public int updateCheckStockin(CheckStockin checkStockin); + public AjaxResult updateCheckStockin(CheckStockin checkStockin); /** * 批量删除盘库单据主信息 - * + * * @param stockGuids 需要删除的盘库单据主信息主键集合 * @return 结果 */ @@ -53,9 +57,11 @@ public interface ICheckStockinService /** * 删除盘库单据主信息信息 - * + * * @param stockGuid 盘库单据主信息主键 * @return 结果 */ public int deleteCheckStockinByStockGuid(String stockGuid); + + String saveBill(CheckStockVo outStockoutVo); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/service/impl/CheckStockinServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/service/impl/CheckStockinServiceImpl.java index 21d3069..5f8236f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/service/impl/CheckStockinServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheck/service/impl/CheckStockinServiceImpl.java @@ -1,27 +1,54 @@ package com.ruoyi.check.stockcheck.service.impl; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.IdUtil; +import com.ruoyi.bas.BasProduct.domain.BasProduct; +import com.ruoyi.bas.BasProduct.service.IBasProductService; +import com.ruoyi.bas.basJobId.service.IBasJobIdService; +import com.ruoyi.check.stockcheck.domain.CheckStockVo; +import com.ruoyi.check.stockcheckdetail.domain.CheckStockinDetail; +import com.ruoyi.check.stockcheckdetail.service.ICheckStockinDetailService; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.uuid.UUID; +import com.ruoyi.in.stockin.domain.InStockin; +import com.ruoyi.in.stockindetail.domain.InStockinDetail; +import com.ruoyi.out.outStockout.domain.OutStockout; +import com.ruoyi.out.outStockout.domain.OutStockoutVo; +import com.ruoyi.out.outStockoutDetail.domain.OutStockoutDetail; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import com.ruoyi.check.stockcheck.mapper.CheckStockinMapper; import com.ruoyi.check.stockcheck.domain.CheckStockin; import com.ruoyi.check.stockcheck.service.ICheckStockinService; +import org.springframework.transaction.annotation.Transactional; /** * 盘库单据主信息Service业务层处理 - * + * * @author ruoyi * @date 2025-05-29 */ @Service -public class CheckStockinServiceImpl implements ICheckStockinService +public class CheckStockinServiceImpl implements ICheckStockinService { @Autowired private CheckStockinMapper checkStockinMapper; + @Autowired + private IBasJobIdService basJobIdService; + @Autowired + private ICheckStockinDetailService checkStockinDetailService; + @Autowired + private IBasProductService productService; /** * 查询盘库单据主信息 - * + * * @param stockGuid 盘库单据主信息主键 * @return 盘库单据主信息 */ @@ -33,7 +60,7 @@ public class CheckStockinServiceImpl implements ICheckStockinService /** * 查询盘库单据主信息列表 - * + * * @param checkStockin 盘库单据主信息 * @return 盘库单据主信息 */ @@ -45,7 +72,7 @@ public class CheckStockinServiceImpl implements ICheckStockinService /** * 新增盘库单据主信息 - * + * * @param checkStockin 盘库单据主信息 * @return 结果 */ @@ -57,19 +84,59 @@ public class CheckStockinServiceImpl implements ICheckStockinService /** * 修改盘库单据主信息 - * + * * @param checkStockin 盘库单据主信息 * @return 结果 */ @Override - public int updateCheckStockin(CheckStockin checkStockin) + @Transactional(rollbackFor = Exception.class) + public AjaxResult updateCheckStockin(CheckStockin checkStockin) { - return checkStockinMapper.updateCheckStockin(checkStockin); + CheckStockin old = selectCheckStockinByStockGuid(checkStockin.getStockGuid()); + checkStockinMapper.updateCheckStockin(checkStockin); + if ("5".equals(checkStockin.getStatus())){ + //作废 + if (!"1".equals(old.getStatus())){ + throw new RuntimeException("单据状态非未执行状态!"); + } + //插入历史单据 + insertCheckStockinHistory(checkStockin); + }else if ("2".equals(checkStockin.getStatus())){ + //审核 + if (!"1".equals(old.getStatus())){ + throw new RuntimeException("单据状态非未执行状态!"); + } + }else if ("4".equals(checkStockin.getStatus())){ + //确认 + if (!"3".equals(old.getStatus())){ + throw new RuntimeException("单据状态非正执行状态!"); + } + //对比扫码数量 与实际入库数量是否一致 + CheckStockinDetail checkStockinParam = new CheckStockinDetail(); + checkStockinParam.setStockCheckGuid(checkStockin.getStockGuid()); + List list = checkStockinDetailService.selectCheckStockinDetailList(checkStockinParam); + if (CollUtil.isNotEmpty(list)){ + boolean b = list.stream().allMatch(x -> x.getAssignNum().equals(x.getScanNum())); + if (!b){ + throw new RuntimeException("扫码数量与实际入库数量不一致!"); + } + } + insertCheckStockinHistory(checkStockin); + } + return AjaxResult.success(); + } + + private void insertCheckStockinHistory(CheckStockin checkStockin) { + //插入历史单据 + checkStockinMapper.insertCheckStockinHistory(checkStockin); + checkStockinDetailService.insertCheckStockinDetailHistory(checkStockin); + checkStockinMapper.deleteCheckStockinByStockGuid(checkStockin.getStockGuid()); + checkStockinDetailService.deleteCheckStockinDetailByStockinGuid(checkStockin.getStockGuid()); } /** * 批量删除盘库单据主信息 - * + * * @param stockGuids 需要删除的盘库单据主信息主键 * @return 结果 */ @@ -81,7 +148,7 @@ public class CheckStockinServiceImpl implements ICheckStockinService /** * 删除盘库单据主信息信息 - * + * * @param stockGuid 盘库单据主信息主键 * @return 结果 */ @@ -90,4 +157,33 @@ public class CheckStockinServiceImpl implements ICheckStockinService { return checkStockinMapper.deleteCheckStockinByStockGuid(stockGuid); } + + @Override + @Transactional(rollbackFor = Exception.class) + public String saveBill(CheckStockVo checkStockVo) { + CheckStockin checkStockin = checkStockVo.getCheckStockin(); + List detailList = checkStockVo.getDetailList(); + String stockCheckId = basJobIdService.getJobId("CKD"); + checkStockin.setStockCheckId(stockCheckId); + checkStockin.setStockGuid(IdUtil.simpleUUID()); + checkStockin.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + String username = SecurityContextHolder.getContext().getAuthentication().getName(); + checkStockin.setCreateManId(username); + checkStockin.setStatus("1"); + checkStockin.setStockSource("0"); + checkStockin.setCheckType(checkStockin.getCheckType()); + for (int i = 0; i < detailList.size(); i++) { + CheckStockinDetail checkStockinDetail = detailList.get(i); + checkStockinDetail.setStockCheckDetailId(stockCheckId + "-" + (i + 1)); + checkStockinDetail.setStockCheckId(stockCheckId); + BasProduct basProduct = productService.selectBasProductByProductId(checkStockinDetail.getProductId()); + checkStockinDetail.setProductGuid(basProduct.getProductGuid()); + checkStockinDetail.setStockCheckGuid(checkStockin.getStockGuid()); + checkStockinDetail.setScanNum("0"); + checkStockinDetail.setAssignNum("0"); + checkStockinDetailService.insertCheckStockinDetail(checkStockinDetail); + } + checkStockinMapper.insertCheckStockin(checkStockin); + return stockCheckId; + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheckdetail/mapper/CheckStockinDetailMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheckdetail/mapper/CheckStockinDetailMapper.java index 534c68a..d2c1a70 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheckdetail/mapper/CheckStockinDetailMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheckdetail/mapper/CheckStockinDetailMapper.java @@ -1,19 +1,21 @@ package com.ruoyi.check.stockcheckdetail.mapper; import java.util.List; + +import com.ruoyi.check.stockcheck.domain.CheckStockin; import com.ruoyi.check.stockcheckdetail.domain.CheckStockinDetail; /** * 盘库单据子信息Mapper接口 - * + * * @author ruoyi * @date 2025-05-29 */ -public interface CheckStockinDetailMapper +public interface CheckStockinDetailMapper { /** * 查询盘库单据子信息 - * + * * @param stockCheckDetailId 盘库单据子信息主键 * @return 盘库单据子信息 */ @@ -21,7 +23,7 @@ public interface CheckStockinDetailMapper /** * 查询盘库单据子信息列表 - * + * * @param checkStockinDetail 盘库单据子信息 * @return 盘库单据子信息集合 */ @@ -29,7 +31,7 @@ public interface CheckStockinDetailMapper /** * 新增盘库单据子信息 - * + * * @param checkStockinDetail 盘库单据子信息 * @return 结果 */ @@ -37,7 +39,7 @@ public interface CheckStockinDetailMapper /** * 修改盘库单据子信息 - * + * * @param checkStockinDetail 盘库单据子信息 * @return 结果 */ @@ -45,7 +47,7 @@ public interface CheckStockinDetailMapper /** * 删除盘库单据子信息 - * + * * @param stockCheckDetailId 盘库单据子信息主键 * @return 结果 */ @@ -53,9 +55,13 @@ public interface CheckStockinDetailMapper /** * 批量删除盘库单据子信息 - * + * * @param stockCheckDetailIds 需要删除的数据主键集合 * @return 结果 */ public int deleteCheckStockinDetailByStockCheckDetailIds(String[] stockCheckDetailIds); + + void insertCheckStockinDetailHistory(CheckStockin checkStockin); + + void deleteCheckStockinDetailByStockinGuid(String stockGuid); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheckdetail/service/ICheckStockinDetailService.java b/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheckdetail/service/ICheckStockinDetailService.java index 9c65680..6d7d79f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheckdetail/service/ICheckStockinDetailService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheckdetail/service/ICheckStockinDetailService.java @@ -1,19 +1,21 @@ package com.ruoyi.check.stockcheckdetail.service; import java.util.List; + +import com.ruoyi.check.stockcheck.domain.CheckStockin; import com.ruoyi.check.stockcheckdetail.domain.CheckStockinDetail; /** * 盘库单据子信息Service接口 - * + * * @author ruoyi * @date 2025-05-29 */ -public interface ICheckStockinDetailService +public interface ICheckStockinDetailService { /** * 查询盘库单据子信息 - * + * * @param stockCheckDetailId 盘库单据子信息主键 * @return 盘库单据子信息 */ @@ -21,7 +23,7 @@ public interface ICheckStockinDetailService /** * 查询盘库单据子信息列表 - * + * * @param checkStockinDetail 盘库单据子信息 * @return 盘库单据子信息集合 */ @@ -29,7 +31,7 @@ public interface ICheckStockinDetailService /** * 新增盘库单据子信息 - * + * * @param checkStockinDetail 盘库单据子信息 * @return 结果 */ @@ -37,7 +39,7 @@ public interface ICheckStockinDetailService /** * 修改盘库单据子信息 - * + * * @param checkStockinDetail 盘库单据子信息 * @return 结果 */ @@ -45,7 +47,7 @@ public interface ICheckStockinDetailService /** * 批量删除盘库单据子信息 - * + * * @param stockCheckDetailIds 需要删除的盘库单据子信息主键集合 * @return 结果 */ @@ -53,9 +55,13 @@ public interface ICheckStockinDetailService /** * 删除盘库单据子信息信息 - * + * * @param stockCheckDetailId 盘库单据子信息主键 * @return 结果 */ public int deleteCheckStockinDetailByStockCheckDetailId(String stockCheckDetailId); + + void insertCheckStockinDetailHistory(CheckStockin checkStockin); + + void deleteCheckStockinDetailByStockinGuid(String stockGuid); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheckdetail/service/impl/CheckStockinDetailServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheckdetail/service/impl/CheckStockinDetailServiceImpl.java index a21ce68..312296e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheckdetail/service/impl/CheckStockinDetailServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/check/stockcheckdetail/service/impl/CheckStockinDetailServiceImpl.java @@ -1,6 +1,8 @@ package com.ruoyi.check.stockcheckdetail.service.impl; import java.util.List; + +import com.ruoyi.check.stockcheck.domain.CheckStockin; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.check.stockcheckdetail.mapper.CheckStockinDetailMapper; @@ -9,19 +11,19 @@ import com.ruoyi.check.stockcheckdetail.service.ICheckStockinDetailService; /** * 盘库单据子信息Service业务层处理 - * + * * @author ruoyi * @date 2025-05-29 */ @Service -public class CheckStockinDetailServiceImpl implements ICheckStockinDetailService +public class CheckStockinDetailServiceImpl implements ICheckStockinDetailService { @Autowired private CheckStockinDetailMapper checkStockinDetailMapper; /** * 查询盘库单据子信息 - * + * * @param stockCheckDetailId 盘库单据子信息主键 * @return 盘库单据子信息 */ @@ -33,7 +35,7 @@ public class CheckStockinDetailServiceImpl implements ICheckStockinDetailService /** * 查询盘库单据子信息列表 - * + * * @param checkStockinDetail 盘库单据子信息 * @return 盘库单据子信息 */ @@ -45,7 +47,7 @@ public class CheckStockinDetailServiceImpl implements ICheckStockinDetailService /** * 新增盘库单据子信息 - * + * * @param checkStockinDetail 盘库单据子信息 * @return 结果 */ @@ -57,7 +59,7 @@ public class CheckStockinDetailServiceImpl implements ICheckStockinDetailService /** * 修改盘库单据子信息 - * + * * @param checkStockinDetail 盘库单据子信息 * @return 结果 */ @@ -69,7 +71,7 @@ public class CheckStockinDetailServiceImpl implements ICheckStockinDetailService /** * 批量删除盘库单据子信息 - * + * * @param stockCheckDetailIds 需要删除的盘库单据子信息主键 * @return 结果 */ @@ -81,7 +83,7 @@ public class CheckStockinDetailServiceImpl implements ICheckStockinDetailService /** * 删除盘库单据子信息信息 - * + * * @param stockCheckDetailId 盘库单据子信息主键 * @return 结果 */ @@ -90,4 +92,14 @@ public class CheckStockinDetailServiceImpl implements ICheckStockinDetailService { return checkStockinDetailMapper.deleteCheckStockinDetailByStockCheckDetailId(stockCheckDetailId); } + + @Override + public void insertCheckStockinDetailHistory(CheckStockin checkStockin) { + checkStockinDetailMapper.insertCheckStockinDetailHistory(checkStockin); + } + + @Override + public void deleteCheckStockinDetailByStockinGuid(String stockGuid) { + checkStockinDetailMapper.deleteCheckStockinDetailByStockinGuid(stockGuid); + } } diff --git a/ruoyi-admin/src/main/resources/mapper/check/CheckStockinDetailMapper.xml b/ruoyi-admin/src/main/resources/mapper/check/CheckStockinDetailMapper.xml index 793909a..511bce7 100644 --- a/ruoyi-admin/src/main/resources/mapper/check/CheckStockinDetailMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/check/CheckStockinDetailMapper.xml @@ -3,7 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + @@ -43,7 +43,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + - + and stock_check_id = #{stockCheckId} and check_type = #{checkType} and create_date = #{createDate} @@ -53,7 +53,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and spare5 = #{spare5} - +