diff --git a/src/main/java/com/zg/framework/config/SecurityConfig.java b/src/main/java/com/zg/framework/config/SecurityConfig.java index cd5729b..b577993 100644 --- a/src/main/java/com/zg/framework/config/SecurityConfig.java +++ b/src/main/java/com/zg/framework/config/SecurityConfig.java @@ -122,6 +122,7 @@ public class SecurityConfig "/AutoInventory/**", "/ws/**", "/photo/**", + "/wisdom/record/**", "/wisdom/stock/**", "/system/media/**", "/mock/**", diff --git a/src/main/java/com/zg/project/information/controller/PcdeDetailController.java b/src/main/java/com/zg/project/information/controller/PcdeDetailController.java index a3becab..f7d2e9c 100644 --- a/src/main/java/com/zg/project/information/controller/PcdeDetailController.java +++ b/src/main/java/com/zg/project/information/controller/PcdeDetailController.java @@ -56,13 +56,13 @@ public class PcdeDetailController extends BaseController /** * 获取未被入库单据使用的库位列表 */ - @PreAuthorize("@ss.hasPermi('information:pcdedetail:list')") - @GetMapping("/getAll") - public AjaxResult getAll() - { - List list = pcdeDetailService.getAllPcde(); - return success(list); - } +// @PreAuthorize("@ss.hasPermi('information:pcdedetail:list')") +// @GetMapping("/getAll") +// public AjaxResult getAll() +// { +// List list = pcdeDetailService.getAllPcde(); +// return success(list); +// } /** * 导出库位明细列表 @@ -127,11 +127,11 @@ public class PcdeDetailController extends BaseController /** * 删除库位明细 */ - @PreAuthorize("@ss.hasPermi('information:pcdedetail:remove')") - @Log(title = "库位明细", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Long[] ids) - { - return toAjax(pcdeDetailService.deletePcdeDetailByIds(ids)); - } +// @PreAuthorize("@ss.hasPermi('information:pcdedetail:remove')") +// @Log(title = "库位明细", businessType = BusinessType.DELETE) +// @DeleteMapping("/{ids}") +// public AjaxResult remove(@PathVariable Long[] ids) +// { +// return toAjax(pcdeDetailService.deletePcdeDetailByIds(ids)); +// } } diff --git a/src/main/java/com/zg/project/information/service/IPcdeDetailService.java b/src/main/java/com/zg/project/information/service/IPcdeDetailService.java index ffc189b..75c9d35 100644 --- a/src/main/java/com/zg/project/information/service/IPcdeDetailService.java +++ b/src/main/java/com/zg/project/information/service/IPcdeDetailService.java @@ -50,7 +50,7 @@ public interface IPcdeDetailService * @param ids 需要删除的库位明细主键集合 * @return 结果 */ - public int deletePcdeDetailByIds(Long[] ids); +// public int deletePcdeDetailByIds(Long[] ids); /** * 删除库位明细信息 @@ -58,7 +58,7 @@ public interface IPcdeDetailService * @param id 库位明细主键 * @return 结果 */ - public int deletePcdeDetailById(Long id); +// public int deletePcdeDetailById(Long id); /** * 导入数据 @@ -72,7 +72,7 @@ public interface IPcdeDetailService * 获取未被入库单据使用的库位列表 * @return */ - List getAllPcde(); +// List getAllPcde(); /** * 根据小仓编码查询库位列表 diff --git a/src/main/java/com/zg/project/information/service/impl/PcdeDetailServiceImpl.java b/src/main/java/com/zg/project/information/service/impl/PcdeDetailServiceImpl.java index 4f001cc..50c0d50 100644 --- a/src/main/java/com/zg/project/information/service/impl/PcdeDetailServiceImpl.java +++ b/src/main/java/com/zg/project/information/service/impl/PcdeDetailServiceImpl.java @@ -1,14 +1,12 @@ package com.zg.project.information.service.impl; import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.zg.common.exception.ServiceException; import com.zg.common.utils.DateUtils; import com.zg.common.utils.StringUtils; -import com.zg.framework.manager.AsyncManager; import com.zg.project.wisdom.mapper.RkInfoMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -97,57 +95,57 @@ public class PcdeDetailServiceImpl implements IPcdeDetailService * @param ids 需要删除的库位明细主键 * @return 结果 */ - @Override - public int deletePcdeDetailByIds(Long[] ids) - { - for (Long id : ids) { - // 获取库位信息 - PcdeDetail pcdeDetail = pcdeDetailMapper.selectPcdeDetailById(id); - if (pcdeDetail == null) { - throw new ServiceException("ID为 " + id + " 的库位不存在,无法删除"); - } - - // 获取库位编号 - String locationCode = pcdeDetail.getPcode(); - - // 检查该库位是否仍有关联货物 - int count = rkInfoMapper.countRkInfoByLocationCode(locationCode); - if (count > 0) { - throw new ServiceException("库位 [" + locationCode + "] 上还有货物,无法批量删除"); - } - } - - // 全部校验通过后再执行删除 - return pcdeDetailMapper.deletePcdeDetailByIds(ids); - } +// @Override +// public int deletePcdeDetailByIds(Long[] ids) +// { +// for (Long id : ids) { +// // 获取库位信息 +// PcdeDetail pcdeDetail = pcdeDetailMapper.selectPcdeDetailById(id); +// if (pcdeDetail == null) { +// throw new ServiceException("ID为 " + id + " 的库位不存在,无法删除"); +// } +// +// // 获取库位编号 +// String locationCode = pcdeDetail.getPcode(); +// +// // 检查该库位是否仍有关联货物 +// int count = rkInfoMapper.countRkInfoByLocationCode(locationCode); +// if (count > 0) { +// throw new ServiceException("库位 [" + locationCode + "] 上还有货物,无法批量删除"); +// } +// } +// +// // 全部校验通过后再执行删除 +// return pcdeDetailMapper.deletePcdeDetailByIds(ids); +// } /** * 删除库位明细信息 * - * @param id 库位明细主键 + * @param * @return 结果 */ - @Override - public int deletePcdeDetailById(Long id) - { - // 根据主键获取库位明细 - PcdeDetail pcdeDetail = pcdeDetailMapper.selectPcdeDetailById(id); - if (pcdeDetail == null) { - throw new ServiceException("库位信息不存在,无法删除"); - } - - // 获取库位编号 - String locationCode = pcdeDetail.getPcode(); - - // 查询该库位上是否存在库存 - int count = rkInfoMapper.countRkInfoByLocationCode(locationCode); - if (count > 0) { - throw new ServiceException("该库位上还有货物,无法删除"); - } - - // 删除库位信息 - return pcdeDetailMapper.deletePcdeDetailById(id); - } +// @Override +// public int deletePcdeDetailById(Long id) +// { +// // 根据主键获取库位明细 +// PcdeDetail pcdeDetail = pcdeDetailMapper.selectPcdeDetailById(id); +// if (pcdeDetail == null) { +// throw new ServiceException("库位信息不存在,无法删除"); +// } +// +// // 获取库位编号 +// String locationCode = pcdeDetail.getPcode(); +// +// // 查询该库位上是否存在库存 +// int count = rkInfoMapper.countRkInfoByLocationCode(locationCode); +// if (count > 0) { +// throw new ServiceException("该库位上还有货物,无法删除"); +// } +// +// // 删除库位信息 +// return pcdeDetailMapper.deletePcdeDetailById(id); +// } @Override public String importPcdeDetail(List pcdeList, String operName) { @@ -215,21 +213,21 @@ public class PcdeDetailServiceImpl implements IPcdeDetailService /** * 获取未被入库单据使用的库位列表 */ - @Override - public List getAllPcde() { - // 查询所有库位 - List pcdeList = pcdeDetailMapper.selectPcdeDetailList(new PcdeDetail()); - - // 查询已被使用过的库位码(pcode) - List usedPcodeList = rkInfoMapper.selectUsedPcodes(); - - // 过滤掉已使用的 - List availableList = pcdeList.stream() - .filter(p -> !usedPcodeList.contains(p.getPcode())) - .collect(Collectors.toList()); - - return availableList; - } +// @Override +// public List getAllPcde() { +// // 查询所有库位 +// List pcdeList = pcdeDetailMapper.selectPcdeDetailList(new PcdeDetail()); +// +// // 查询已被使用过的库位码(pcode) +// List usedPcodeList = rkInfoMapper.selectUsedPcodes(); +// +// // 过滤掉已使用的 +// List availableList = pcdeList.stream() +// .filter(p -> !usedPcodeList.contains(p.getPcode())) +// .collect(Collectors.toList()); +// +// return availableList; +// } @Override public List selectByWarehouseCode(String warehouseCode) diff --git a/src/main/java/com/zg/project/inventory/AutoInventory/controller/AutoInventoryController.java b/src/main/java/com/zg/project/inventory/AutoInventory/controller/AutoInventoryController.java index 7193d97..76bd7f2 100644 --- a/src/main/java/com/zg/project/inventory/AutoInventory/controller/AutoInventoryController.java +++ b/src/main/java/com/zg/project/inventory/AutoInventory/controller/AutoInventoryController.java @@ -68,28 +68,28 @@ public class AutoInventoryController extends BaseController { /** * 开始匹配 */ - @PostMapping("/match") - @ApiOperation("开始匹配") - public AjaxResult match(@RequestBody QueryDTO dto) { - // 停止盘点 - rfidService.stopScan(dto.getDeviceId()); - - dto.setScanType(1); - - rkInfoService.matchWithStatus(dto); - - return AjaxResult.success(); - } +// @PostMapping("/match") +// @ApiOperation("开始匹配") +// public AjaxResult match(@RequestBody QueryDTO dto) { +// // 停止盘点 +// rfidService.stopScan(dto.getDeviceId()); +// +// dto.setScanType(1); +// +// rkInfoService.matchWithStatus(dto); +// +// return AjaxResult.success(); +// } /** * 匹配后图表统计 */ - @PostMapping("/chart") - @ApiOperation("匹配后图表统计") - public AjaxResult chart(@RequestBody QueryDTO dto) { - ChartDataVO vo = rkInfoService.matchWithAll(dto); - return AjaxResult.success(vo); - } +// @PostMapping("/chart") +// @ApiOperation("匹配后图表统计") +// public AjaxResult chart(@RequestBody QueryDTO dto) { +// ChartDataVO vo = rkInfoService.matchWithAll(dto); +// return AjaxResult.success(vo); +// } /** diff --git a/src/main/java/com/zg/project/inventory/AutoInventory/controller/InventoryMatchScanController.java b/src/main/java/com/zg/project/inventory/AutoInventory/controller/InventoryMatchScanController.java index 57df19e..5f8ef82 100644 --- a/src/main/java/com/zg/project/inventory/AutoInventory/controller/InventoryMatchScanController.java +++ b/src/main/java/com/zg/project/inventory/AutoInventory/controller/InventoryMatchScanController.java @@ -50,15 +50,15 @@ public class InventoryMatchScanController extends BaseController { * @param matchScan * @return */ - @GetMapping("/countList") - public TableDataInfo countList(InventoryMatchScan matchScan) { - // 开启分页 - startPage(); - // 调用 service 层查询数据 - List list = inventoryMatchScanService.selectMatchScanCountList(matchScan); - // 返回分页后的结果 - return getDataTable(list); - } +// @GetMapping("/countList") +// public TableDataInfo countList(InventoryMatchScan matchScan) { +// // 开启分页 +// startPage(); +// // 调用 service 层查询数据 +// List list = inventoryMatchScanService.selectMatchScanCountList(matchScan); +// // 返回分页后的结果 +// return getDataTable(list); +// } /** diff --git a/src/main/java/com/zg/project/inventory/AutoInventory/service/InventoryMatchScanService.java b/src/main/java/com/zg/project/inventory/AutoInventory/service/InventoryMatchScanService.java index 1b90d34..e826552 100644 --- a/src/main/java/com/zg/project/inventory/AutoInventory/service/InventoryMatchScanService.java +++ b/src/main/java/com/zg/project/inventory/AutoInventory/service/InventoryMatchScanService.java @@ -19,5 +19,5 @@ public interface InventoryMatchScanService { List selectInventoryMatchScanList(InventoryMatchScan matchScan); - List selectMatchScanCountList(InventoryMatchScan matchScan); +// List selectMatchScanCountList(InventoryMatchScan matchScan); } diff --git a/src/main/java/com/zg/project/inventory/AutoInventory/service/impl/InventoryMatchScanServiceImpl.java b/src/main/java/com/zg/project/inventory/AutoInventory/service/impl/InventoryMatchScanServiceImpl.java index e074b10..d6225eb 100644 --- a/src/main/java/com/zg/project/inventory/AutoInventory/service/impl/InventoryMatchScanServiceImpl.java +++ b/src/main/java/com/zg/project/inventory/AutoInventory/service/impl/InventoryMatchScanServiceImpl.java @@ -56,22 +56,22 @@ public class InventoryMatchScanServiceImpl implements InventoryMatchScanService return mapper.selectInventoryMatchScanList(matchScan); } - @Override - public List selectMatchScanCountList(InventoryMatchScan param) { - // 状态=2:只查扫描表中的数据 - if ("2".equals(param.getStatus())) { - return mapper.selectOnlyFromMatchScan(param); - } - // 状态=1:查询指定仓库下未被扫描的库位 - else if ("1".equals(param.getStatus())) { - // ✅ 根据任务ID取 sceneId,再按 scene 查询“未被扫描”的库位 - String sceneId = taskMapper.getSceneByTaskId(param.getTaskId()); - return rkInfoMapper.getUnscannedPcodeByScene(sceneId, param.getTaskId()); - } - // 其它情况:返回扫描表和库存表的关联数据 - else { - return mapper.selectJoinRkInfo(param); - } - } +// @Override +// public List selectMatchScanCountList(InventoryMatchScan param) { +// // 状态=2:只查扫描表中的数据 +// if ("2".equals(param.getStatus())) { +// return mapper.selectOnlyFromMatchScan(param); +// } +// // 状态=1:查询指定仓库下未被扫描的库位 +// else if ("1".equals(param.getStatus())) { +// // ✅ 根据任务ID取 sceneId,再按 scene 查询“未被扫描”的库位 +// String sceneId = taskMapper.getSceneByTaskId(param.getTaskId()); +// return rkInfoMapper.getUnscannedPcodeByScene(sceneId, param.getTaskId()); +// } +// // 其它情况:返回扫描表和库存表的关联数据 +// else { +// return mapper.selectJoinRkInfo(param); +// } +// } } diff --git a/src/main/java/com/zg/project/inventory/HdInventory/HdInventoryController.java b/src/main/java/com/zg/project/inventory/HdInventory/HdInventoryController.java index 3218bf7..e850dc5 100644 --- a/src/main/java/com/zg/project/inventory/HdInventory/HdInventoryController.java +++ b/src/main/java/com/zg/project/inventory/HdInventory/HdInventoryController.java @@ -16,18 +16,18 @@ public class HdInventoryController { @Autowired private IRkInfoService rkInfoService; - @ApiModelProperty("开始匹配") - @PostMapping("/match") - public AjaxResult match(@RequestBody QueryDTO dto) { +// @ApiModelProperty("开始匹配") +// @PostMapping("/match") +// public AjaxResult match(@RequestBody QueryDTO dto) { +// +// dto.setScanType(0); +// +//// dto.setDeviceId("0"); +// +// rkInfoService.matchWithStatus(dto); +// +// return AjaxResult.success(); - dto.setScanType(0); - -// dto.setDeviceId("0"); - - rkInfoService.matchWithStatus(dto); - - return AjaxResult.success(); - - } +// } } diff --git a/src/main/java/com/zg/project/inventory/Task/controller/StatisticsController.java b/src/main/java/com/zg/project/inventory/Task/controller/StatisticsController.java index 0435620..ee09b6d 100644 --- a/src/main/java/com/zg/project/inventory/Task/controller/StatisticsController.java +++ b/src/main/java/com/zg/project/inventory/Task/controller/StatisticsController.java @@ -22,14 +22,14 @@ public class StatisticsController extends BaseController { * @param taskId * @return */ - @GetMapping("/count") - public AjaxResult conuntGetByTaskId(@RequestParam("taskId") String taskId) - { - - String warehouse = taskService.getWhByTaskId(taskId); - - int count = rkInfoService.countGetByWh(warehouse); - - return AjaxResult.success(count); - } +// @GetMapping("/count") +// public AjaxResult conuntGetByTaskId(@RequestParam("taskId") String taskId) +// { +// +// String warehouse = taskService.getWhByTaskId(taskId); +// +// int count = rkInfoService.countGetByWh(warehouse); +// +// return AjaxResult.success(count); +// } } diff --git a/src/main/java/com/zg/project/wisdom/controller/AuditSignatureController.java b/src/main/java/com/zg/project/wisdom/controller/AuditSignatureController.java index 29c9da2..64c8a7d 100644 --- a/src/main/java/com/zg/project/wisdom/controller/AuditSignatureController.java +++ b/src/main/java/com/zg/project/wisdom/controller/AuditSignatureController.java @@ -1,166 +1,166 @@ -package com.zg.project.wisdom.controller; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import javax.servlet.http.HttpServletResponse; - -import com.alibaba.fastjson2.JSONObject; -import com.zg.common.exception.ServiceException; -import com.zg.common.utils.MinioUtil; -import com.zg.common.utils.SecurityUtils; -import com.zg.project.wisdom.domain.vo.AuditSignatureReviewVO; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import com.zg.framework.aspectj.lang.annotation.Log; -import com.zg.framework.aspectj.lang.enums.BusinessType; -import com.zg.project.wisdom.domain.AuditSignature; -import com.zg.project.wisdom.service.IAuditSignatureService; -import com.zg.framework.web.controller.BaseController; -import com.zg.framework.web.domain.AjaxResult; -import com.zg.common.utils.poi.ExcelUtil; -import com.zg.framework.web.page.TableDataInfo; -import org.springframework.web.multipart.MultipartFile; - -/** - * 审批记录Controller - * - * @author zg - * @date 2025-07-11 - */ -@RestController -@RequestMapping("/wisdom/signature") -public class AuditSignatureController extends BaseController -{ - @Autowired - private IAuditSignatureService auditSignatureService; - - @Autowired - private MinioUtil minioUtil; - - /** - * 上传签字图片到 MinIO - */ - @PostMapping("/upload") - @Log(title = "签字图片上传", businessType = BusinessType.INSERT) - public AjaxResult uploadSignature(@RequestParam("file") MultipartFile file) { - if (file == null || file.isEmpty()) { - return AjaxResult.error("上传文件不能为空"); - } - try { - String url = minioUtil.upload(file, "jaz", "signature/"); - return AjaxResult.success("上传成功").put("url", url); - } catch (Exception e) { - return AjaxResult.error("上传失败: " + e.getMessage()); - } - } - // 上传图片,接收base64格式 zhangjinbo - @PostMapping("/uploadBase64") - @Log(title = "签字图片上传", businessType = BusinessType.INSERT) - public AjaxResult uploadSignatureBase64(@RequestBody Map param) { - String imgStr = param.get("imgStr"); -// return AjaxResult.success("上传成功").put("url", imgStr); - if (imgStr == null) { - return AjaxResult.error("上传文件不能为空"); - } - String url = minioUtil.uploadBase64(imgStr, "jaz","signature/"); - return AjaxResult.success("上传成功").put("url", url); - - } - /** - * 查询待审批记录列表 - */ -// @PreAuthorize("@ss.hasPermi('wisdom:signature:list')") - @GetMapping("/list") - public TableDataInfo list(AuditSignature auditSignature) { - startPage(); - List list = auditSignatureService.selectAuditSignatureReviewList(auditSignature); - return getDataTable(list); - } - - /** - * 查询个人提交审批记录 - */ -// @PreAuthorize("@ss.hasPermi('wisdom:signature:list')") - @GetMapping("/user/list") - public TableDataInfo listMySubmitRecords(AuditSignature auditSignature) - { - startPage(); - auditSignature.setSignerId(SecurityUtils.getUserId().toString()); // 当前用户 - List list = auditSignatureService.selectMySubmittedAuditList(auditSignature); - return getDataTable(list); - } - - /** - * 导出审批记录列表 - */ - @PreAuthorize("@ss.hasPermi('wisdom:signature:export')") - @Log(title = "审批记录", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(HttpServletResponse response, AuditSignature auditSignature) - { - List list = auditSignatureService.selectAuditSignatureList(auditSignature); - ExcelUtil util = new ExcelUtil(AuditSignature.class); - util.exportExcel(response, list, "审批记录数据"); - } - - /** - * 获取审批记录详细信息 - */ - @PreAuthorize("@ss.hasPermi('wisdom:signature:query')") - @GetMapping(value = "/{id}") - public AjaxResult getInfo(@PathVariable("id") Long id) - { - return success(auditSignatureService.selectAuditSignatureById(id)); - } - - - /** - * 审批 - */ - @PreAuthorize("@ss.hasPermi('wisdom:signature:edit')") - @Log(title = "审批记录", businessType = BusinessType.UPDATE) - @PutMapping - public AjaxResult approve(@RequestBody AuditSignature auditSignature) { - return toAjax(auditSignatureService.approveAuditSignature(auditSignature)); - } - - /** - * 删除审批记录 - */ - @PreAuthorize("@ss.hasPermi('wisdom:signature:remove')") - @Log(title = "审批记录", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Long[] ids) - { - return toAjax(auditSignatureService.deleteAuditSignatureByIds(ids)); - } - - /** - * 当前用户待审核列表条数 - * @return - */ - @GetMapping("/count") - public AjaxResult getPending(AuditSignature auditSignat) { - String approverId = auditSignat.getApproverId(); - int total = auditSignatureService.countPendingByUser(approverId); - return AjaxResult.success(total); - } - - /** - * 审核操作(通过 / 驳回) - */ - @PostMapping("/audit") - @Log(title = "审批记录", businessType = BusinessType.UPDATE) - public AjaxResult audit(@RequestBody AuditSignature audit) { - try { - auditSignatureService.audit(audit); - return AjaxResult.success("审核成功"); - } catch (ServiceException e) { - return AjaxResult.error("审核失败:" + e.getMessage()); - } catch (Exception e) { - return AjaxResult.error("系统异常,请联系管理员"); - } - } -} +//package com.zg.project.wisdom.controller; +// +//import java.util.ArrayList; +//import java.util.List; +//import java.util.Map; +//import javax.servlet.http.HttpServletResponse; +// +//import com.alibaba.fastjson2.JSONObject; +//import com.zg.common.exception.ServiceException; +//import com.zg.common.utils.MinioUtil; +//import com.zg.common.utils.SecurityUtils; +//import com.zg.project.wisdom.domain.vo.AuditSignatureReviewVO; +//import org.springframework.security.access.prepost.PreAuthorize; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.web.bind.annotation.*; +//import com.zg.framework.aspectj.lang.annotation.Log; +//import com.zg.framework.aspectj.lang.enums.BusinessType; +//import com.zg.project.wisdom.domain.AuditSignature; +//import com.zg.project.wisdom.service.IAuditSignatureService; +//import com.zg.framework.web.controller.BaseController; +//import com.zg.framework.web.domain.AjaxResult; +//import com.zg.common.utils.poi.ExcelUtil; +//import com.zg.framework.web.page.TableDataInfo; +//import org.springframework.web.multipart.MultipartFile; +// +///** +// * 审批记录Controller +// * +// * @author zg +// * @date 2025-07-11 +// */ +//@RestController +//@RequestMapping("/wisdom/signature") +//public class AuditSignatureController extends BaseController +//{ +// @Autowired +// private IAuditSignatureService auditSignatureService; +// +// @Autowired +// private MinioUtil minioUtil; +// +// /** +// * 上传签字图片到 MinIO +// */ +// @PostMapping("/upload") +// @Log(title = "签字图片上传", businessType = BusinessType.INSERT) +// public AjaxResult uploadSignature(@RequestParam("file") MultipartFile file) { +// if (file == null || file.isEmpty()) { +// return AjaxResult.error("上传文件不能为空"); +// } +// try { +// String url = minioUtil.upload(file, "jaz", "signature/"); +// return AjaxResult.success("上传成功").put("url", url); +// } catch (Exception e) { +// return AjaxResult.error("上传失败: " + e.getMessage()); +// } +// } +// // 上传图片,接收base64格式 zhangjinbo +// @PostMapping("/uploadBase64") +// @Log(title = "签字图片上传", businessType = BusinessType.INSERT) +// public AjaxResult uploadSignatureBase64(@RequestBody Map param) { +// String imgStr = param.get("imgStr"); +//// return AjaxResult.success("上传成功").put("url", imgStr); +// if (imgStr == null) { +// return AjaxResult.error("上传文件不能为空"); +// } +// String url = minioUtil.uploadBase64(imgStr, "jaz","signature/"); +// return AjaxResult.success("上传成功").put("url", url); +// +// } +// /** +// * 查询待审批记录列表 +// */ +//// @PreAuthorize("@ss.hasPermi('wisdom:signature:list')") +// @GetMapping("/list") +// public TableDataInfo list(AuditSignature auditSignature) { +// startPage(); +// List list = auditSignatureService.selectAuditSignatureReviewList(auditSignature); +// return getDataTable(list); +// } +// +// /** +// * 查询个人提交审批记录 +// */ +//// @PreAuthorize("@ss.hasPermi('wisdom:signature:list')") +// @GetMapping("/user/list") +// public TableDataInfo listMySubmitRecords(AuditSignature auditSignature) +// { +// startPage(); +// auditSignature.setSignerId(SecurityUtils.getUserId().toString()); // 当前用户 +// List list = auditSignatureService.selectMySubmittedAuditList(auditSignature); +// return getDataTable(list); +// } +// +// /** +// * 导出审批记录列表 +// */ +// @PreAuthorize("@ss.hasPermi('wisdom:signature:export')") +// @Log(title = "审批记录", businessType = BusinessType.EXPORT) +// @PostMapping("/export") +// public void export(HttpServletResponse response, AuditSignature auditSignature) +// { +// List list = auditSignatureService.selectAuditSignatureList(auditSignature); +// ExcelUtil util = new ExcelUtil(AuditSignature.class); +// util.exportExcel(response, list, "审批记录数据"); +// } +// +// /** +// * 获取审批记录详细信息 +// */ +// @PreAuthorize("@ss.hasPermi('wisdom:signature:query')") +// @GetMapping(value = "/{id}") +// public AjaxResult getInfo(@PathVariable("id") Long id) +// { +// return success(auditSignatureService.selectAuditSignatureById(id)); +// } +// +// +// /** +// * 审批 +// */ +// @PreAuthorize("@ss.hasPermi('wisdom:signature:edit')") +// @Log(title = "审批记录", businessType = BusinessType.UPDATE) +// @PutMapping +// public AjaxResult approve(@RequestBody AuditSignature auditSignature) { +// return toAjax(auditSignatureService.approveAuditSignature(auditSignature)); +// } +// +// /** +// * 删除审批记录 +// */ +// @PreAuthorize("@ss.hasPermi('wisdom:signature:remove')") +// @Log(title = "审批记录", businessType = BusinessType.DELETE) +// @DeleteMapping("/{ids}") +// public AjaxResult remove(@PathVariable Long[] ids) +// { +// return toAjax(auditSignatureService.deleteAuditSignatureByIds(ids)); +// } +// +// /** +// * 当前用户待审核列表条数 +// * @return +// */ +// @GetMapping("/count") +// public AjaxResult getPending(AuditSignature auditSignat) { +// String approverId = auditSignat.getApproverId(); +// int total = auditSignatureService.countPendingByUser(approverId); +// return AjaxResult.success(total); +// } +// +// /** +// * 审核操作(通过 / 驳回) +// */ +// @PostMapping("/audit") +// @Log(title = "审批记录", businessType = BusinessType.UPDATE) +// public AjaxResult audit(@RequestBody AuditSignature audit) { +// try { +// auditSignatureService.audit(audit); +// return AjaxResult.success("审核成功"); +// } catch (ServiceException e) { +// return AjaxResult.error("审核失败:" + e.getMessage()); +// } catch (Exception e) { +// return AjaxResult.error("系统异常,请联系管理员"); +// } +// } +//} diff --git a/src/main/java/com/zg/project/wisdom/controller/RkBillController.java b/src/main/java/com/zg/project/wisdom/controller/RkBillController.java index f9738cc..01c2cf2 100644 --- a/src/main/java/com/zg/project/wisdom/controller/RkBillController.java +++ b/src/main/java/com/zg/project/wisdom/controller/RkBillController.java @@ -1,88 +1,116 @@ package com.zg.project.wisdom.controller; -import com.zg.common.utils.DateUtils; -import com.zg.common.utils.SecurityUtils; +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import com.zg.project.wisdom.domain.dto.RkBillCreateDTO; +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.zg.framework.aspectj.lang.annotation.Log; +import com.zg.framework.aspectj.lang.enums.BusinessType; +import com.zg.project.wisdom.domain.RkBill; +import com.zg.project.wisdom.service.IRkBillService; import com.zg.framework.web.controller.BaseController; import com.zg.framework.web.domain.AjaxResult; -import com.zg.project.wisdom.domain.RkBill; +import com.zg.common.utils.poi.ExcelUtil; import com.zg.framework.web.page.TableDataInfo; -import com.zg.project.wisdom.domain.RkInfo; -import com.zg.project.wisdom.service.IRkBillService; -import com.zg.project.wisdom.service.IRkInfoService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.*; - -import java.util.List; +/** + * 库存单据Controller + * + * @author zg + * @date 2026-01-20 + */ @RestController @RequestMapping("/wisdom/bill") -public class RkBillController extends BaseController { - +public class RkBillController extends BaseController +{ @Autowired private IRkBillService rkBillService; - @Autowired - private IRkInfoService rkInfoService; - /** - * 分页查询单据主表 + * 查询库存单据列表 */ - @PreAuthorize("@ss.hasPermi('wisdom:stock:list')") + @PreAuthorize("@ss.hasPermi('wisdom:bill:list')") @GetMapping("/list") - public TableDataInfo list(RkBill rkBill) { + public TableDataInfo list(RkBill rkBill) + { startPage(); List list = rkBillService.selectRkBillList(rkBill); return getDataTable(list); } /** - * 根据ID获取详情 + * 导出库存单据列表 */ - @PreAuthorize("@ss.hasPermi('wisdom:stock:query')") - @GetMapping("/{id}") - public AjaxResult getInfo(@PathVariable Long id) { - return AjaxResult.success(rkBillService.selectRkBillById(id)); + @PreAuthorize("@ss.hasPermi('wisdom:bill:export')") + @Log(title = "库存单据", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, RkBill rkBill) + { + List list = rkBillService.selectRkBillList(rkBill); + ExcelUtil util = new ExcelUtil(RkBill.class); + util.exportExcel(response, list, "库存单据数据"); } /** - * 新增单据主(如未通过入库明细新增) + * 获取库存单据详细信息 */ - @PreAuthorize("@ss.hasPermi('wisdom:stock:add')") - @PostMapping - public AjaxResult add(@RequestBody RkBill rkBill) { - rkBill.setCreateBy(SecurityUtils.getUsername()); - rkBill.setCreateTime(DateUtils.getNowDate()); - return toAjax(rkBillService.insertRkBill(rkBill)); + @PreAuthorize("@ss.hasPermi('wisdom:bill:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rkBillService.selectRkBillById(id)); } /** - * 修改单据主 + * 新增库存单据 */ - @PreAuthorize("@ss.hasPermi('wisdom:stock:edit')") - @PutMapping - public AjaxResult edit(@RequestBody RkBill rkBill) { - rkBill.setUpdateBy(SecurityUtils.getUsername()); - rkBill.setUpdateTime(DateUtils.getNowDate()); + @PreAuthorize("@ss.hasPermi('wisdom:bill:add')") + @Log(title = "库存单据", businessType = BusinessType.INSERT) + @PostMapping("/add") + public AjaxResult add(@RequestBody RkBillCreateDTO dto) { + return toAjax(rkBillService.insertRkBillAndDetail(dto)); + } + + /** + * 向已有单据追加物料 + */ + @PreAuthorize("@ss.hasPermi('wisdom:bill:add')") + @Log(title = "库存单据", businessType = BusinessType.INSERT) + @PostMapping("/append") + public AjaxResult append(@RequestBody RkBillCreateDTO dto) { + return toAjax(rkBillService.appendRkBillDetail(dto)); + } + + + /** + * 修改库存单据 + */ + @PreAuthorize("@ss.hasPermi('wisdom:bill:edit')") + @Log(title = "库存单据", businessType = BusinessType.UPDATE) + @PostMapping("/update") + public AjaxResult edit(@RequestBody RkBill rkBill) + { return toAjax(rkBillService.updateRkBill(rkBill)); } /** - * 删除单据主(逻辑删除) + * 删除库存单据 */ - @PreAuthorize("@ss.hasPermi('wisdom:stock:remove')") - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Long[] ids) { - return toAjax(rkBillService.logicDeleteRkBillByIds(ids)); - } - - @PreAuthorize("@ss.hasPermi('wisdom:stock:query')") - @GetMapping("/detailList") - public TableDataInfo detailList(@RequestParam String billNo) { - RkInfo rkInfo = new RkInfo(); - rkInfo.setBillNo(billNo); - startPage(); - List list = rkInfoService.selectRkInfoList(rkInfo); - return getDataTable(list); + @PreAuthorize("@ss.hasPermi('wisdom:bill:remove')") + @Log(title = "库存单据", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(rkBillService.deleteRkBillByIds(ids)); } } diff --git a/src/main/java/com/zg/project/wisdom/controller/RkInfoController.java b/src/main/java/com/zg/project/wisdom/controller/RkInfoController.java index d42b5b6..53c6a2d 100644 --- a/src/main/java/com/zg/project/wisdom/controller/RkInfoController.java +++ b/src/main/java/com/zg/project/wisdom/controller/RkInfoController.java @@ -1,19 +1,17 @@ package com.zg.project.wisdom.controller; -import java.util.HashMap; import java.util.List; -import java.util.Map; import javax.servlet.http.HttpServletResponse; - -import com.github.pagehelper.PageHelper; -import com.zg.common.utils.StringUtils; -import com.zg.project.wisdom.domain.dto.*; -import com.zg.project.wisdom.domain.vo.DeliveryBillVO; -import com.zg.project.wisdom.service.QwenOcrRemoteService; -import com.zg.project.wisdom.service.RkStatisticsService; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; +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.zg.framework.aspectj.lang.annotation.Log; import com.zg.framework.aspectj.lang.enums.BusinessType; import com.zg.project.wisdom.domain.RkInfo; @@ -22,13 +20,12 @@ import com.zg.framework.web.controller.BaseController; import com.zg.framework.web.domain.AjaxResult; import com.zg.common.utils.poi.ExcelUtil; import com.zg.framework.web.page.TableDataInfo; -import org.springframework.web.multipart.MultipartFile; /** - * 库存单据主Controller + * 库存单据明细Controller * * @author zg - * @date 2025-05-28 + * @date 2026-01-20 */ @RestController @RequestMapping("/wisdom/stock") @@ -37,132 +34,33 @@ public class RkInfoController extends BaseController @Autowired private IRkInfoService rkInfoService; - @Autowired - private QwenOcrRemoteService qwenOcrRemoteService; - - /** - * 查询出库,借料,待审批,撤销出入库单据主列表 + * 查询库存单据明细列表 */ -// @PreAuthorize("@ss.hasPermi('wisdom:stock:list')") - @PostMapping("/list") - public TableDataInfo list(@RequestBody RkInfoQueryDTO query) { - PageHelper.startPage( - query.getPageNum() == null ? 1 : query.getPageNum(), - query.getPageSize() == null ? 10 : query.getPageSize() - ); - List list = rkInfoService.selectRkInfoList(query); - return getDataTable(list); - } - - @PostMapping("/borrow/list") - public TableDataInfo borrowList(@RequestBody RkInfoQueryDTO query) { - - PageHelper.startPage( - query.getPageNum() == null ? 1 : query.getPageNum(), - query.getPageSize() == null ? 10 : query.getPageSize() - ); - - List list = rkInfoService.selectBorrowAndReturnList(query); - return getDataTable(list); - } - - /** - * 库存查询 - * @param dto - * @return - */ - @PostMapping("/pageStatistics") - public Map pageStatistics(@RequestBody RkInfoQueryDTO dto) { - - PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); - - List list = rkInfoService.selectAllRkInfo(dto); - - Map dataInfo = new HashMap<>(); - dataInfo.put("dataList", getDataTable(list)); - return dataInfo; - } - - /** - * 单据头信息:根据入库单号查询公共字段 - */ - @PreAuthorize("@ss.hasPermi('wisdom:stock:query')") - @GetMapping("/header/{billNo}") - public AjaxResult getHeaderByBillNo(@PathVariable String billNo) { - RkInfo header = rkInfoService.selectHeaderByBillNo(billNo); - return success(header); - } - - @GetMapping("/pcode/{pcode}") - public AjaxResult listRkInfoByPcode(@PathVariable String pcode) { - List rows = rkInfoService.listRkInfoByPcode(pcode); - return AjaxResult.success(rows); - } - -// @PreAuthorize("@ss.hasPermi('wisdom:stock:list')") -// @PostMapping("/bill/groups") -// public TableDataInfo billGroups(@RequestBody RkInfoQueryDTO query) { -// // 分页 -// PageHelper.startPage(query.getPageNum(), query.getPageSize()); -// // 查询 -// List rows = rkInfoService.selectGroupedByBill(query); -// -// return getDataTable(rows); -// } - - /** - * 获取单据列表(轻量级:仅返回单据头公共信息,不聚合明细字段) - */ - @PostMapping("/bill/groups") - public TableDataInfo billHeaderList(@RequestBody RkInfoQueryDTO query) { - // 1. 分页 - PageHelper.startPage(query.getPageNum(), query.getPageSize()); - - // 2. 查询 - List list = rkInfoService.selectBillHeaderList(query); - - return getDataTable(list); - } - - /** - * 导出出入库记录 - */ - @PreAuthorize("@ss.hasPermi('wisdom:stock:export')") - @Log(title = "出入库记录", businessType = BusinessType.EXPORT) - @PostMapping("/exportPageList") - public void exportPageList(HttpServletResponse response, RkInfoQueryDTO query) + @PreAuthorize("@ss.hasPermi('wisdom:stock:list')") + @GetMapping("/list") + public TableDataInfo list(RkInfo rkInfo) { - List list = rkInfoService.selectRkInfoPageList(query); - ExcelUtil util = new ExcelUtil<>(RkInfo.class); - util.exportExcel(response, list, "出入库记录导出"); - } - - /** - * 出入库查询 - */ - @PostMapping("/pageList") - public TableDataInfo pageList(@RequestBody RkInfoQueryDTO dto) { - PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); - List list = rkInfoService.selectRkInfoPageList(dto); + startPage(); + List list = rkInfoService.selectRkInfoList(rkInfo); return getDataTable(list); } /** - * 导出库存单据主列表 + * 导出库存单据明细列表 */ @PreAuthorize("@ss.hasPermi('wisdom:stock:export')") - @Log(title = "库存单据主", businessType = BusinessType.EXPORT) + @Log(title = "库存单据明细", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, RkInfo rkInfo) { List list = rkInfoService.selectRkInfoList(rkInfo); ExcelUtil util = new ExcelUtil(RkInfo.class); - util.exportExcel(response, list, "数据导出"); + util.exportExcel(response, list, "库存单据明细数据"); } /** - * 获取库存单据主详细信息 + * 获取库存单据明细详细信息 */ @PreAuthorize("@ss.hasPermi('wisdom:stock:query')") @GetMapping(value = "/{id}") @@ -172,240 +70,35 @@ public class RkInfoController extends BaseController } /** - * 入库操作 + * 新增库存单据明细 */ - @PostMapping("/add") @PreAuthorize("@ss.hasPermi('wisdom:stock:add')") - @Log(title = "库存单据主", businessType = BusinessType.INSERT) - public AjaxResult batchAdd(@RequestBody PcRkInfoBatchDTO dto) { - rkInfoService.batchInsert(dto); - return AjaxResult.success("提交成功"); + @Log(title = "库存单据明细", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody RkInfo rkInfo) + { + return toAjax(rkInfoService.insertRkInfo(rkInfo)); } /** - * 修改库存单据主 + * 修改库存单据明细 */ @PreAuthorize("@ss.hasPermi('wisdom:stock:edit')") - @Log(title = "库存单据主", businessType = BusinessType.UPDATE) - @PostMapping("/update") + @Log(title = "库存单据明细", businessType = BusinessType.UPDATE) + @PutMapping public AjaxResult edit(@RequestBody RkInfo rkInfo) { return toAjax(rkInfoService.updateRkInfo(rkInfo)); } /** - * 根据出库单据号修改库存单据 - */ - @PreAuthorize("@ss.hasPermi('wisdom:stock:edit')") - @Log(title = "库存单据-按出库单号修改", businessType = BusinessType.UPDATE) - @PostMapping("/updateByBillNoCk") - public AjaxResult updateByBillNoCk(@RequestBody RkInfo rkInfo) { - if (StringUtils.isBlank(rkInfo.getBillNoCk())) { - return AjaxResult.error("出库单据号 billNoCk 不能为空"); - } - return toAjax(rkInfoService.updateRkInfoByBillNoCk(rkInfo)); - } - - /** - * 删除库存单据主 + * 删除库存单据明细 */ @PreAuthorize("@ss.hasPermi('wisdom:stock:remove')") - @Log(title = "库存单据主", businessType = BusinessType.DELETE) + @Log(title = "库存单据明细", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(rkInfoService.deleteRkInfoByIds(ids)); } - - /** - * 库龄超过20天统计 - * @return - */ - @GetMapping("/warning/stock/over20") - public AjaxResult getOverdueStockTopList() { - int total = rkInfoService.countOverdueStock(); - List list = rkInfoService.selectTopOverdueStock(20); - Map result = new HashMap<>(); - result.put("total", total); - result.put("list", list); - return AjaxResult.success(result); - } - - /** - * App撤销出库 - * @param - * @return - */ - @PutMapping("/deleteByCkBillNo") - @Log(title = "库存单据主", businessType = BusinessType.UPDATE) - public AjaxResult deleteByCkBillNo(@RequestBody Map body) { - String billNoCk = body.get("billNoCk"); - if (billNoCk == null || billNoCk.trim().isEmpty()) { - return AjaxResult.error("参数错误,缺少出库单据号(billNoCk)"); - } - - int result = rkInfoService.deleteByCkBillNo(billNoCk); - return result > 0 - ? AjaxResult.success("出库单据: " + billNoCk + " 撤销成功") - : AjaxResult.error("撤销失败,出库单据: " + billNoCk + " 不存在或已处理"); - } - - /** - * 根据主键ID撤销入库 - */ - @PostMapping("/cancel") - @Log(title = "库存单据主", businessType = BusinessType.UPDATE) - public AjaxResult deleteById(@RequestBody RkCancelDTO dto) { - rkInfoService.deleteRkInfoById(dto); - return AjaxResult.success("撤销成功"); - } - - /** - * 根据主键ID撤销出库 - */ - @PostMapping("/cancelById/{id}") - @Log(title = "库存单据主", businessType = BusinessType.UPDATE) - public AjaxResult cancelOutStockById(@PathVariable Long id) { - rkInfoService.cancelOutStockById(id); - return AjaxResult.success("撤销出库成功"); - } - - - /** - * 根据主键id进行删除 - * 出入库撤销记录删除 - */ - @PostMapping("/deleteByIds") - @Log(title = "库存单据主", businessType = BusinessType.UPDATE) - public AjaxResult deleteByIds(@RequestBody Long[] ids) { - return AjaxResult.success(rkInfoService.deleteRkInfoByIds(ids)); - } - - /** - * 根据ids恢复出库或入库 - */ - @PostMapping("/revertByIds") - @Log(title = "库存单据主", businessType = BusinessType.UPDATE) - public AjaxResult revertByIds(@RequestBody Long[] ids) { - rkInfoService.revertByIds(ids); - return AjaxResult.success(); - } - - /** - * 出库操作 - * @param - * @return - */ - @PreAuthorize("@ss.hasPermi('wisdom:outbound:add')") - @Log(title = "库存单据主", businessType = BusinessType.UPDATE) - @PutMapping("/outStock") - public AjaxResult doOutStock(@RequestBody StockOutDTO dto) { - return toAjax(rkInfoService.batchOutStock(dto)); - } - - /** - * 还料入库 - * @param - * @return - */ - @Log(title = "还料入库", businessType = BusinessType.INSERT) - @PreAuthorize("@ss.hasPermi('wisdom:outbound:add')") - @PostMapping("/refund") - public AjaxResult refundMaterial(@RequestBody RefundRequestDTO dto) { - return toAjax(rkInfoService.refundMaterial(dto)); - } - - /** - * 配送出库单据查询 - * @param - * @return - */ - @GetMapping("/delivery/list") - public AjaxResult listDelivery(RkInfo query) { - query.setIsChuku("1"); - query.setIsDelivery("1"); - List list = rkInfoService.selectDeliveryBillList(query); - return AjaxResult.success(list); - } - - /** - * 分页查询 rk_info 所有明细 - * @param - * @return - */ - @PostMapping("/page") - public TableDataInfo page(@RequestBody(required = false) RkInfoQueryDTO dto) { - - if (dto == null) { - dto = new RkInfoQueryDTO(); - } - - // 使用 PageHelper 分页 - PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); - - List list = rkInfoService.selectAllRkInfo(dto); - - return getDataTable(list); - - } - -// 根据玉田需求,新添加的接口 - @PreAuthorize("@ss.hasPermi('wisdom:stock:edit')") - @PostMapping("/editBill") - public AjaxResult editBill(@RequestBody RkInfo rkInfo) - { - return toAjax(rkInfoService.updateBillInfo(rkInfo)); - } - - /** - * 相同入库单据号追加入库 - * @param dto - * @return - */ - @PostMapping("/append") - @PreAuthorize("@ss.hasPermi('wisdom:stock:add')") - @Log(title = "追加入库", businessType = BusinessType.INSERT) - public AjaxResult append(@RequestBody PcRkInfoBatchDTO dto) { - rkInfoService.appendToExistingBill(dto); - return AjaxResult.success("追加入库成功"); - } - - - @PostMapping("/updateDeliveryStatus") - @Log(title = "更新配送状态", businessType = BusinessType.UPDATE) - public AjaxResult updateDeliveryStatus(@RequestBody RkDeliveryUpdateDTO dto) { - - if (dto.getIds() == null || dto.getIds().isEmpty()) { - return AjaxResult.error("rk_info 主键ID集合不能为空"); - } - if (dto.getIsDelivery() == null) { - return AjaxResult.error("配送状态不能为空"); - } - - int rows = rkInfoService.updateDeliveryStatus(dto.getIds(), dto.getIsDelivery()); - return AjaxResult.success(rows); - } - - /** - * 上传图片,识别采购订单号(ERP) - * - * 前端调用示例(multipart/form-data): - * POST /wisdom/ocr/extractErp - * file: <图片文件> - */ - @PostMapping("/extractErp") - public AjaxResult extractErp(@RequestParam("file") MultipartFile file) { - - if (file == null || file.isEmpty()) { - return AjaxResult.error("上传文件不能为空"); - } - - String erpOrderNo = qwenOcrRemoteService.extractErpOrderNo(file); - - - return AjaxResult.success(erpOrderNo); - - } - - } diff --git a/src/main/java/com/zg/project/wisdom/controller/RkRecordController.java b/src/main/java/com/zg/project/wisdom/controller/RkRecordController.java new file mode 100644 index 0000000..529a592 --- /dev/null +++ b/src/main/java/com/zg/project/wisdom/controller/RkRecordController.java @@ -0,0 +1,114 @@ +package com.zg.project.wisdom.controller; + +import java.util.List; +import javax.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.zg.framework.aspectj.lang.annotation.Log; +import com.zg.framework.aspectj.lang.enums.BusinessType; +import com.zg.project.wisdom.domain.RkRecord; +import com.zg.project.wisdom.service.IRkRecordService; +import com.zg.framework.web.controller.BaseController; +import com.zg.framework.web.domain.AjaxResult; +import com.zg.common.utils.poi.ExcelUtil; +import com.zg.framework.web.page.TableDataInfo; + +/** + * 出入库记录Controller + * + * @author zg + * @date 2026-01-20 + */ +@RestController +@RequestMapping("/wisdom/record") +public class RkRecordController extends BaseController +{ + @Autowired + private IRkRecordService rkRecordService; + + /** + * 查询出入库记录列表 + */ + @PreAuthorize("@ss.hasPermi('wisdom:record:list')") + @GetMapping("/list") + public TableDataInfo list(RkRecord rkRecord) + { + startPage(); + List list = rkRecordService.selectRkRecordList(rkRecord); + return getDataTable(list); + } + + /** + * 根据单据号查询出入库记录明细 + */ + @PreAuthorize("@ss.hasPermi('wisdom:record:list')") + @GetMapping("/listByBillNo/{billNo}") + public AjaxResult listByBillNo(@PathVariable String billNo) + { + return success(rkRecordService.selectRkRecordListByBillNo(billNo)); + } + + /** + * 导出出入库记录列表 + */ + @PreAuthorize("@ss.hasPermi('wisdom:record:export')") + @Log(title = "出入库记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, RkRecord rkRecord) + { + List list = rkRecordService.selectRkRecordList(rkRecord); + ExcelUtil util = new ExcelUtil(RkRecord.class); + util.exportExcel(response, list, "出入库记录数据"); + } + + /** + * 获取出入库记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('wisdom:record:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rkRecordService.selectRkRecordById(id)); + } + + /** + * 新增出入库记录 + */ + @PreAuthorize("@ss.hasPermi('wisdom:record:add')") + @Log(title = "出入库记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody RkRecord rkRecord) + { + return toAjax(rkRecordService.insertRkRecord(rkRecord)); + } + + /** + * 修改出入库记录 + */ + @PreAuthorize("@ss.hasPermi('wisdom:record:edit')") + @Log(title = "出入库记录", businessType = BusinessType.UPDATE) + @PostMapping("/update") + public AjaxResult edit(@RequestBody RkRecord rkRecord) + { + return toAjax(rkRecordService.updateRkRecord(rkRecord)); + } + + /** + * 删除出入库记录 + */ + @PreAuthorize("@ss.hasPermi('wisdom:record:remove')") + @Log(title = "出入库记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(rkRecordService.deleteRkRecordByIds(ids)); + } +} diff --git a/src/main/java/com/zg/project/wisdom/controller/RkStatisticsController.java b/src/main/java/com/zg/project/wisdom/controller/RkStatisticsController.java index a9f36a3..6cd3e16 100644 --- a/src/main/java/com/zg/project/wisdom/controller/RkStatisticsController.java +++ b/src/main/java/com/zg/project/wisdom/controller/RkStatisticsController.java @@ -180,9 +180,9 @@ public class RkStatisticsController { return AjaxResult.success(rows); } - @PostMapping("/statistics") - public Map statistics(@RequestBody RkInfoQueryDTO dto) { - // 调用新的合并查询方法 - return rkStatisticsService.selectStockStatistics(dto); - } +// @PostMapping("/statistics") +// public Map statistics(@RequestBody RkInfoQueryDTO dto) { +// // 调用新的合并查询方法 +// return rkStatisticsService.selectStockStatistics(dto); +// } } \ No newline at end of file diff --git a/src/main/java/com/zg/project/wisdom/controller/app/AppRkInfoController.java b/src/main/java/com/zg/project/wisdom/controller/app/AppRkInfoController.java index 1967773..f1aac4b 100644 --- a/src/main/java/com/zg/project/wisdom/controller/app/AppRkInfoController.java +++ b/src/main/java/com/zg/project/wisdom/controller/app/AppRkInfoController.java @@ -6,8 +6,6 @@ import com.zg.framework.aspectj.lang.enums.BusinessType; import com.zg.framework.web.controller.BaseController; import com.zg.framework.web.domain.AjaxResult; import com.zg.framework.web.page.TableDataInfo; -import com.zg.project.wisdom.domain.RkBill; -import com.zg.project.wisdom.domain.RkInfo; import com.zg.project.wisdom.domain.dto.RkInfoBatchDTO; import com.zg.project.wisdom.service.IRkBillService; import com.zg.project.wisdom.service.IRkInfoService; @@ -16,9 +14,7 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * 库存单据主Controller @@ -52,15 +48,15 @@ public class AppRkInfoController extends BaseController { /** * 查询库存单据主列表 */ - @PreAuthorize("@ss.hasPermi('wisdom:stock:list')") -// @GetMapping("/details/list") - @GetMapping("/list") - public TableDataInfo list(RkInfo rkInfo) - { - startPage(); - List list = rkInfoService.selectRkInfoList(rkInfo); - return getDataTable(list); - } +// @PreAuthorize("@ss.hasPermi('wisdom:stock:list')") +//// @GetMapping("/details/list") +// @GetMapping("/list") +// public TableDataInfo list(RkInfo rkInfo) +// { +// startPage(); +// List list = rkInfoService.selectRkInfoList(rkInfo); +// return getDataTable(list); +// } /** @@ -68,25 +64,25 @@ public class AppRkInfoController extends BaseController { * @param billNo * @return */ - @DeleteMapping("/deleteByBillNo/{billNo}") - @PreAuthorize("@ss.hasPermi('wisdom:stock:deleteByBillNo')") - public AjaxResult deleteByBillNo(@PathVariable String billNo) { - rkInfoService.deleteByBillNo(billNo); - return AjaxResult.success("撤销成功"); - } +// @DeleteMapping("/deleteByBillNo/{billNo}") +// @PreAuthorize("@ss.hasPermi('wisdom:stock:deleteByBillNo')") +// public AjaxResult deleteByBillNo(@PathVariable String billNo) { +// rkInfoService.deleteByBillNo(billNo); +// return AjaxResult.success("撤销成功"); +// } /** * 导出库存单据主列表 */ - @PreAuthorize("@ss.hasPermi('wisdom:stock:export')") - @Log(title = "库存单据主", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(HttpServletResponse response, RkInfo rkInfo) - { - List list = rkInfoService.selectRkInfoList(rkInfo); - ExcelUtil util = new ExcelUtil(RkInfo.class); - util.exportExcel(response, list, "库存单据主数据"); - } +// @PreAuthorize("@ss.hasPermi('wisdom:stock:export')") +// @Log(title = "库存单据主", businessType = BusinessType.EXPORT) +// @PostMapping("/export") +// public void export(HttpServletResponse response, RkInfo rkInfo) +// { +// List list = rkInfoService.selectRkInfoList(rkInfo); +// ExcelUtil util = new ExcelUtil(RkInfo.class); +// util.exportExcel(response, list, "库存单据主数据"); +// } /** * 获取库存单据主详细信息 @@ -101,23 +97,23 @@ public class AppRkInfoController extends BaseController { /** * 新增库存单据主 */ - @PreAuthorize("@ss.hasPermi('wisdom:stock:add')") - @Log(title = "库存单据主", businessType = BusinessType.INSERT) - @PostMapping("/add") - public AjaxResult batchAdd(@RequestBody RkInfoBatchDTO dto) { - return toAjax(rkInfoService.batchInsertApp(dto)); - } - - /** - * 修改库存单据主 - */ - @PreAuthorize("@ss.hasPermi('wisdom:stock:edit')") - @Log(title = "库存单据主", businessType = BusinessType.UPDATE) - @PutMapping - public AjaxResult edit(@RequestBody RkInfo rkInfo) - { - return toAjax(rkInfoService.updateRkInfo(rkInfo)); - } +// @PreAuthorize("@ss.hasPermi('wisdom:stock:add')") +// @Log(title = "库存单据主", businessType = BusinessType.INSERT) +// @PostMapping("/add") +// public AjaxResult batchAdd(@RequestBody RkInfoBatchDTO dto) { +// return toAjax(rkInfoService.batchInsertApp(dto)); +// } +// +// /** +// * 修改库存单据主 +// */ +// @PreAuthorize("@ss.hasPermi('wisdom:stock:edit')") +// @Log(title = "库存单据主", businessType = BusinessType.UPDATE) +// @PutMapping +// public AjaxResult edit(@RequestBody RkInfo rkInfo) +// { +// return toAjax(rkInfoService.updateRkInfo(rkInfo)); +// } /** * 删除库存单据主 diff --git a/src/main/java/com/zg/project/wisdom/domain/RkBill.java b/src/main/java/com/zg/project/wisdom/domain/RkBill.java index 83cf74b..5ab6f94 100644 --- a/src/main/java/com/zg/project/wisdom/domain/RkBill.java +++ b/src/main/java/com/zg/project/wisdom/domain/RkBill.java @@ -1,104 +1,120 @@ package com.zg.project.wisdom.domain; import java.util.Date; + import com.fasterxml.jackson.annotation.JsonFormat; -import com.zg.framework.aspectj.lang.annotation.Excel; -import com.zg.framework.web.domain.BaseEntity; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; +import com.zg.framework.aspectj.lang.annotation.Excel; +import com.zg.framework.web.domain.BaseEntity; /** - * 入库单据主表对象 rk_bill - * + * 库存单据对象 rk_bill + * * @author zg - * @date 2025-06-06 + * @date 2026-01-20 */ -public class RkBill extends BaseEntity -{ +public class RkBill extends BaseEntity { + private static final long serialVersionUID = 1L; /** 主键ID */ private Long id; - /** 入库类型 */ -// @Excel(name = "入库类型") - private String rkType; - /** 物资类型 */ -// @Excel(name = "物资类型") + @Excel(name = "物资类型") private String wlType; - /** 所属仓库 */ -// @Excel(name = "所属仓库") - private String cangku; - - /** 入库类型名称 */ - @Excel(name = "入库类型名称") - private String rkTypeName; - - /** 物资类型名称 */ + /** 物资类型名称(联表) */ @Excel(name = "物资类型名称") private String wlTypeName; - /** 所属仓库名称 */ - @Excel(name = "所属仓库名称") - private String cangkuName; + /** 所属仓库(小仓编码) */ + @Excel(name = "所属仓库") + private String cangku; - /** 理货员名称 */ - @Excel(name = "理货员名称") - private String lihuoYName; + /** 小仓名称(联表) */ + @Excel(name = "仓库名称") + private String warehouseName; - /** 入库时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Excel(name = "入库时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") - private Date rkTime; - - /** 理货员 */ -// @Excel(name = "理货员") - private String lihuoY; - - - /** 出库类型 */ - private String ckType; - - /** 出库类型名称(展示用) */ - @Excel(name = "出库类型名称") - private String ckTypeName; - - /** 出库时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Excel(name = "出库时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") - private Date ckTime; - - /** 出库理货员 */ - private String ckLihuoY; - - /** 出库理货员名称(展示用) */ - @Excel(name = "出库理货员名称") - private String ckLihuoYName; - - /** 出库备注 */ - @Excel(name = "出库备注") - private String ckRemark; - - /** 施工队编码 */ - private String teamCode; - - /** 施工队名称(展示用) */ - @Excel(name = "施工队名称") - private String teamName; + /** 大仓名称(联表) */ + @Excel(name = "大仓名称") + private String parentWarehouseName; /** 单据号 */ @Excel(name = "单据号") private String billNo; - /** 是否已出库(0未出库,1已出库) */ - @Excel(name = "是否出库", readConverterExp = "0=未出库,1=已出库") - private String isChuku; + /** 原字段:出入库类型 */ + @Excel(name = "出入库类型") + private String operationType; + + /** 出入库类型名称(联表) */ + @Excel(name = "出入库类型名称") + private String operationTypeName; + + /** + * 业务操作类型 + * 0 入库 + * 1 出库 + * 2 借料出库 + * 3 还料入库 + */ + @Excel(name = "操作类型", readConverterExp = "0=入库,1=出库,2=借料出库,3=还料入库") + private String bizType; + + /** 出入库时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "出入库时间") + private Date operationTime; + + /** 执行状态(0预入/预出,1已完成) */ + @Excel(name = "执行状态", readConverterExp = "0=预入/预出,1=已完成") + private String execStatus; + + /** 理货员(用户ID) */ +// @Excel(name = "理货员") + private Integer operator; + + /** 理货员名称(联表) */ + @Excel(name = "理货员") + private String operatorName; + + /** 施工队编码 */ + @Excel(name = "施工队编码") + private String teamCode; + + /** 是否需要配送(0否,1是,2配送中,3配送完成) */ + @Excel(name = "是否需要配送", readConverterExp = "0=否,1=是,2=配送中,3=配送完成") + private String isDelivery; + + /** 创建人 */ + private String createBy; + + /** 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** 更新人 */ + private String updateBy; + + /** 更新时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; /** 是否删除(0正常,1删除) */ private String isDelete; + /** 入库 / 出库开始时间(查询用) */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date startDate; + + /** 入库 / 出库结束时间(查询用) */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date endDate; + + // ================= getter / setter ================= + public Long getId() { return id; } @@ -107,14 +123,6 @@ public class RkBill extends BaseEntity this.id = id; } - public String getRkType() { - return rkType; - } - - public void setRkType(String rkType) { - this.rkType = rkType; - } - public String getWlType() { return wlType; } @@ -123,6 +131,14 @@ public class RkBill extends BaseEntity this.wlType = wlType; } + public String getWlTypeName() { + return wlTypeName; + } + + public void setWlTypeName(String wlTypeName) { + this.wlTypeName = wlTypeName; + } + public String getCangku() { return cangku; } @@ -131,94 +147,20 @@ public class RkBill extends BaseEntity this.cangku = cangku; } - public String getRkTypeName() { return rkTypeName; } - public void setRkTypeName(String rkTypeName) { this.rkTypeName = rkTypeName; } - - public String getWlTypeName() { return wlTypeName; } - public void setWlTypeName(String wlTypeName) { this.wlTypeName = wlTypeName; } - - public String getCangkuName() { return cangkuName; } - public void setCangkuName(String cangkuName) { this.cangkuName = cangkuName; } - - public Date getRkTime() { - return rkTime; + public String getWarehouseName() { + return warehouseName; } - public void setRkTime(Date rkTime) { - this.rkTime = rkTime; + public void setWarehouseName(String warehouseName) { + this.warehouseName = warehouseName; } - public String getLihuoY() { - return lihuoY; + public String getParentWarehouseName() { + return parentWarehouseName; } - public void setLihuoY(String lihuoY) { - this.lihuoY = lihuoY; - } - - - public String getCkType() { - return ckType; - } - - public void setCkType(String ckType) { - this.ckType = ckType; - } - - public String getCkTypeName() { - return ckTypeName; - } - - public void setCkTypeName(String ckTypeName) { - this.ckTypeName = ckTypeName; - } - - public Date getCkTime() { - return ckTime; - } - - public void setCkTime(Date ckTime) { - this.ckTime = ckTime; - } - - public String getCkLihuoY() { - return ckLihuoY; - } - - public void setCkLihuoY(String ckLihuoY) { - this.ckLihuoY = ckLihuoY; - } - - public String getCkLihuoYName() { - return ckLihuoYName; - } - - public void setCkLihuoYName(String ckLihuoYName) { - this.ckLihuoYName = ckLihuoYName; - } - - public String getCkRemark() { - return ckRemark; - } - - public void setCkRemark(String ckRemark) { - this.ckRemark = ckRemark; - } - - public String getTeamCode() { - return teamCode; - } - - public void setTeamCode(String teamCode) { - this.teamCode = teamCode; - } - - public String getTeamName() { - return teamName; - } - - public void setTeamName(String teamName) { - this.teamName = teamName; + public void setParentWarehouseName(String parentWarehouseName) { + this.parentWarehouseName = parentWarehouseName; } public String getBillNo() { @@ -229,12 +171,108 @@ public class RkBill extends BaseEntity this.billNo = billNo; } - public String getIsChuku() { - return isChuku; + public String getOperationType() { + return operationType; } - public void setIsChuku(String isChuku) { - this.isChuku = isChuku; + public void setOperationType(String operationType) { + this.operationType = operationType; + } + + public String getOperationTypeName() { + return operationTypeName; + } + + public void setOperationTypeName(String operationTypeName) { + this.operationTypeName = operationTypeName; + } + + public String getBizType() { + return bizType; + } + + public void setBizType(String bizType) { + this.bizType = bizType; + } + + public Date getOperationTime() { + return operationTime; + } + + public void setOperationTime(Date operationTime) { + this.operationTime = operationTime; + } + + public String getExecStatus() { + return execStatus; + } + + public void setExecStatus(String execStatus) { + this.execStatus = execStatus; + } + + public Integer getOperator() { + return operator; + } + + public void setOperator(Integer operator) { + this.operator = operator; + } + + public String getOperatorName() { + return operatorName; + } + + public void setOperatorName(String operatorName) { + this.operatorName = operatorName; + } + + public String getTeamCode() { + return teamCode; + } + + public void setTeamCode(String teamCode) { + this.teamCode = teamCode; + } + + public String getIsDelivery() { + return isDelivery; + } + + public void setIsDelivery(String isDelivery) { + this.isDelivery = isDelivery; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; } public String getIsDelete() { @@ -245,31 +283,51 @@ public class RkBill extends BaseEntity this.isDelete = isDelete; } + public Date getStartDate() { + return startDate; + } + + public void setStartDate(Date startDate) { + this.startDate = startDate; + } + + public Date getEndDate() { + return endDate; + } + + public void setEndDate(Date endDate) { + this.endDate = endDate; + } + + // ================= toString ================= + @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) - .append("rkType", getRkType()) - .append("wlType", getWlType()) - .append("cangku", getCangku()) - .append("rkTime", getRkTime()) - .append("lihuoY", getLihuoY()) - .append("ckType", getCkType()) - .append("ckTypeName", getCkTypeName()) - .append("ckTime", getCkTime()) - .append("ckLihuoY", getCkLihuoY()) - .append("ckLihuoYName", getCkLihuoYName()) - .append("ckRemark", getCkRemark()) - .append("teamCode", getTeamCode()) - .append("teamName", getTeamName()) - .append("billNo", getBillNo()) - .append("isChuku", getIsChuku()) - .append("isDelete", getIsDelete()) - .append("createBy", getCreateBy()) - .append("createTime", getCreateTime()) - .append("updateBy", getUpdateBy()) - .append("updateTime", getUpdateTime()) - .append("remark", getRemark()) - .toString(); + .append("id", id) + .append("wlType", wlType) + .append("wlTypeName", wlTypeName) + .append("cangku", cangku) + .append("warehouseName", warehouseName) + .append("parentWarehouseName", parentWarehouseName) + .append("billNo", billNo) + .append("operationType", operationType) + .append("operationTypeName", operationTypeName) + .append("bizType", bizType) + .append("operationTime", operationTime) + .append("execStatus", execStatus) + .append("operator", operator) + .append("operatorName", operatorName) + .append("teamCode", teamCode) + .append("isDelivery", isDelivery) + .append("createBy", createBy) + .append("createTime", createTime) + .append("updateBy", updateBy) + .append("updateTime", updateTime) + .append("isDelete", isDelete) + .append("remark", getRemark()) + .append("startDate", startDate) + .append("endDate", endDate) + .toString(); } } diff --git a/src/main/java/com/zg/project/wisdom/domain/RkInfo.java b/src/main/java/com/zg/project/wisdom/domain/RkInfo.java index 802df76..7ae2d00 100644 --- a/src/main/java/com/zg/project/wisdom/domain/RkInfo.java +++ b/src/main/java/com/zg/project/wisdom/domain/RkInfo.java @@ -2,9 +2,6 @@ package com.zg.project.wisdom.domain; import java.math.BigDecimal; import java.util.Date; -import java.util.List; - -import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; @@ -12,138 +9,80 @@ import com.zg.framework.aspectj.lang.annotation.Excel; import com.zg.framework.web.domain.BaseEntity; /** - * 库存单据主对象 rk_info - * + * 库存单据明细对象 rk_info + * * @author zg - * @date 2025-05-28 + * @date 2026-01-20 */ -public class RkInfo extends BaseEntity { +public class RkInfo extends BaseEntity +{ private static final long serialVersionUID = 1L; - /** 模糊搜索关键字(项目号、项目描述、物料号、物料描述、供应商编码、供应商名称,订单编号) */ - private String keyword; - /** 主键ID */ private Long id; - @TableField(exist = false) - private List ids; + /** 业务操作类型(0入库,1出库,2借料出库,3还料入库) */ + @Excel(name = "业务操作类型", readConverterExp = "0=入库,1=出库,2=借料出库,3=还料入库") + private String bizType; - /** 是否已出库(0已入库,1已出库,2待审批,3借料出库,4入库撤销,5出库撤销) */ - @Excel(name = "库存状态", readConverterExp = "0=已入库,1=已出库,2=待审批,3=借料出库,4=入库撤销,5=出库撤销") - private String isChuku; + /** 出入库类型 */ + @Excel(name = "出入库类型") + private String operationType; - /** 供应计划ID(对应供应计划表主键) */ -// @Excel(name = "供应计划ID") - private Long gysJhId; - - /** 审批人ID(非数据库字段) */ - @TableField(exist = false) - private String approverId; - - /** 库龄 */ - @Excel(name = "库龄") - private Long stockAge; - - /** 入库类型 */ - private String rkType; + /** 执行状态(0预入/预出,1已完成) */ + @Excel(name = "执行状态", readConverterExp = "0=预入/预出,1=已完成") + private String execStatus; /** 物资类型 */ + @Excel(name = "物资类型") private String wlType; - /** 所属仓库(原始字段,表里存的仓库编码) */ + /** 所属仓库 */ + @Excel(name = "所属仓库") private String cangku; - /** 多状态查询:是否出库(如 0=入库, 1=出库 等) */ - @TableField(exist = false) - private List isChukuList; + /** 出入库时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "出入库时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date operationTime; - /** 入库类型名称(联查显示用,导出专用) */ - @Excel(name = "入库类型名称") - private String rkTypeName; + /** 库龄(天) */ + @Excel(name = "库龄(天)") + private Long stockAge; - /** 物资类型名称(联查显示用,导出专用) */ - @Excel(name = "物资类型名称") - private String wlTypeName; + /** 出入库理货员 */ +// @Excel(name = "出入库理货员") + private Integer operator; + /** 是否已出库(0已入库,1已出库) */ + @Excel(name = "是否已出库", readConverterExp = "0=已入库,1已出库") + private String isChuku; - /** 所属仓库名称(联查显示用,导出专用,对应 cangku) */ - @Excel(name = "所属仓库名称") - private String cangkuName; - - /* ================== 新增:大仓 / 小仓信息(非 rk_info 表字段,联查 pcde_detail + warehouse_info) ================== */ - - /** 所属大仓编码 */ - @TableField(exist = false) -// @Excel(name = "所属大仓编码") - private String parentWarehouseCode; - - /** 所属大仓名称 */ - @TableField(exist = false) - @Excel(name = "所属大仓名称") - private String parentWarehouseName; - - /** 所属小仓编码 */ - @TableField(exist = false) -// @Excel(name = "所属小仓编码") - private String warehouseCode; - - /** 所属小仓名称 */ - @TableField(exist = false) - @Excel(name = "所属小仓名称") - private String warehouseName; - - /* =============================================================================================================== */ - - /** 入库时间(用户操作入库的日期) */ - @Excel(name = "入库时间", dateFormat = "yyyy-MM-dd HH:mm:ss") - private Date rkTime; - - /** 借用时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Excel(name = "借用时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") - private Date borrowTime; - - /** 归还时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Excel(name = "归还时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") - private Date returnTime; - - /** 理货员 */ -// @Excel(name = "理货员") - private String lihuoY; - - /** 理货员名称(联查显示用,导出专用) */ - @Excel(name = "理货员") - private String lihuoYName; + /** 0:入库待审核,1已通过,2已驳回,3出库待审核 */ + @Excel(name = "0:入库待审核,1已通过,2已驳回,3出库待审核") + private String status; /** 单据号 */ @Excel(name = "单据号") private String billNo; - /** 出库单据号 */ - @Excel(name = "出库单据号") - private String billNoCk; - - /** 是否需要配送(0否 1是 2配送中 3配送完成) */ -// @Excel(name = "是否需要配送", readConverterExp = "0=否,1=是,2=配送中,3=配送完成") - private String isDelivery; - /** 县局 */ -// @Excel(name = "县局") + @Excel(name = "县局") private String xj; /** 项目号 */ - @Excel(name = "库存项目号") + @Excel(name = "项目号") private String xmNo; /** 项目描述 */ - @Excel(name = "库存项目描述") + @Excel(name = "项目描述") private String xmMs; -// @Excel(name = "领取方项目号") + /** 出库项目号(借用方项目) */ + @Excel(name = "出库项目号", readConverterExp = "借=用方项目") private String xmNoCk; -// @Excel(name = "领取方项目描述") + /** 出库项目描述(借用方项目描述) */ + @Excel(name = "出库项目描述", readConverterExp = "借=用方项目描述") private String xmMsCk; /** 物料号 */ @@ -175,16 +114,16 @@ public class RkInfo extends BaseEntity { private String sapNo; /** 行号 */ -// @Excel(name = "行号") + @Excel(name = "行号") private String xh; /** 计划交货数量 */ @Excel(name = "计划交货数量") - private Long jhQty; + private BigDecimal jhQty; /** 合同数量 */ @Excel(name = "合同数量") - private Long htQty; + private BigDecimal htQty; /** 计量单位 */ @Excel(name = "计量单位") @@ -194,19 +133,12 @@ public class RkInfo extends BaseEntity { @Excel(name = "实际入库数量") private BigDecimal realQty; - /** 总金额 = 合同单价 × 实际入库数量(导出专用) */ - @Excel(name = "总金额") - private BigDecimal totalAmount; - - @Excel(name = "备注") - private String remark; - - /** 库位码(编码) */ + /** 库位码 */ @Excel(name = "库位码") private String pcode; - /** 库位主键ID(pcde_detail.id) */ -// @Excel(name = "库位主键ID") + /** 库位16进制编码 */ + @Excel(name = "库位16进制编码") private String pcodeId; /** 托盘码 */ @@ -214,377 +146,587 @@ public class RkInfo extends BaseEntity { private String trayCode; /** 实物ID */ -// @Excel(name = "实物ID") + @Excel(name = "实物ID") private String entityId; - /** 一货一图 - 货物照片URL(非表字段) */ - @TableField(exist = false) - private String photoUrl; - - @Excel(name = "出库理货员") - private String ckLihuoY; - - private String ckType; - - @Excel(name = "出库类型名称") - private String ckTypeName; - + /** 施工队 */ + @Excel(name = "施工队") private String teamCode; - @Excel(name = "施工队名称") - private String teamName; + /** 借用时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "借用时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date borrowTime; - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Excel(name = "出库时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") - private Date lyTime; - - @Excel(name = "出库备注") - private String ckRemark; - - // @Excel(name = "审核状态") - private String status; + /** 归还时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "归还时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date returnTime; /** 是否移库过(0否 1是) */ -// @Excel(name = "是否移库过") + @Excel(name = "是否移库过", readConverterExp = "0=否,1=是") private String hasMoved; - /** 是否借料(0否 1是 2已归还) */ -// @Excel(name = "是否借料", readConverterExp = "0=否,1=是,2=已归还") + /** 是否借料(0否,1是,2已归还) */ + @Excel(name = "是否借料", readConverterExp = "0=否,1是,2已归还") private String isBorrowed; - /** 签字图片URL(image_type = sign,非表字段) */ - @TableField(exist = false) - private String signImageUrl; - - /** 现场图片URL(image_type = photo,非表字段) */ - @TableField(exist = false) - private String scenePhotoUrl; - - /** 当前审批结果(0:通过,1:驳回) */ - @TableField(exist = false) - private String auditResult; - - /** 开始时间(查询条件) */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date startTime; - - /** 结束时间(查询条件) */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date endTime; - - /** 领用开始时间(查询条件) */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - @TableField(exist = false) - private Date lyStartTime; - - /** 领用结束时间(查询条件) */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - @TableField(exist = false) - private Date lyEndTime; - - /** 一次封样号 */ - @Excel(name = "一次封样号") - private String fycde1; - - /** 二次封样号 */ - @Excel(name = "二次封样号") - private String fycde2; - /** 是否删除(0 表示正常,1 表示已删除) */ + @Excel(name = "是否删除", readConverterExp = "0=,表=示正常,1,表=示已删除") private String isDelete; - /* ======================= Getter / Setter ======================= */ + /** 供应计划ID(对应供应计划表主键) */ + @Excel(name = "供应计划ID", readConverterExp = "对=应供应计划表主键") + private Long gysJhId; - public String getKeyword() { return keyword; } - public void setKeyword(String keyword) { this.keyword = keyword; } + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private Long rdid; - public Long getId() { return id; } - public void setId(Long id) { this.id = id; } + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private Long rdidCk; - public List getIds() { return ids; } - public void setIds(List ids) { this.ids = ids; } + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private Long sid; - public Long getGysJhId() { return gysJhId; } - public void setGysJhId(Long gysJhId) { this.gysJhId = gysJhId; } + /** 是否需要配送(0否,1是,2配送中,3配送完成) */ + @Excel(name = "是否需要配送(0否,1是,2配送中,3配送完成)") + private String isDelivery; - public String getApproverId() { return approverId; } - public void setApproverId(String approverId) { this.approverId = approverId; } + /** 封样编号1 */ + @Excel(name = "封样编号1") + private String fycde1; - public Long getStockAge() { return stockAge; } - public void setStockAge(Long stockAge) { this.stockAge = stockAge; } + /** 封样编号2 */ + @Excel(name = "封样编号2") + private String fycde2; - public String getRkType() { return rkType; } - public void setRkType(String rkType) { this.rkType = rkType; } + /** 1已更新 */ + @Excel(name = "1已更新") + private Long isUpdate; - public String getWlType() { return wlType; } - public void setWlType(String wlType) { this.wlType = wlType; } - - public String getCangku() { return cangku; } - public void setCangku(String cangku) { this.cangku = cangku; } - - public List getIsChukuList() { return isChukuList; } - public void setIsChukuList(List isChukuList) { this.isChukuList = isChukuList; } - - public String getRkTypeName() { return rkTypeName; } - public void setRkTypeName(String rkTypeName) { this.rkTypeName = rkTypeName; } - - public String getWlTypeName() { return wlTypeName; } - public void setWlTypeName(String wlTypeName) { this.wlTypeName = wlTypeName; } - - public String getCangkuName() { return cangkuName; } - public void setCangkuName(String cangkuName) { this.cangkuName = cangkuName; } - - public String getParentWarehouseCode() { return parentWarehouseCode; } - public void setParentWarehouseCode(String parentWarehouseCode) { this.parentWarehouseCode = parentWarehouseCode; } - - public String getParentWarehouseName() { return parentWarehouseName; } - public void setParentWarehouseName(String parentWarehouseName) { this.parentWarehouseName = parentWarehouseName; } - - public String getWarehouseCode() { return warehouseCode; } - public void setWarehouseCode(String warehouseCode) { this.warehouseCode = warehouseCode; } - - public String getWarehouseName() { return warehouseName; } - public void setWarehouseName(String warehouseName) { this.warehouseName = warehouseName; } - - public Date getRkTime() { return rkTime; } - public void setRkTime(Date rkTime) { this.rkTime = rkTime; } - - public Date getBorrowTime() { return borrowTime; } - public void setBorrowTime(Date borrowTime) { this.borrowTime = borrowTime; } - - public Date getReturnTime() { return returnTime; } - public void setReturnTime(Date returnTime) { this.returnTime = returnTime; } - - public String getLihuoY() { return lihuoY; } - public void setLihuoY(String lihuoY) { this.lihuoY = lihuoY; } - - public String getLihuoYName() { return lihuoYName; } - public void setLihuoYName(String lihuoYName) { this.lihuoYName = lihuoYName; } - - public String getIsChuku() { return isChuku; } - public void setIsChuku(String isChuku) { this.isChuku = isChuku; } - - public String getBillNo() { return billNo; } - public void setBillNo(String billNo) { this.billNo = billNo; } - - public String getBillNoCk() { return billNoCk; } - public void setBillNoCk(String billNoCk) { this.billNoCk = billNoCk; } - - public String getIsDelivery() { return isDelivery; } - public void setIsDelivery(String isDelivery) { this.isDelivery = isDelivery; } - - public String getXj() { return xj; } - public void setXj(String xj) { this.xj = xj; } - - public String getXmNo() { return xmNo; } - public void setXmNo(String xmNo) { this.xmNo = xmNo; } - - public String getXmMs() { return xmMs; } - public void setXmMs(String xmMs) { this.xmMs = xmMs; } - - public String getXmNoCk() { return xmNoCk; } - public void setXmNoCk(String xmNoCk) { this.xmNoCk = xmNoCk; } - - public String getXmMsCk() { return xmMsCk; } - public void setXmMsCk(String xmMsCk) { this.xmMsCk = xmMsCk; } - - public String getWlNo() { return wlNo; } - public void setWlNo(String wlNo) { this.wlNo = wlNo; } - - public String getWlMs() { return wlMs; } - public void setWlMs(String wlMs) { this.wlMs = wlMs; } - - public String getGysNo() { return gysNo; } - public void setGysNo(String gysNo) { this.gysNo = gysNo; } - - public String getGysMc() { return gysMc; } - public void setGysMc(String gysMc) { this.gysMc = gysMc; } - - public BigDecimal getJhAmt() { return jhAmt; } - public void setJhAmt(BigDecimal jhAmt) { this.jhAmt = jhAmt; } - - public BigDecimal getHtDj() { return htDj; } - public void setHtDj(BigDecimal htDj) { this.htDj = htDj; } - - public String getSapNo() { return sapNo; } - public void setSapNo(String sapNo) { this.sapNo = sapNo; } - - public String getXh() { return xh; } - public void setXh(String xh) { this.xh = xh; } - - public Long getJhQty() { return jhQty; } - public void setJhQty(Long jhQty) { this.jhQty = jhQty; } - - public Long getHtQty() { return htQty; } - public void setHtQty(Long htQty) { this.htQty = htQty; } - - public String getDw() { return dw; } - public void setDw(String dw) { this.dw = dw; } - - public BigDecimal getRealQty() { return realQty; } - public void setRealQty(BigDecimal realQty) { this.realQty = realQty; } - - public String getPcode() { return pcode; } - public void setPcode(String pcode) { this.pcode = pcode; } - - public String getPcodeId() { return pcodeId; } - public void setPcodeId(String pcodeId) { this.pcodeId = pcodeId; } - - public String getTrayCode() { return trayCode; } - public void setTrayCode(String trayCode) { this.trayCode = trayCode; } - - public String getEntityId() { return entityId; } - public void setEntityId(String entityId) { this.entityId = entityId; } - - public String getPhotoUrl() { return photoUrl; } - public void setPhotoUrl(String photoUrl) { this.photoUrl = photoUrl; } - - public String getCkLihuoY() { return ckLihuoY; } - public void setCkLihuoY(String ckLihuoY) { this.ckLihuoY = ckLihuoY; } - - public String getCkType() { return ckType; } - public void setCkType(String ckType) { this.ckType = ckType; } - - public String getCkTypeName() { return ckTypeName; } - public void setCkTypeName(String ckTypeName) { this.ckTypeName = ckTypeName; } - - public String getTeamCode() { return teamCode; } - public void setTeamCode(String teamCode) { this.teamCode = teamCode; } - - public String getTeamName() { return teamName; } - public void setTeamName(String teamName) { this.teamName = teamName; } - - public Date getLyTime() { return lyTime; } - public void setLyTime(Date lyTime) { this.lyTime = lyTime; } - - public String getCkRemark() { return ckRemark; } - public void setCkRemark(String ckRemark) { this.ckRemark = ckRemark; } - - public String getRemark() { - return remark; + public void setId(Long id) + { + this.id = id; } - public void setRemark(String remark) { - this.remark = remark; + public Long getId() + { + return id; } - public String getStatus() { return status; } - public void setStatus(String status) { this.status = status; } - - public String getHasMoved() { return hasMoved; } - public void setHasMoved(String hasMoved) { this.hasMoved = hasMoved; } - - public String getIsBorrowed() { return isBorrowed; } - public void setIsBorrowed(String isBorrowed) { this.isBorrowed = isBorrowed; } - - public String getSignImageUrl() { return signImageUrl; } - public void setSignImageUrl(String signImageUrl) { this.signImageUrl = signImageUrl; } - - public String getScenePhotoUrl() { return scenePhotoUrl; } - public void setScenePhotoUrl(String scenePhotoUrl) { this.scenePhotoUrl = scenePhotoUrl; } - - public String getAuditResult() { return auditResult; } - public void setAuditResult(String auditResult) { this.auditResult = auditResult; } - - public Date getStartTime() { return startTime; } - public void setStartTime(Date startTime) { this.startTime = startTime; } - - public Date getEndTime() { return endTime; } - public void setEndTime(Date endTime) { this.endTime = endTime; } - - public Date getLyStartTime() { return lyStartTime; } - public void setLyStartTime(Date lyStartTime) { this.lyStartTime = lyStartTime; } - - public Date getLyEndTime() { return lyEndTime; } - public void setLyEndTime(Date lyEndTime) { this.lyEndTime = lyEndTime; } - - public String getFycde1() { return fycde1; } - public void setFycde1(String fycde1) { this.fycde1 = fycde1; } - - public String getFycde2() { return fycde2; } - public void setFycde2(String fycde2) { this.fycde2 = fycde2; } - - public BigDecimal getTotalAmount() { - return totalAmount; + public String getBizType() + { + return bizType; } - public void setTotalAmount(BigDecimal totalAmount) { - this.totalAmount = totalAmount; + public void setBizType(String bizType) + { + this.bizType = bizType; } - public String getIsDelete() { return isDelete; } - public void setIsDelete(String isDelete) { this.isDelete = isDelete; } + public void setOperationType(String operationType) + { + this.operationType = operationType; + } + + public String getOperationType() + { + return operationType; + } + + public String getExecStatus() { + return execStatus; + } + + public void setExecStatus(String execStatus) { + this.execStatus = execStatus; + } + + + public void setWlType(String wlType) + { + this.wlType = wlType; + } + + public String getWlType() + { + return wlType; + } + + public void setCangku(String cangku) + { + this.cangku = cangku; + } + + public String getCangku() + { + return cangku; + } + + public void setOperationTime(Date operationTime) + { + this.operationTime = operationTime; + } + + public Date getOperationTime() + { + return operationTime; + } + + public Long getStockAge() { + return stockAge; + } + + public void setStockAge(Long stockAge) { + this.stockAge = stockAge; + } + + public Integer getOperator() { + return operator; + } + + public void setOperator(Integer operator) { + this.operator = operator; + } + + public void setIsChuku(String isChuku) + { + this.isChuku = isChuku; + } + + public String getIsChuku() + { + return isChuku; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getStatus() + { + return status; + } + + public void setBillNo(String billNo) + { + this.billNo = billNo; + } + + public String getBillNo() + { + return billNo; + } + + public void setXj(String xj) + { + this.xj = xj; + } + + public String getXj() + { + return xj; + } + + public void setXmNo(String xmNo) + { + this.xmNo = xmNo; + } + + public String getXmNo() + { + return xmNo; + } + + public void setXmMs(String xmMs) + { + this.xmMs = xmMs; + } + + public String getXmMs() + { + return xmMs; + } + + public void setXmNoCk(String xmNoCk) + { + this.xmNoCk = xmNoCk; + } + + public String getXmNoCk() + { + return xmNoCk; + } + + public void setXmMsCk(String xmMsCk) + { + this.xmMsCk = xmMsCk; + } + + public String getXmMsCk() + { + return xmMsCk; + } + + public void setWlNo(String wlNo) + { + this.wlNo = wlNo; + } + + public String getWlNo() + { + return wlNo; + } + + public void setWlMs(String wlMs) + { + this.wlMs = wlMs; + } + + public String getWlMs() + { + return wlMs; + } + + public void setGysNo(String gysNo) + { + this.gysNo = gysNo; + } + + public String getGysNo() + { + return gysNo; + } + + public void setGysMc(String gysMc) + { + this.gysMc = gysMc; + } + + public String getGysMc() + { + return gysMc; + } + + public void setJhAmt(BigDecimal jhAmt) + { + this.jhAmt = jhAmt; + } + + public BigDecimal getJhAmt() + { + return jhAmt; + } + + public void setHtDj(BigDecimal htDj) + { + this.htDj = htDj; + } + + public BigDecimal getHtDj() + { + return htDj; + } + + public void setSapNo(String sapNo) + { + this.sapNo = sapNo; + } + + public String getSapNo() + { + return sapNo; + } + + public void setXh(String xh) + { + this.xh = xh; + } + + public String getXh() + { + return xh; + } + + public void setJhQty(BigDecimal jhQty) + { + this.jhQty = jhQty; + } + + public BigDecimal getJhQty() + { + return jhQty; + } + + public void setHtQty(BigDecimal htQty) + { + this.htQty = htQty; + } + + public BigDecimal getHtQty() + { + return htQty; + } + + public void setDw(String dw) + { + this.dw = dw; + } + + public String getDw() + { + return dw; + } + + public void setRealQty(BigDecimal realQty) + { + this.realQty = realQty; + } + + public BigDecimal getRealQty() + { + return realQty; + } + + public void setPcode(String pcode) + { + this.pcode = pcode; + } + + public String getPcode() + { + return pcode; + } + + public void setPcodeId(String pcodeId) + { + this.pcodeId = pcodeId; + } + + public String getPcodeId() + { + return pcodeId; + } + + public void setTrayCode(String trayCode) + { + this.trayCode = trayCode; + } + + public String getTrayCode() + { + return trayCode; + } + + public void setEntityId(String entityId) + { + this.entityId = entityId; + } + + public String getEntityId() + { + return entityId; + } + + public void setTeamCode(String teamCode) + { + this.teamCode = teamCode; + } + + public String getTeamCode() + { + return teamCode; + } + + public void setBorrowTime(Date borrowTime) + { + this.borrowTime = borrowTime; + } + + public Date getBorrowTime() + { + return borrowTime; + } + + public void setReturnTime(Date returnTime) + { + this.returnTime = returnTime; + } + + public Date getReturnTime() + { + return returnTime; + } + + public void setHasMoved(String hasMoved) + { + this.hasMoved = hasMoved; + } + + public String getHasMoved() + { + return hasMoved; + } + + public void setIsBorrowed(String isBorrowed) + { + this.isBorrowed = isBorrowed; + } + + public String getIsBorrowed() + { + return isBorrowed; + } + + public void setIsDelete(String isDelete) + { + this.isDelete = isDelete; + } + + public String getIsDelete() + { + return isDelete; + } + + public void setGysJhId(Long gysJhId) + { + this.gysJhId = gysJhId; + } + + public Long getGysJhId() + { + return gysJhId; + } + + public void setRdid(Long rdid) + { + this.rdid = rdid; + } + + public Long getRdid() + { + return rdid; + } + + public void setRdidCk(Long rdidCk) + { + this.rdidCk = rdidCk; + } + + public Long getRdidCk() + { + return rdidCk; + } + + public void setSid(Long sid) + { + this.sid = sid; + } + + public Long getSid() + { + return sid; + } + + public void setIsDelivery(String isDelivery) + { + this.isDelivery = isDelivery; + } + + public String getIsDelivery() + { + return isDelivery; + } + + public void setFycde1(String fycde1) + { + this.fycde1 = fycde1; + } + + public String getFycde1() + { + return fycde1; + } + + public void setFycde2(String fycde2) + { + this.fycde2 = fycde2; + } + + public String getFycde2() + { + return fycde2; + } + + public void setIsUpdate(Long isUpdate) + { + this.isUpdate = isUpdate; + } + + public Long getIsUpdate() + { + return isUpdate; + } @Override public String toString() { - return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) - .append("gysJhId", getGysJhId()) - .append("approverId", getApproverId()) - .append("rkType", getRkType()) - .append("wlType", getWlType()) - .append("cangku", getCangku()) - .append("cangkuName", getCangkuName()) - .append("parentWarehouseCode", getParentWarehouseCode()) - .append("parentWarehouseName", getParentWarehouseName()) - .append("warehouseCode", getWarehouseCode()) - .append("warehouseName", getWarehouseName()) - .append("rkTime", getRkTime()) - .append("borrowTime", getBorrowTime()) - .append("returnTime", getReturnTime()) - .append("lihuoY", getLihuoY()) - .append("isChuku", getIsChuku()) - .append("billNo", getBillNo()) - .append("billNoCk", getBillNoCk()) - .append("isDelivery", getIsDelivery()) - .append("remark", getRemark()) - .append("xj", getXj()) - .append("xmNo", getXmNo()) - .append("xmMs", getXmMs()) - .append("wlNo", getWlNo()) - .append("wlMs", getWlMs()) - .append("gysNo", getGysNo()) - .append("gysMc", getGysMc()) - .append("jhAmt", getJhAmt()) - .append("htDj", getHtDj()) - .append("sapNo", getSapNo()) - .append("xh", getXh()) - .append("jhQty", getJhQty()) - .append("htQty", getHtQty()) - .append("dw", getDw()) - .append("realQty", getRealQty()) - .append("pcode", getPcode()) - .append("pcodeId", getPcodeId()) - .append("trayCode", getTrayCode()) - .append("entityId", getEntityId()) - .append("photoUrl", getPhotoUrl()) - .append("createBy", getCreateBy()) - .append("createTime", getCreateTime()) - .append("updateBy", getUpdateBy()) - .append("updateTime", getUpdateTime()) - .append("ckLihuoY", getCkLihuoY()) - .append("ckType", getCkType()) - .append("ckTypeName", getCkTypeName()) - .append("teamCode", getTeamCode()) - .append("teamName", getTeamName()) - .append("lyTime", getLyTime()) - .append("ckRemark", getCkRemark()) - .append("status", getStatus()) - .append("hasMoved", getHasMoved()) - .append("xmNoCk", getXmNoCk()) - .append("xmMsCk", getXmMsCk()) - .append("startTime", getStartTime()) - .append("endTime", getEndTime()) - .append("isBorrowed", getIsBorrowed()) - .append("signImageUrl", getSignImageUrl()) - .append("scenePhotoUrl", getScenePhotoUrl()) - .append("auditResult", getAuditResult()) - .append("isChukuList", getIsChukuList()) - .append("lyStartTime", getLyStartTime()) - .append("lyEndTime", getLyEndTime()) - .append("fycde1", getFycde1()) - .append("fycde2", getFycde2()) - .append("isDelete", getIsDelete()) - .toString(); + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("bizType", getBizType()) + .append("operationType", getOperationType()) + .append("execStatus", getExecStatus()) + .append("wlType", getWlType()) + .append("cangku", getCangku()) + .append("operationTime", getOperationTime()) + .append("stockAge", getStockAge()) + .append("operator", operator) + .append("isChuku", getIsChuku()) + .append("status", getStatus()) + .append("remark", getRemark()) + .append("billNo", getBillNo()) + .append("xj", getXj()) + .append("xmNo", getXmNo()) + .append("xmMs", getXmMs()) + .append("xmNoCk", getXmNoCk()) + .append("xmMsCk", getXmMsCk()) + .append("wlNo", getWlNo()) + .append("wlMs", getWlMs()) + .append("gysNo", getGysNo()) + .append("gysMc", getGysMc()) + .append("jhAmt", getJhAmt()) + .append("htDj", getHtDj()) + .append("sapNo", getSapNo()) + .append("xh", getXh()) + .append("jhQty", getJhQty()) + .append("htQty", getHtQty()) + .append("dw", getDw()) + .append("realQty", getRealQty()) + .append("pcode", getPcode()) + .append("pcodeId", getPcodeId()) + .append("trayCode", getTrayCode()) + .append("entityId", getEntityId()) + .append("teamCode", getTeamCode()) + .append("borrowTime", getBorrowTime()) + .append("returnTime", getReturnTime()) + .append("hasMoved", getHasMoved()) + .append("isBorrowed", getIsBorrowed()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("isDelete", getIsDelete()) + .append("gysJhId", getGysJhId()) + .append("rdid", getRdid()) + .append("rdidCk", getRdidCk()) + .append("sid", getSid()) + .append("isDelivery", getIsDelivery()) + .append("fycde1", getFycde1()) + .append("fycde2", getFycde2()) + .append("isUpdate", getIsUpdate()) + .toString(); } } diff --git a/src/main/java/com/zg/project/wisdom/domain/RkRecord.java b/src/main/java/com/zg/project/wisdom/domain/RkRecord.java new file mode 100644 index 0000000..c6a5fb4 --- /dev/null +++ b/src/main/java/com/zg/project/wisdom/domain/RkRecord.java @@ -0,0 +1,837 @@ +package com.zg.project.wisdom.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.zg.framework.aspectj.lang.annotation.Excel; +import com.zg.framework.web.domain.BaseEntity; + +/** + * 出入库记录对象 rk_record + * + * @author zg + * @date 2026-01-20 + */ +public class RkRecord extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键ID */ + private Long id; + + /** 业务类型 */ + @Excel(name = "业务类型") + private String bizType; + + /** 出入库类型 */ +// @Excel(name = "出入库类型") + private String operationType; + + /** 出入库类型名称(联表) */ + @Excel(name = "出入库类型名称") + private String operationTypeName; + + + /** 执行状态(0预入/预出,1已完成) */ + @Excel(name = "执行状态", readConverterExp = "0=预入/预出,1=已完成") + private String execStatus; + + /** 物资类型 */ +// @Excel(name = "物资类型") + private String wlType; + + /** 物资类型名称(联表) */ + @Excel(name = "物资类型名称") + private String wlTypeName; + + /** 所属仓库 */ +// @Excel(name = "所属仓库") + private String cangku; + + /** 小仓名称 */ + @Excel(name = "所属仓库") + private String warehouseName; + + /** 大仓编码 */ + private String parentWarehouseCode; + + /** 大仓名称 */ + @Excel(name = "大仓名称") + private String parentWarehouseName; + + /** 出入库时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @Excel(name = "出入库时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date operationTime; + + /** 出入库理货员 */ +// @Excel(name = "出入库理货员") + private Integer operator; + + /** 出入库理货员 */ + @Excel(name = "出入库理货员") + private String operatorName; + + /** 是否已出库(0已入库,1已出库) */ + @Excel(name = "是否已出库", readConverterExp = "0=已入库,1已出库") + private String isChuku; + + /** 0:入库待审核,1已通过,2已驳回,3出库待审核 */ +// @Excel(name = "") + private String status; + + /** 库龄(天) */ + @Excel(name = "库龄(天)") + private Long stockAge; + + /** 单据号 */ + @Excel(name = "单据号") + private String billNo; + + /** 县局 */ + @Excel(name = "县局") + private String xj; + + /** 项目号 */ + @Excel(name = "项目号") + private String xmNo; + + /** 项目描述 */ + @Excel(name = "项目描述") + private String xmMs; + + /** 出库项目号(借用方项目) */ + @Excel(name = "出库项目号", readConverterExp = "借=用方项目") + private String xmNoCk; + + /** 出库项目描述(借用方项目描述) */ + @Excel(name = "出库项目描述", readConverterExp = "借=用方项目描述") + private String xmMsCk; + + /** 物料号 */ + @Excel(name = "物料号") + private String wlNo; + + /** 物料描述 */ + @Excel(name = "物料描述") + private String wlMs; + + /** 供应商编码 */ + @Excel(name = "供应商编码") + private String gysNo; + + /** 供应商名称 */ + @Excel(name = "供应商名称") + private String gysMc; + + /** 计划交货金额 */ + @Excel(name = "计划交货金额") + private BigDecimal jhAmt; + + /** 合同单价 */ + @Excel(name = "合同单价") + private BigDecimal htDj; + + /** SAP订单编号 */ + @Excel(name = "SAP订单编号") + private String sapNo; + + /** 行号 */ + @Excel(name = "行号") + private String xh; + + /** 计划交货数量 */ + @Excel(name = "计划交货数量") + private BigDecimal jhQty; + + /** 合同数量 */ + @Excel(name = "合同数量") + private BigDecimal htQty; + + /** 计量单位 */ + @Excel(name = "计量单位") + private String dw; + + /** 实际入库数量 */ + @Excel(name = "实际入库数量") + private BigDecimal realQty; + + /** 库位码 */ + @Excel(name = "库位码") + private String pcode; + + /** 库位16进制编码 */ + @Excel(name = "库位16进制编码") + private String pcodeId; + + /** 托盘码 */ + @Excel(name = "托盘码") + private String trayCode; + + /** 实物ID */ + @Excel(name = "实物ID") + private String entityId; + + /** 施工队 */ + @Excel(name = "施工队") + private String teamCode; + + /** 借用时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") +// @Excel(name = "借用时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date borrowTime; + + /** 归还时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") +// @Excel(name = "归还时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date returnTime; + + /** 是否移库过(0否 1是) */ +// @Excel(name = "是否移库过", readConverterExp = "0=否,1=是") + private String hasMoved; + + /** 是否借料(0否,1是,2已归还) */ +// @Excel(name = "是否借料", readConverterExp = "0=否,1是,2已归还") + private String isBorrowed; + + /** 是否删除(0 表示正常,1 表示已删除) */ +// @Excel(name = "是否删除", readConverterExp = "0=,表=示正常,1,表=示已删除") + private String isDelete; + + /** 供应计划ID(对应供应计划表主键) */ +// @Excel(name = "供应计划ID", readConverterExp = "对=应供应计划表主键") + private Long gysJhId; + + /** $column.columnComment */ +// @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private Long rdid; + + /** $column.columnComment */ +// @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private Long rdidCk; + + /** $column.columnComment */ +// @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private Long sid; + + /** 是否需要配送(0否,1是,2配送中,3配送完成) */ +// @Excel(name = "是否需要配送(0否,1是,2配送中,3配送完成)") + private String isDelivery; + + /** 封样编号1 */ +// @Excel(name = "封样编号1") + private String fycde1; + + /** 封样编号2 */ +// @Excel(name = "封样编号2") + private String fycde2; + + /** 1已更新 */ +// @Excel(name = "1已更新") + private Long isUpdate; + + /** 入库 / 出库开始时间(查询用) */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date startDate; + + /** 入库 / 出库结束时间(查询用) */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date endDate; + + /** 对应 rk_info 主键ID */ + private Long rkInfoId; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + + public void setBizType(String bizType) { + this.bizType = bizType; + } + + public String getBizType() { + return bizType; + } + + public void setOperationType(String operationType) + { + this.operationType = operationType; + } + + public String getOperationType() + { + return operationType; + } + + public String getOperationTypeName() { + return operationTypeName; + } + + public void setOperationTypeName(String operationTypeName) { + this.operationTypeName = operationTypeName; + } + + public String getExecStatus() { + return execStatus; + } + + public void setExecStatus(String execStatus) { + this.execStatus = execStatus; + } + public Long getStockAge() { + return stockAge; + } + + public void setStockAge(Long stockAge) { + this.stockAge = stockAge; + } + + public void setWlType(String wlType) + { + this.wlType = wlType; + } + + public String getWlType() + { + return wlType; + } + + public String getWlTypeName() { + return wlTypeName; + } + + public void setWlTypeName(String wlTypeName) { + this.wlTypeName = wlTypeName; + } + + public void setCangku(String cangku) + { + this.cangku = cangku; + } + + public String getCangku() + { + return cangku; + } + + public String getWarehouseName() { + return warehouseName; + } + + public void setWarehouseName(String warehouseName) { + this.warehouseName = warehouseName; + } + + public String getParentWarehouseCode() { + return parentWarehouseCode; + } + + public void setParentWarehouseCode(String parentWarehouseCode) { + this.parentWarehouseCode = parentWarehouseCode; + } + + public String getParentWarehouseName() { + return parentWarehouseName; + } + + public void setParentWarehouseName(String parentWarehouseName) { + this.parentWarehouseName = parentWarehouseName; + } + + public void setOperationTime(Date operationTime) + { + this.operationTime = operationTime; + } + + public Date getOperationTime() + { + return operationTime; + } + + public Integer getOperator() { + return operator; + } + + public void setOperator(Integer operator) { + this.operator = operator; + } + + public String getOperatorName() { + return operatorName; + } + + public void setOperatorName(String operatorName) { + this.operatorName = operatorName; + } + + public void setIsChuku(String isChuku) + { + this.isChuku = isChuku; + } + + public String getIsChuku() + { + return isChuku; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getStatus() + { + return status; + } + + public void setBillNo(String billNo) + { + this.billNo = billNo; + } + + public String getBillNo() + { + return billNo; + } + + public void setXj(String xj) + { + this.xj = xj; + } + + public String getXj() + { + return xj; + } + + public void setXmNo(String xmNo) + { + this.xmNo = xmNo; + } + + public String getXmNo() + { + return xmNo; + } + + public void setXmMs(String xmMs) + { + this.xmMs = xmMs; + } + + public String getXmMs() + { + return xmMs; + } + + public void setXmNoCk(String xmNoCk) + { + this.xmNoCk = xmNoCk; + } + + public String getXmNoCk() + { + return xmNoCk; + } + + public void setXmMsCk(String xmMsCk) + { + this.xmMsCk = xmMsCk; + } + + public String getXmMsCk() + { + return xmMsCk; + } + + public void setWlNo(String wlNo) + { + this.wlNo = wlNo; + } + + public String getWlNo() + { + return wlNo; + } + + public void setWlMs(String wlMs) + { + this.wlMs = wlMs; + } + + public String getWlMs() + { + return wlMs; + } + + public void setGysNo(String gysNo) + { + this.gysNo = gysNo; + } + + public String getGysNo() + { + return gysNo; + } + + public void setGysMc(String gysMc) + { + this.gysMc = gysMc; + } + + public String getGysMc() + { + return gysMc; + } + + public void setJhAmt(BigDecimal jhAmt) + { + this.jhAmt = jhAmt; + } + + public BigDecimal getJhAmt() + { + return jhAmt; + } + + public void setHtDj(BigDecimal htDj) + { + this.htDj = htDj; + } + + public BigDecimal getHtDj() + { + return htDj; + } + + public void setSapNo(String sapNo) + { + this.sapNo = sapNo; + } + + public String getSapNo() + { + return sapNo; + } + + public void setXh(String xh) + { + this.xh = xh; + } + + public String getXh() + { + return xh; + } + + public void setJhQty(BigDecimal jhQty) + { + this.jhQty = jhQty; + } + + public BigDecimal getJhQty() + { + return jhQty; + } + + public void setHtQty(BigDecimal htQty) + { + this.htQty = htQty; + } + + public BigDecimal getHtQty() + { + return htQty; + } + + public void setDw(String dw) + { + this.dw = dw; + } + + public String getDw() + { + return dw; + } + + public void setRealQty(BigDecimal realQty) + { + this.realQty = realQty; + } + + public BigDecimal getRealQty() + { + return realQty; + } + + public void setPcode(String pcode) + { + this.pcode = pcode; + } + + public String getPcode() + { + return pcode; + } + + public void setPcodeId(String pcodeId) + { + this.pcodeId = pcodeId; + } + + public String getPcodeId() + { + return pcodeId; + } + + public void setTrayCode(String trayCode) + { + this.trayCode = trayCode; + } + + public String getTrayCode() + { + return trayCode; + } + + public void setEntityId(String entityId) + { + this.entityId = entityId; + } + + public String getEntityId() + { + return entityId; + } + + public void setTeamCode(String teamCode) + { + this.teamCode = teamCode; + } + + public String getTeamCode() + { + return teamCode; + } + + public void setBorrowTime(Date borrowTime) + { + this.borrowTime = borrowTime; + } + + public Date getBorrowTime() + { + return borrowTime; + } + + public void setReturnTime(Date returnTime) + { + this.returnTime = returnTime; + } + + public Date getReturnTime() + { + return returnTime; + } + + public void setHasMoved(String hasMoved) + { + this.hasMoved = hasMoved; + } + + public String getHasMoved() + { + return hasMoved; + } + + public void setIsBorrowed(String isBorrowed) + { + this.isBorrowed = isBorrowed; + } + + public String getIsBorrowed() + { + return isBorrowed; + } + + public void setIsDelete(String isDelete) + { + this.isDelete = isDelete; + } + + public String getIsDelete() + { + return isDelete; + } + + public void setGysJhId(Long gysJhId) + { + this.gysJhId = gysJhId; + } + + public Long getGysJhId() + { + return gysJhId; + } + + public void setRdid(Long rdid) + { + this.rdid = rdid; + } + + public Long getRdid() + { + return rdid; + } + + public void setRdidCk(Long rdidCk) + { + this.rdidCk = rdidCk; + } + + public Long getRdidCk() + { + return rdidCk; + } + + public void setSid(Long sid) + { + this.sid = sid; + } + + public Long getSid() + { + return sid; + } + + public void setIsDelivery(String isDelivery) + { + this.isDelivery = isDelivery; + } + + public String getIsDelivery() + { + return isDelivery; + } + + public void setFycde1(String fycde1) + { + this.fycde1 = fycde1; + } + + public String getFycde1() + { + return fycde1; + } + + public void setFycde2(String fycde2) + { + this.fycde2 = fycde2; + } + + public String getFycde2() + { + return fycde2; + } + + public void setIsUpdate(Long isUpdate) + { + this.isUpdate = isUpdate; + } + + public Long getIsUpdate() + { + return isUpdate; + } + + public Date getStartDate() { + return startDate; + } + + public void setStartDate(Date startDate) { + this.startDate = startDate; + } + + public Long getRkInfoId() { + return rkInfoId; + } + + public void setRkInfoId(Long rkInfoId) { + this.rkInfoId = rkInfoId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("bizType", getBizType()) + .append("operationType", getOperationType()) + .append("operationTypeName", operationTypeName) + .append("execStatus", getExecStatus()) + .append("stockAge", getStockAge()) + .append("wlType", getWlType()) + .append("wlTypeName", wlTypeName) + .append("cangku", getCangku()) + .append("warehouseName", getWarehouseName()) + .append("parentWarehouseCode", getParentWarehouseCode()) + .append("parentWarehouseName", getParentWarehouseName()) + .append("operationTime", getOperationTime()) + .append("operator", getOperator()) + .append("operatorName", operatorName) + .append("isChuku", getIsChuku()) + .append("status", getStatus()) + .append("remark", getRemark()) + .append("billNo", getBillNo()) + .append("xj", getXj()) + .append("xmNo", getXmNo()) + .append("xmMs", getXmMs()) + .append("xmNoCk", getXmNoCk()) + .append("xmMsCk", getXmMsCk()) + .append("wlNo", getWlNo()) + .append("wlMs", getWlMs()) + .append("gysNo", getGysNo()) + .append("gysMc", getGysMc()) + .append("jhAmt", getJhAmt()) + .append("htDj", getHtDj()) + .append("sapNo", getSapNo()) + .append("xh", getXh()) + .append("jhQty", getJhQty()) + .append("htQty", getHtQty()) + .append("dw", getDw()) + .append("realQty", getRealQty()) + .append("pcode", getPcode()) + .append("pcodeId", getPcodeId()) + .append("trayCode", getTrayCode()) + .append("entityId", getEntityId()) + .append("teamCode", getTeamCode()) + .append("borrowTime", getBorrowTime()) + .append("returnTime", getReturnTime()) + .append("hasMoved", getHasMoved()) + .append("isBorrowed", getIsBorrowed()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("isDelete", getIsDelete()) + .append("gysJhId", getGysJhId()) + .append("rdid", getRdid()) + .append("rdidCk", getRdidCk()) + .append("sid", getSid()) + .append("isDelivery", getIsDelivery()) + .append("fycde1", getFycde1()) + .append("fycde2", getFycde2()) + .append("isUpdate", getIsUpdate()) + .append("startDate", startDate) + .append("endDate", endDate) + .append("rkInfoId", getRkInfoId()) + .toString(); + } +} diff --git a/src/main/java/com/zg/project/wisdom/domain/dto/RkBillCreateDTO.java b/src/main/java/com/zg/project/wisdom/domain/dto/RkBillCreateDTO.java new file mode 100644 index 0000000..a7e31f4 --- /dev/null +++ b/src/main/java/com/zg/project/wisdom/domain/dto/RkBillCreateDTO.java @@ -0,0 +1,17 @@ +package com.zg.project.wisdom.domain.dto; + +import com.zg.project.wisdom.domain.RkBill; +import com.zg.project.wisdom.domain.RkInfo; +import lombok.Data; + +import java.util.List; + +@Data +public class RkBillCreateDTO { + + /** 单据主信息 */ + private RkBill rkBill; + + /** 入库明细列表 */ + private List rkInfoList; +} \ No newline at end of file diff --git a/src/main/java/com/zg/project/wisdom/mapper/RkBillMapper.java b/src/main/java/com/zg/project/wisdom/mapper/RkBillMapper.java index 30925eb..4050eb2 100644 --- a/src/main/java/com/zg/project/wisdom/mapper/RkBillMapper.java +++ b/src/main/java/com/zg/project/wisdom/mapper/RkBillMapper.java @@ -1,34 +1,68 @@ package com.zg.project.wisdom.mapper; -import com.zg.project.wisdom.domain.RkBill; -import com.zg.project.wisdom.domain.dto.StockOutItemDTO; -import org.apache.ibatis.annotations.Param; - -import java.util.ArrayList; import java.util.List; +import com.zg.project.wisdom.domain.RkBill; -public interface RkBillMapper { +/** + * 库存单据Mapper接口 + * + * @author zg + * @date 2026-01-20 + */ +public interface RkBillMapper +{ + /** + * 查询库存单据 + * + * @param id 库存单据主键 + * @return 库存单据 + */ + public RkBill selectRkBillById(Long id); /** - * 新增入库单据主表 + * 查询库存单据列表 + * + * @param rkBill 库存单据 + * @return 库存单据集合 */ - int insertRkBill(RkBill bill); + public List selectRkBillList(RkBill rkBill); /** - * 查询入库单据主表列表(可选) + * 新增库存单据 + * + * @param rkBill 库存单据 + * @return 结果 */ - List selectRkBillList(RkBill bill); + public int insertRkBill(RkBill rkBill); /** - * 根据单据号查询 + * 修改库存单据 + * + * @param rkBill 库存单据 + * @return 结果 */ - RkBill selectRkBillByBillNo(String billNo); + public int updateRkBill(RkBill rkBill); - RkBill selectRkBillById(Long id); - - int updateRkBill(RkBill rkBill); - - int logicDeleteRkBillByIds(@Param("ids") Long[] ids); + /** + * 删除库存单据 + * + * @param id 库存单据主键 + * @return 结果 + */ + public int deleteRkBillById(Long id); + /** + * 批量删除库存单据 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteRkBillByIds(Long[] ids); + /** + * 根据单据编号查询 + * @param billNo + * @return + */ + RkBill selectByBillNo(String billNo); } diff --git a/src/main/java/com/zg/project/wisdom/mapper/RkInfoMapper.java b/src/main/java/com/zg/project/wisdom/mapper/RkInfoMapper.java index fa1c915..b05a2f3 100644 --- a/src/main/java/com/zg/project/wisdom/mapper/RkInfoMapper.java +++ b/src/main/java/com/zg/project/wisdom/mapper/RkInfoMapper.java @@ -1,272 +1,61 @@ package com.zg.project.wisdom.mapper; import java.util.List; -import java.util.Map; - -import com.zg.project.inventory.domain.vo.PcdeCntVO; -import com.zg.project.inventory.domain.vo.RkInfoMatchVO; import com.zg.project.wisdom.domain.RkInfo; -import com.zg.project.wisdom.domain.dto.RkInfoQueryDTO; -import org.apache.ibatis.annotations.Param; /** - * 库存单据主Mapper接口 + * 库存单据明细Mapper接口 * * @author zg - * @date 2025-05-28 + * @date 2026-01-20 */ public interface RkInfoMapper { /** - * 查询库存单据主 + * 查询库存单据明细 * - * @param id 库存单据主主键 - * @return 库存单据主 + * @param id 库存单据明细主键 + * @return 库存单据明细 */ public RkInfo selectRkInfoById(Long id); /** - * 查询库存单据主列表 + * 查询库存单据明细列表 * - * @param rkInfo 库存单据主 - * @return 库存单据主集合 + * @param rkInfo 库存单据明细 + * @return 库存单据明细集合 */ public List selectRkInfoList(RkInfo rkInfo); /** - * 使用 selectRkInfoVo 作为子查询,外层按 bill_no 分组聚合 + * 新增库存单据明细 + * + * @param rkInfo 库存单据明细 + * @return 结果 */ - List selectGroupedByBill(@Param("q") RkInfoQueryDTO query, - @Param("needAudit") Integer needAudit); - - - List selectBillHeaderList(@Param("q") RkInfoQueryDTO query, - @Param("needAudit") Integer needAudit); + public int insertRkInfo(RkInfo rkInfo); /** - * 修改库存单据主 + * 修改库存单据明细 * - * @param rkInfo 库存单据主 + * @param rkInfo 库存单据明细 * @return 结果 */ public int updateRkInfo(RkInfo rkInfo); /** - * 根据出库单据号更新库存单据 - * - * @param rkInfo 库存单据 - * @return 影响行数 - */ - int updateByBillNoCk(RkInfo rkInfo); - - /** - * 删除库存单据主 + * 删除库存单据明细 * - * @param id 库存单据主主键 + * @param id 库存单据明细主键 * @return 结果 */ public int deleteRkInfoById(Long id); /** - * 批量删除库存单据主 + * 批量删除库存单据明细 * * @param ids 需要删除的数据主键集合 * @return 结果 */ public int deleteRkInfoByIds(Long[] ids); - - /** - * 新增入库单据 - * @param saveList - * @return - */ - int batchInsertRkInfo(List saveList); - - /** - * 根据库位编码查询入库单据 - * @param locationCode - * @return - */ - int countRkInfoByLocationCode(@Param("locationCode") String locationCode); - - /** - * 查询已使用库位 - * @return - */ - List selectUsedPcodes(); - - /** - * 根据单据编号查询SAP单号 - * @param billNo - * @return - */ - List selectSapNoByBillNo(String billNo); - - - - /** - * 统计超期库存 - * @return - */ - int countOverdueStock(); - - /** - * 获取最新20条逾期库存列表 - * @param - * @return - */ - List selectTopOverdueStock(@Param("limit") int limit); - - /** - * - * @param update - */ - void updateById(RkInfo update); - - /** - * 根据出库单据号查询订单编号 - * @param billNo - * @return - */ - List selectSapNoByCkBillNo(String billNo); - - /** - * 撤销出库 - * @param billNoCk - */ - int cancelStockOut(String billNoCk); - - /** - * 查看盘点扫描正常数据(限定场景) - */ - List getByPcodeIdList(@Param("list") List pcdeIds, - @Param("sceneId") String sceneId); - - /** - * 查看盘点扫描未正常数据(限定场景) - */ - List getMissedPcodeIds(@Param("list") List pcdeIds, - @Param("sceneId") String sceneId); - - /** - * 判断盘点扫描的id在场景内是否存在 - */ - int existsByPcodeId(@Param("pcodeId") String pcodeId, - @Param("sceneId") String sceneId); - - /** - * 获取指定仓库的盘点数据 - * @param warehouse - * @return - */ - int countGetByWh(@Param("warehouse") String warehouse); - - /** - * 根据所属仓库查询所有的库位号和库位对应的货物数量 - * @param - * @return - */ - List getUnscannedPcodeByScene(@Param("sceneId") String sceneId, - @Param("taskId") String taskId); - - /** - * 图表统计:每个库位有多少个货物 - * @param ids - * @return - */ - List selectPcdeCntFromRkInfo(List ids); - - /** - * 还料入库 - * @param newEntry - * @return - */ - int insertRkInfo(RkInfo newEntry); - - /** - * 修改入库单据状态 - */ - int updateStatusByBillNo(RkInfo rkInfo); - - /** - * 查询每个 billNo 对应的一条入库记录(用于获取公共字段) - */ - List selectOneForEachBillNo(@Param("billNos") List billNos); - - /** - * 根据入库单据编号查询入库单据 - */ - List selectRkInfoListByBillNo(String billNo); - - /** - * 根据出库单据编号查询入库单据 - */ - List selectRkInfoListByBillNoCk(String billNo); - - /** - * 删除入库单据 - */ - void markDeleteByBillNo(RkInfo rk); - - /** - * 删除出库单据 - */ - void markDeleteByBillNoCk(RkInfo rk); - - /** - * 删除入库单据 - */ - void deleteByBillNo(String billNo); - - /** - * 出库驳回时恢复单据表数据状态 - */ - void revertRkInfoStatusByBillNoCk(RkInfo revert); - - /** - * 根据id查询入库单据 - * @param ids - * @return - */ - List selectRkInfoByIds(@Param("ids") Long[] ids); - - List listRkInfoByPcode(String pcode); - - /** - * 查询 rk_info 全量明细(仅未删除) - */ - List selectAllRkInfo(RkInfo query); - - /** - * 出入库明细分页查询(统计页面) - */ - List selectRkInfoPageList(RkInfo query); - - int updateBillInfo(RkInfo query); - - /** - * 修改出库单据状态 - */ - - - int updateDeliveryStatus(@Param("ids") List ids, - @Param("isDelivery") Integer isDelivery); - - /** - * 查询出库单据 - */ - List selectDeliveryCkList(RkInfo query); - - - /** - * 借料 / 还料专用列表查询 - */ - List selectBorrowAndReturnList(RkInfo rkInfo); - - RkInfo selectHeaderByBillNo(String billNo); - - String selectMaxBillNo(@Param("prefix") String prefix); - - - Map selectStockStatistics(RkInfoQueryDTO query); } diff --git a/src/main/java/com/zg/project/wisdom/mapper/RkRecordMapper.java b/src/main/java/com/zg/project/wisdom/mapper/RkRecordMapper.java new file mode 100644 index 0000000..8ef5238 --- /dev/null +++ b/src/main/java/com/zg/project/wisdom/mapper/RkRecordMapper.java @@ -0,0 +1,69 @@ +package com.zg.project.wisdom.mapper; + +import java.util.List; +import com.zg.project.wisdom.domain.RkRecord; + +/** + * 出入库记录Mapper接口 + * + * @author zg + * @date 2026-01-20 + */ +public interface RkRecordMapper +{ + /** + * 查询出入库记录 + * + * @param id 出入库记录主键 + * @return 出入库记录 + */ + public RkRecord selectRkRecordById(Long id); + + /** + * 根据单据号查询出入库记录明细 + * + * @param billNo 单据号 + * @return 出入库记录明细列表 + */ + List selectRkRecordListByBillNo(String billNo); + + /** + * 查询出入库记录列表 + * + * @param rkRecord 出入库记录 + * @return 出入库记录集合 + */ + public List selectRkRecordList(RkRecord rkRecord); + + /** + * 新增出入库记录 + * + * @param rkRecord 出入库记录 + * @return 结果 + */ + public int insertRkRecord(RkRecord rkRecord); + + /** + * 修改出入库记录 + * + * @param rkRecord 出入库记录 + * @return 结果 + */ + public int updateRkRecord(RkRecord rkRecord); + + /** + * 删除出入库记录 + * + * @param id 出入库记录主键 + * @return 结果 + */ + public int deleteRkRecordById(Long id); + + /** + * 批量删除出入库记录 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteRkRecordByIds(Long[] ids); +} diff --git a/src/main/java/com/zg/project/wisdom/service/IAuditSignatureService.java b/src/main/java/com/zg/project/wisdom/service/IAuditSignatureService.java index 8ffde3f..4b4f3c9 100644 --- a/src/main/java/com/zg/project/wisdom/service/IAuditSignatureService.java +++ b/src/main/java/com/zg/project/wisdom/service/IAuditSignatureService.java @@ -1,91 +1,91 @@ -package com.zg.project.wisdom.service; - -import java.util.List; -import com.zg.project.wisdom.domain.AuditSignature; -import com.zg.project.wisdom.domain.vo.AuditSignatureReviewVO; - -/** - * 审批记录Service接口 - * - * @author zg - * @date 2025-07-11 - */ -public interface IAuditSignatureService -{ - /** - * 查询审批记录 - * - * @param id 审批记录主键 - * @return 审批记录 - */ - public AuditSignature selectAuditSignatureById(Long id); - - /** - * 查询审批记录列表 - * - * @param auditSignature 审批记录 - * @return 审批记录集合 - */ - public List selectAuditSignatureList(AuditSignature auditSignature); - - - /** - * 修改审批记录 - * - * @param auditSignature 审批记录 - * @return 结果 - */ - public int updateAuditSignature(AuditSignature auditSignature); - - /** - * 批量删除审批记录 - * - * @param ids 需要删除的审批记录主键集合 - * @return 结果 - */ - public int deleteAuditSignatureByIds(Long[] ids); - - /** - * 删除审批记录信息 - * - * @param id 审批记录主键 - * @return 结果 - */ - public int deleteAuditSignatureById(Long id); - - /** - * 查询待审核的申请 - * @param approverId - * @return - */ - int countPendingByUser(String approverId); - - /** - * 审批申请 - * @param audit - */ - void audit(AuditSignature audit); - - /** - * 查询审批记录列表 - * - * @param auditSignature 审批记录 - * @return 审批记录集合 - */ - List selectAuditSignatureReviewList(AuditSignature auditSignature); - - /** - * 查询我提交的审批列表 - * - * @param auditSignature 审批记录 - * @return 审批记录集合 - */ - List selectMySubmittedAuditList(AuditSignature auditSignature); - - /** - * 审批 - * @param auditSignature - * @return - */ - int approveAuditSignature(AuditSignature auditSignature); -} +//package com.zg.project.wisdom.service; +// +//import java.util.List; +//import com.zg.project.wisdom.domain.AuditSignature; +//import com.zg.project.wisdom.domain.vo.AuditSignatureReviewVO; +// +///** +// * 审批记录Service接口 +// * +// * @author zg +// * @date 2025-07-11 +// */ +//public interface IAuditSignatureService +//{ +// /** +// * 查询审批记录 +// * +// * @param id 审批记录主键 +// * @return 审批记录 +// */ +// public AuditSignature selectAuditSignatureById(Long id); +// +// /** +// * 查询审批记录列表 +// * +// * @param auditSignature 审批记录 +// * @return 审批记录集合 +// */ +// public List selectAuditSignatureList(AuditSignature auditSignature); +// +// +// /** +// * 修改审批记录 +// * +// * @param auditSignature 审批记录 +// * @return 结果 +// */ +// public int updateAuditSignature(AuditSignature auditSignature); +// +// /** +// * 批量删除审批记录 +// * +// * @param ids 需要删除的审批记录主键集合 +// * @return 结果 +// */ +// public int deleteAuditSignatureByIds(Long[] ids); +// +// /** +// * 删除审批记录信息 +// * +// * @param id 审批记录主键 +// * @return 结果 +// */ +// public int deleteAuditSignatureById(Long id); +// +// /** +// * 查询待审核的申请 +// * @param approverId +// * @return +// */ +// int countPendingByUser(String approverId); +// +// /** +// * 审批申请 +// * @param audit +// */ +// void audit(AuditSignature audit); +// +// /** +// * 查询审批记录列表 +// * +// * @param auditSignature 审批记录 +// * @return 审批记录集合 +// */ +// List selectAuditSignatureReviewList(AuditSignature auditSignature); +// +// /** +// * 查询我提交的审批列表 +// * +// * @param auditSignature 审批记录 +// * @return 审批记录集合 +// */ +// List selectMySubmittedAuditList(AuditSignature auditSignature); +// +// /** +// * 审批 +// * @param auditSignature +// * @return +// */ +// int approveAuditSignature(AuditSignature auditSignature); +//} diff --git a/src/main/java/com/zg/project/wisdom/service/IRkBillService.java b/src/main/java/com/zg/project/wisdom/service/IRkBillService.java index 5654989..0da4023 100644 --- a/src/main/java/com/zg/project/wisdom/service/IRkBillService.java +++ b/src/main/java/com/zg/project/wisdom/service/IRkBillService.java @@ -1,13 +1,69 @@ package com.zg.project.wisdom.service; -import com.zg.project.wisdom.domain.RkBill; - import java.util.List; +import com.zg.project.wisdom.domain.RkBill; +import com.zg.project.wisdom.domain.dto.RkBillCreateDTO; -public interface IRkBillService { - List selectRkBillList(RkBill rkBill); - RkBill selectRkBillById(Long id); - int insertRkBill(RkBill rkBill); - int updateRkBill(RkBill rkBill); - int logicDeleteRkBillByIds(Long[] ids); +/** + * 库存单据Service接口 + * + * @author zg + * @date 2026-01-20 + */ +public interface IRkBillService +{ + /** + * 查询库存单据 + * + * @param id 库存单据主键 + * @return 库存单据 + */ + public RkBill selectRkBillById(Long id); + + /** + * 查询库存单据列表 + * + * @param rkBill 库存单据 + * @return 库存单据集合 + */ + public List selectRkBillList(RkBill rkBill); + + /** + * 新增库存单据 + * + * @param rkBill 库存单据 + * @return 结果 + */ + public int insertRkBill(RkBill rkBill); + + int insertRkBillAndDetail(RkBillCreateDTO dto); + + /** + * 向已有单据追加入库明细 + */ + int appendRkBillDetail(RkBillCreateDTO dto); + + /** + * 修改库存单据 + * + * @param rkBill 库存单据 + * @return 结果 + */ + public int updateRkBill(RkBill rkBill); + + /** + * 批量删除库存单据 + * + * @param ids 需要删除的库存单据主键集合 + * @return 结果 + */ + public int deleteRkBillByIds(Long[] ids); + + /** + * 删除库存单据信息 + * + * @param id 库存单据主键 + * @return 结果 + */ + public int deleteRkBillById(Long id); } diff --git a/src/main/java/com/zg/project/wisdom/service/IRkInfoService.java b/src/main/java/com/zg/project/wisdom/service/IRkInfoService.java index 082488c..4d3c41b 100644 --- a/src/main/java/com/zg/project/wisdom/service/IRkInfoService.java +++ b/src/main/java/com/zg/project/wisdom/service/IRkInfoService.java @@ -1,210 +1,61 @@ package com.zg.project.wisdom.service; import java.util.List; -import java.util.Map; - -import com.zg.project.inventory.domain.dto.QueryDTO; -import com.zg.project.inventory.domain.vo.ChartDataVO; import com.zg.project.wisdom.domain.RkInfo; -import com.zg.project.wisdom.domain.dto.*; -import com.zg.project.wisdom.domain.vo.DeliveryBillVO; /** - * 库存单据主Service接口 + * 库存单据明细Service接口 * * @author zg - * @date 2025-05-28 + * @date 2026-01-20 */ public interface IRkInfoService { /** - * 查询库存单据主 + * 查询库存单据明细 * - * @param id 库存单据主主键 - * @return 库存单据主 + * @param id 库存单据明细主键 + * @return 库存单据明细 */ public RkInfo selectRkInfoById(Long id); /** - * 查询库存单据主列表 - * - * @param rkInfo 库存单据主 - * @return 库存单据主集合 + * 查询库存单据明细列表 + * + * @param rkInfo 库存单据明细 + * @return 库存单据明细集合 */ public List selectRkInfoList(RkInfo rkInfo); /** - * 按 bill_no 分组返回单据列表(复用 selectRkInfoVo,SQL 外层分组聚合) - * @param query 与 /list 相同的查询条件 + * 新增库存单据明细 + * + * @param rkInfo 库存单据明细 + * @return 结果 */ - List selectGroupedByBill(RkInfoQueryDTO query); - - // 接口 - List selectBillHeaderList(RkInfoQueryDTO query); - + public int insertRkInfo(RkInfo rkInfo); /** - * 修改库存单据主 + * 修改库存单据明细 * - * @param rkInfo 库存单据主 + * @param rkInfo 库存单据明细 * @return 结果 */ public int updateRkInfo(RkInfo rkInfo); /** - * 根据出库单据号修改库存单据 - * - * @param rkInfo 库存单据 - * @return 影响行数 - */ - int updateRkInfoByBillNoCk(RkInfo rkInfo); - - /** - * 批量删除库存单据主 + * 批量删除库存单据明细 * - * @param ids 需要删除的库存单据主主键集合 + * @param ids 需要删除的库存单据明细主键集合 * @return 结果 */ public int deleteRkInfoByIds(Long[] ids); /** - * 删除库存单据主信息 + * 删除库存单据明细信息 * - * @param + * @param id 库存单据明细主键 * @return 结果 */ - int deleteRkInfoById(RkCancelDTO dto); - - /** - * 批量新增入库记录 - * @param dto 入库数据 - * @return RkSubmitResultVO 提交结果 - */ - void batchInsert(PcRkInfoBatchDTO dto); - - /** - * APP新增入库单据 - * @param dto - * @return - */ - int batchInsertApp(RkInfoBatchDTO dto); - - /** - * 根据单据编号删除入库单据 - * @param billNo - */ - void deleteByBillNo(String billNo); - - /** - * 统计逾期库存数量 - * @return - */ - int countOverdueStock(); - - /** - * 获取最新20条逾期库存列表 - * @param i - * @return - */ - List selectTopOverdueStock(int i); - - /** - * 批量出库 - * @param dto - * @return - */ - int batchOutStock(StockOutDTO dto); - - /** - * 撤销出库 - * @param - */ - int deleteByCkBillNo(String billNoCk); - - /** - * 盘点开始匹配 - * @param dto - * @return - */ - void matchWithStatus(QueryDTO dto); - - /** - * 统计指定仓库的库存数量 - * @param warehouse - * @return - */ - int countGetByWh(String warehouse); - - /** - * 图表统计:每个库位有多少个货物 - * @param dto - * @return - */ - ChartDataVO matchWithAll(QueryDTO dto); - - /** - * 还料入库 - * @param dto - * @return - */ - int refundMaterial(RefundRequestDTO dto); - - /** - * 撤销出库 - * @param id - */ - void cancelOutStockById(Long id); - - /** - * 根据ids恢复出库或入库 - * @param ids - */ - void revertByIds(Long[] ids); - - /** - * 按库位查询货物数量 - * @param pcode - * @return - */ - List listRkInfoByPcode(String pcode); - - /** - * 分页查询 rk_info 所有明细(仅未删除) - */ - List selectAllRkInfo(RkInfo query); - - /** - * 出入库明细分页查询(统计页面) - */ - List selectRkInfoPageList(RkInfo query); - - public int updateBillInfo(RkInfo rkInfo); - - /** - * 追加入库 - * @param dto - */ - void appendToExistingBill(PcRkInfoBatchDTO dto); - - /** - * 按 rk_info 主键ID集合修改配送状态 - * @param ids rk_info.id 集合 - * @param isDelivery 配送状态 - */ - int updateDeliveryStatus(List ids, Integer isDelivery); - - /** - * 获取指定出库单的配送信息 - * @param - * @return - */ - List selectDeliveryBillList(RkInfo query); - - List selectBorrowAndReturnList(RkInfoQueryDTO query); - - - /** - * 根据入库单号查询单据头公共信息 - */ - RkInfo selectHeaderByBillNo(String billNo); + public int deleteRkInfoById(Long id); } diff --git a/src/main/java/com/zg/project/wisdom/service/IRkRecordService.java b/src/main/java/com/zg/project/wisdom/service/IRkRecordService.java new file mode 100644 index 0000000..03aefb6 --- /dev/null +++ b/src/main/java/com/zg/project/wisdom/service/IRkRecordService.java @@ -0,0 +1,69 @@ +package com.zg.project.wisdom.service; + +import java.util.List; +import com.zg.project.wisdom.domain.RkRecord; + +/** + * 出入库记录Service接口 + * + * @author zg + * @date 2026-01-20 + */ +public interface IRkRecordService +{ + /** + * 查询出入库记录 + * + * @param id 出入库记录主键 + * @return 出入库记录 + */ + public RkRecord selectRkRecordById(Long id); + + /** + * 根据单据号查询出入库记录明细 + * + * @param billNo 单据号 + * @return 出入库记录明细列表 + */ + List selectRkRecordListByBillNo(String billNo); + + /** + * 查询出入库记录列表 + * + * @param rkRecord 出入库记录 + * @return 出入库记录集合 + */ + public List selectRkRecordList(RkRecord rkRecord); + + /** + * 新增出入库记录 + * + * @param rkRecord 出入库记录 + * @return 结果 + */ + public int insertRkRecord(RkRecord rkRecord); + + /** + * 修改出入库记录 + * + * @param rkRecord 出入库记录 + * @return 结果 + */ + public int updateRkRecord(RkRecord rkRecord); + + /** + * 批量删除出入库记录 + * + * @param ids 需要删除的出入库记录主键集合 + * @return 结果 + */ + public int deleteRkRecordByIds(Long[] ids); + + /** + * 删除出入库记录信息 + * + * @param id 出入库记录主键 + * @return 结果 + */ + public int deleteRkRecordById(Long id); +} diff --git a/src/main/java/com/zg/project/wisdom/service/RkStatisticsService.java b/src/main/java/com/zg/project/wisdom/service/RkStatisticsService.java index ed8958a..1435d62 100644 --- a/src/main/java/com/zg/project/wisdom/service/RkStatisticsService.java +++ b/src/main/java/com/zg/project/wisdom/service/RkStatisticsService.java @@ -94,5 +94,5 @@ public interface RkStatisticsService { * @param dto 查询参数 * @return { "total": 0, "rows": List } */ - Map selectStockStatistics(RkInfoQueryDTO dto); +// Map selectStockStatistics(RkInfoQueryDTO dto); } diff --git a/src/main/java/com/zg/project/wisdom/service/impl/AuditSignatureServiceImpl.java b/src/main/java/com/zg/project/wisdom/service/impl/AuditSignatureServiceImpl.java index b518069..439cfbe 100644 --- a/src/main/java/com/zg/project/wisdom/service/impl/AuditSignatureServiceImpl.java +++ b/src/main/java/com/zg/project/wisdom/service/impl/AuditSignatureServiceImpl.java @@ -1,292 +1,288 @@ -package com.zg.project.wisdom.service.impl; - -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -import com.zg.common.exception.ServiceException; -import com.zg.common.utils.DateUtils; -import com.zg.common.utils.SecurityUtils; -import com.zg.common.utils.StringUtils; -import com.zg.project.wisdom.domain.RkInfo; -import com.zg.project.wisdom.domain.vo.AuditSignatureReviewVO; -import com.zg.project.wisdom.domain.vo.AuditSignatureVo; -import com.zg.project.wisdom.mapper.GysJhMapper; -import com.zg.project.wisdom.mapper.RkInfoMapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import com.zg.project.wisdom.mapper.AuditSignatureMapper; -import com.zg.project.wisdom.domain.AuditSignature; -import com.zg.project.wisdom.service.IAuditSignatureService; -import org.springframework.transaction.annotation.Transactional; - -import static com.zg.framework.datasource.DynamicDataSourceContextHolder.log; - -/** - * 审批记录Service业务层处理 - * - * @author zg - * @date 2025-07-11 - */ -@Service -public class AuditSignatureServiceImpl implements IAuditSignatureService -{ - @Autowired - private AuditSignatureMapper auditSignatureMapper; - - @Autowired - private RkInfoMapper rkInfoMapper; - - @Autowired - private GysJhMapper gysJhMapper; - - /** - * 查询审批记录 - * - * @param id 审批记录主键 - * @return 审批记录 - */ - @Override - public AuditSignature selectAuditSignatureById(Long id) - { - return auditSignatureMapper.selectAuditSignatureById(id); - } - - /** - * 查询审批记录列表 - * - * @param auditSignature 审批记录 - * @return 审批记录 - */ - @Override - public List selectAuditSignatureList(AuditSignature auditSignature) - { - return auditSignatureMapper.selectAuditSignatureList(auditSignature); - } - - - /** - * 修改审批记录 - * - * @param auditSignature 审批记录 - * @return 结果 - */ - @Override - public int updateAuditSignature(AuditSignature auditSignature) - { - auditSignature.setUpdateTime(DateUtils.getNowDate()); - return auditSignatureMapper.updateAuditSignature(auditSignature); - } - - /** - * 批量删除审批记录 - * - * @param ids 需要删除的审批记录主键 - * @return 结果 - */ - @Override - public int deleteAuditSignatureByIds(Long[] ids) - { - return auditSignatureMapper.deleteAuditSignatureByIds(ids); - } - - /** - * 删除审批记录信息 - * - * @param id 审批记录主键 - * @return 结果 - */ - @Override - public int deleteAuditSignatureById(Long id) - { - return auditSignatureMapper.deleteAuditSignatureById(id); - } - - /** - * 查询待审核的申请 - * @param - * @return - */ - @Override - public int countPendingByUser(String approverId) { - return auditSignatureMapper.countPendingByUser(approverId); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void audit(AuditSignature audit) { - String userId = SecurityUtils.getUserId().toString(); - - // 1. 校验记录是否存在 - AuditSignature db = auditSignatureMapper.selectAuditSignatureById(audit.getId()); - if (db == null || "1".equals(db.getIsDelete())) { - throw new ServiceException("审核记录不存在"); - } - - // 2. 校验是否已审核 - if ("0".equals(db.getAuditResult()) || "1".equals(db.getAuditResult())) { - throw new ServiceException("该记录已审核,不能重复操作"); - } - - // 2.1 校验审核结果是否为空 - if (StringUtils.isBlank(audit.getAuditResult())) { - throw new ServiceException("审核结果不能为空"); - } - - // ✅ 如果是驳回,设置当前记录 is_current = 0 - if ("0".equals(audit.getAuditResult())) { - audit.setIsCurrent("0"); - } - - // 3. 更新审核记录本身 - audit.setApproverId(userId); - audit.setUpdateBy(userId); - audit.setUpdateTime(DateUtils.getNowDate()); - auditSignatureMapper.updateAuditSignature(audit); - - // 4. 构建更新 rk_info 的状态记录(或删除记录) - RkInfo rk = new RkInfo(); - rk.setUpdateBy(userId); - rk.setUpdateTime(DateUtils.getNowDate()); - - if ("0".equals(db.getBillType())) { - rk.setBillNo(db.getBillNo()); // 入库 - } else if ("1".equals(db.getBillType())) { - rk.setBillNoCk(db.getBillNo()); // 出库 - } - - // 5. 处理审核结果 - if ("1".equals(audit.getAuditResult())) { - rk.setStatus("1"); // 审核通过 - if ("0".equals(db.getBillType())) { - rk.setIsChuku("0"); // 入库:已入库 - } else if ("1".equals(db.getBillType())) { - rk.setIsChuku("1"); // 出库:已出库 - } - - // ✅ 如果是入库且通过,更新供应计划状态 - if ("0".equals(db.getBillType())) { - List rkList = rkInfoMapper.selectRkInfoListByBillNo(audit.getBillNo()); - Set jhIdSet = rkList.stream() - .map(RkInfo::getGysJhId) - .filter(Objects::nonNull) - .collect(Collectors.toSet()); - - for (Long jhId : jhIdSet) { - gysJhMapper.updateStatusById(jhId,"1"); - } - } - - // ✅ 更新 rk_info 状态 - rkInfoMapper.updateStatusByBillNo(rk); - - } else if ("0".equals(audit.getAuditResult())) { - rk.setStatus("2"); // 审核驳回 - rk.setIsDelete("1"); // 逻辑删除 - rk.setUpdateBy(userId); - rk.setUpdateTime(DateUtils.getNowDate()); - - // ✅ 调用统一逻辑删除方法 - if ("0".equals(db.getBillType())) { - rk.setBillNo(db.getBillNo()); - rkInfoMapper.markDeleteByBillNo(rk); - } else if ("1".equals(db.getBillType())) { - rk.setBillNoCk(db.getBillNo()); - rkInfoMapper.markDeleteByBillNoCk(rk); - // ✅ 恢复入库状态 - RkInfo revert = new RkInfo(); - revert.setBillNoCk(db.getBillNo()); // 出库单号 - revert.setStatus("1"); // 入库通过 - revert.setIsChuku("0"); // 未出库 - revert.setUpdateBy(userId); - revert.setUpdateTime(DateUtils.getNowDate()); - rkInfoMapper.revertRkInfoStatusByBillNoCk(revert); - } - } - } - - - @Override - public List selectAuditSignatureReviewList(AuditSignature filter) { - - // 1. 查询主记录列表(发起人签字图) - List mainList = auditSignatureMapper.selectAuditMainList(filter); - - // ✅ 批量提取所有 billNo - Set billNoSet = mainList.stream() - .map(AuditSignature::getBillNo) - .filter(StringUtils::isNotBlank) - .collect(Collectors.toSet()); - - // 2. 一次性查询所有 billNo 对应的入库公共字段 - Map rkInfoMap = new HashMap<>(); - if (!billNoSet.isEmpty()) { - List rkInfoList = rkInfoMapper.selectOneForEachBillNo(new ArrayList<>(billNoSet)); - rkInfoMap = rkInfoList.stream() - .collect(Collectors.toMap( - rk -> StringUtils.isNotBlank(rk.getBillNoCk()) ? rk.getBillNoCk() : rk.getBillNo(), - Function.identity(), - (a, b) -> a - )); - } - - // 3. 构造返回结果列表 - List resultList = new ArrayList<>(); - for (AuditSignature main : mainList) { - AuditSignatureReviewVO vo = new AuditSignatureReviewVO(); - BeanUtils.copyProperties(main, vo); - - // 设置入库公共字段(若存在) - RkInfo rk = rkInfoMap.get(main.getBillNo()); - if (rk != null) { - vo.setRkTypeName(rk.getRkTypeName()); - vo.setCangkuName(rk.getCangkuName()); - vo.setWlTypeName(rk.getWlTypeName()); - vo.setLihuoYName(rk.getLihuoYName()); - vo.setCkTypeName(rk.getCkTypeName()); - vo.setTeamName(rk.getTeamName()); - vo.setLihuoY(rk.getLihuoY()); - } - - // 查询该 billNo 下的现场照片 + 入库字段 - List photoList = auditSignatureMapper.selectScenePhotosWithGoodsByBillNo(main.getBillNo()); - vo.setScenePhotos(photoList); - - resultList.add(vo); - } - - return resultList; - } - - - @Override - public List selectMySubmittedAuditList(AuditSignature filter) { - // 查询发起人/现场拍照图中主图(image_type = 0)记录 - List mainList = auditSignatureMapper.selectAuditMainListBySubmitter(filter); - - List resultList = new ArrayList<>(); - for (AuditSignature main : mainList) { - AuditSignatureReviewVO vo = new AuditSignatureReviewVO(); - BeanUtils.copyProperties(main, vo); - - // 查询现场图(包含货物信息) - String billNo = main.getBillNo(); - List scenePhotos = auditSignatureMapper.selectScenePhotosWithGoodsByBillNo(billNo); - vo.setScenePhotos(scenePhotos); - - resultList.add(vo); - } - - return resultList; - } - - @Override - public int approveAuditSignature(AuditSignature auditSignature) { - auditSignature.setUpdateTime(DateUtils.getNowDate()); - auditSignature.setSignerRole("1"); // 审核人 - auditSignature.setIsCurrent("1"); // 当前记录 - return auditSignatureMapper.approveAuditByBillNo(auditSignature); - } -} +//package com.zg.project.wisdom.service.impl; +// +//import java.util.*; +//import java.util.function.Function; +//import java.util.stream.Collectors; +// +//import com.zg.common.exception.ServiceException; +//import com.zg.common.utils.DateUtils; +//import com.zg.common.utils.SecurityUtils; +//import com.zg.common.utils.StringUtils; +//import com.zg.project.wisdom.domain.vo.AuditSignatureReviewVO; +//import com.zg.project.wisdom.domain.vo.AuditSignatureVo; +//import com.zg.project.wisdom.mapper.GysJhMapper; +//import com.zg.project.wisdom.mapper.RkInfoMapper; +//import org.springframework.beans.BeanUtils; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.stereotype.Service; +//import com.zg.project.wisdom.mapper.AuditSignatureMapper; +//import com.zg.project.wisdom.domain.AuditSignature; +//import com.zg.project.wisdom.service.IAuditSignatureService; +//import org.springframework.transaction.annotation.Transactional; +// +///** +// * 审批记录Service业务层处理 +// * +// * @author zg +// * @date 2025-07-11 +// */ +//@Service +//public class AuditSignatureServiceImpl implements IAuditSignatureService +//{ +// @Autowired +// private AuditSignatureMapper auditSignatureMapper; +// +// @Autowired +// private RkInfoMapper rkInfoMapper; +// +// @Autowired +// private GysJhMapper gysJhMapper; +// +// /** +// * 查询审批记录 +// * +// * @param id 审批记录主键 +// * @return 审批记录 +// */ +// @Override +// public AuditSignature selectAuditSignatureById(Long id) +// { +// return auditSignatureMapper.selectAuditSignatureById(id); +// } +// +// /** +// * 查询审批记录列表 +// * +// * @param auditSignature 审批记录 +// * @return 审批记录 +// */ +// @Override +// public List selectAuditSignatureList(AuditSignature auditSignature) +// { +// return auditSignatureMapper.selectAuditSignatureList(auditSignature); +// } +// +// +// /** +// * 修改审批记录 +// * +// * @param auditSignature 审批记录 +// * @return 结果 +// */ +// @Override +// public int updateAuditSignature(AuditSignature auditSignature) +// { +// auditSignature.setUpdateTime(DateUtils.getNowDate()); +// return auditSignatureMapper.updateAuditSignature(auditSignature); +// } +// +// /** +// * 批量删除审批记录 +// * +// * @param ids 需要删除的审批记录主键 +// * @return 结果 +// */ +// @Override +// public int deleteAuditSignatureByIds(Long[] ids) +// { +// return auditSignatureMapper.deleteAuditSignatureByIds(ids); +// } +// +// /** +// * 删除审批记录信息 +// * +// * @param id 审批记录主键 +// * @return 结果 +// */ +// @Override +// public int deleteAuditSignatureById(Long id) +// { +// return auditSignatureMapper.deleteAuditSignatureById(id); +// } +// +// /** +// * 查询待审核的申请 +// * @param +// * @return +// */ +// @Override +// public int countPendingByUser(String approverId) { +// return auditSignatureMapper.countPendingByUser(approverId); +// } +// +// @Override +// @Transactional(rollbackFor = Exception.class) +// public void audit(AuditSignature audit) { +// String userId = SecurityUtils.getUserId().toString(); +// +// // 1. 校验记录是否存在 +// AuditSignature db = auditSignatureMapper.selectAuditSignatureById(audit.getId()); +// if (db == null || "1".equals(db.getIsDelete())) { +// throw new ServiceException("审核记录不存在"); +// } +// +// // 2. 校验是否已审核 +// if ("0".equals(db.getAuditResult()) || "1".equals(db.getAuditResult())) { +// throw new ServiceException("该记录已审核,不能重复操作"); +// } +// +// // 2.1 校验审核结果是否为空 +// if (StringUtils.isBlank(audit.getAuditResult())) { +// throw new ServiceException("审核结果不能为空"); +// } +// +// // ✅ 如果是驳回,设置当前记录 is_current = 0 +// if ("0".equals(audit.getAuditResult())) { +// audit.setIsCurrent("0"); +// } +// +// // 3. 更新审核记录本身 +// audit.setApproverId(userId); +// audit.setUpdateBy(userId); +// audit.setUpdateTime(DateUtils.getNowDate()); +// auditSignatureMapper.updateAuditSignature(audit); +// +// // 4. 构建更新 rk_info 的状态记录(或删除记录) +// RkInfo rk = new RkInfo(); +// rk.setUpdateBy(userId); +// rk.setUpdateTime(DateUtils.getNowDate()); +// +// if ("0".equals(db.getBillType())) { +// rk.setBillNo(db.getBillNo()); // 入库 +// } else if ("1".equals(db.getBillType())) { +// rk.setBillNoCk(db.getBillNo()); // 出库 +// } +// +// // 5. 处理审核结果 +// if ("1".equals(audit.getAuditResult())) { +// rk.setStatus("1"); // 审核通过 +// if ("0".equals(db.getBillType())) { +// rk.setIsChuku("0"); // 入库:已入库 +// } else if ("1".equals(db.getBillType())) { +// rk.setIsChuku("1"); // 出库:已出库 +// } +// +// // ✅ 如果是入库且通过,更新供应计划状态 +// if ("0".equals(db.getBillType())) { +// List rkList = rkInfoMapper.selectRkInfoListByBillNo(audit.getBillNo()); +// Set jhIdSet = rkList.stream() +// .map(RkInfo::getGysJhId) +// .filter(Objects::nonNull) +// .collect(Collectors.toSet()); +// +// for (Long jhId : jhIdSet) { +// gysJhMapper.updateStatusById(jhId,"1"); +// } +// } +// +// // ✅ 更新 rk_info 状态 +// rkInfoMapper.updateStatusByBillNo(rk); +// +// } else if ("0".equals(audit.getAuditResult())) { +// rk.setStatus("2"); // 审核驳回 +// rk.setIsDelete("1"); // 逻辑删除 +// rk.setUpdateBy(userId); +// rk.setUpdateTime(DateUtils.getNowDate()); +// +// // ✅ 调用统一逻辑删除方法 +// if ("0".equals(db.getBillType())) { +// rk.setBillNo(db.getBillNo()); +// rkInfoMapper.markDeleteByBillNo(rk); +// } else if ("1".equals(db.getBillType())) { +// rk.setBillNoCk(db.getBillNo()); +// rkInfoMapper.markDeleteByBillNoCk(rk); +// // ✅ 恢复入库状态 +// RkInfo revert = new RkInfo(); +// revert.setBillNoCk(db.getBillNo()); // 出库单号 +// revert.setStatus("1"); // 入库通过 +// revert.setIsChuku("0"); // 未出库 +// revert.setUpdateBy(userId); +// revert.setUpdateTime(DateUtils.getNowDate()); +// rkInfoMapper.revertRkInfoStatusByBillNoCk(revert); +// } +// } +// } +// +// +// @Override +// public List selectAuditSignatureReviewList(AuditSignature filter) { +// +// // 1. 查询主记录列表(发起人签字图) +// List mainList = auditSignatureMapper.selectAuditMainList(filter); +// +// // ✅ 批量提取所有 billNo +// Set billNoSet = mainList.stream() +// .map(AuditSignature::getBillNo) +// .filter(StringUtils::isNotBlank) +// .collect(Collectors.toSet()); +// +// // 2. 一次性查询所有 billNo 对应的入库公共字段 +// Map rkInfoMap = new HashMap<>(); +// if (!billNoSet.isEmpty()) { +// List rkInfoList = rkInfoMapper.selectOneForEachBillNo(new ArrayList<>(billNoSet)); +// rkInfoMap = rkInfoList.stream() +// .collect(Collectors.toMap( +// rk -> StringUtils.isNotBlank(rk.getBillNoCk()) ? rk.getBillNoCk() : rk.getBillNo(), +// Function.identity(), +// (a, b) -> a +// )); +// } +// +// // 3. 构造返回结果列表 +// List resultList = new ArrayList<>(); +// for (AuditSignature main : mainList) { +// AuditSignatureReviewVO vo = new AuditSignatureReviewVO(); +// BeanUtils.copyProperties(main, vo); +// +// // 设置入库公共字段(若存在) +// RkInfo rk = rkInfoMap.get(main.getBillNo()); +// if (rk != null) { +// vo.setRkTypeName(rk.getRkTypeName()); +// vo.setCangkuName(rk.getCangkuName()); +// vo.setWlTypeName(rk.getWlTypeName()); +// vo.setLihuoYName(rk.getLihuoYName()); +// vo.setCkTypeName(rk.getCkTypeName()); +// vo.setTeamName(rk.getTeamName()); +// vo.setLihuoY(rk.getLihuoY()); +// } +// +// // 查询该 billNo 下的现场照片 + 入库字段 +// List photoList = auditSignatureMapper.selectScenePhotosWithGoodsByBillNo(main.getBillNo()); +// vo.setScenePhotos(photoList); +// +// resultList.add(vo); +// } +// +// return resultList; +// } +// +// +// @Override +// public List selectMySubmittedAuditList(AuditSignature filter) { +// // 查询发起人/现场拍照图中主图(image_type = 0)记录 +// List mainList = auditSignatureMapper.selectAuditMainListBySubmitter(filter); +// +// List resultList = new ArrayList<>(); +// for (AuditSignature main : mainList) { +// AuditSignatureReviewVO vo = new AuditSignatureReviewVO(); +// BeanUtils.copyProperties(main, vo); +// +// // 查询现场图(包含货物信息) +// String billNo = main.getBillNo(); +// List scenePhotos = auditSignatureMapper.selectScenePhotosWithGoodsByBillNo(billNo); +// vo.setScenePhotos(scenePhotos); +// +// resultList.add(vo); +// } +// +// return resultList; +// } +// +// @Override +// public int approveAuditSignature(AuditSignature auditSignature) { +// auditSignature.setUpdateTime(DateUtils.getNowDate()); +// auditSignature.setSignerRole("1"); // 审核人 +// auditSignature.setIsCurrent("1"); // 当前记录 +// return auditSignatureMapper.approveAuditByBillNo(auditSignature); +// } +//} diff --git a/src/main/java/com/zg/project/wisdom/service/impl/MoveRecordServiceImpl.java b/src/main/java/com/zg/project/wisdom/service/impl/MoveRecordServiceImpl.java index 8ce65d1..d58696c 100644 --- a/src/main/java/com/zg/project/wisdom/service/impl/MoveRecordServiceImpl.java +++ b/src/main/java/com/zg/project/wisdom/service/impl/MoveRecordServiceImpl.java @@ -7,7 +7,6 @@ import java.util.List; import com.zg.common.exception.ServiceException; import com.zg.common.utils.DateUtils; -import com.zg.common.utils.EntityFillUtils; import com.zg.common.utils.SecurityUtils; import com.zg.project.information.domain.PcdeDetail; import com.zg.project.information.mapper.PcdeDetailMapper; @@ -224,9 +223,9 @@ public class MoveRecordServiceImpl implements IMoveRecordService ); } - if (!insertList.isEmpty()) { - rkInfoMapper.batchInsertRkInfo(insertList); - } +// if (!insertList.isEmpty()) { +// rkInfoMapper.batchInsertRkInfo(insertList); +// } } /** diff --git a/src/main/java/com/zg/project/wisdom/service/impl/RkBillServiceImpl.java b/src/main/java/com/zg/project/wisdom/service/impl/RkBillServiceImpl.java index 188cc2f..3126318 100644 --- a/src/main/java/com/zg/project/wisdom/service/impl/RkBillServiceImpl.java +++ b/src/main/java/com/zg/project/wisdom/service/impl/RkBillServiceImpl.java @@ -1,41 +1,351 @@ package com.zg.project.wisdom.service.impl; -import com.zg.project.wisdom.domain.RkBill; -import com.zg.project.wisdom.mapper.RkBillMapper; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import com.zg.common.utils.DateUtils; +import com.zg.common.utils.SecurityUtils; +import com.zg.common.utils.StringUtils; +import com.zg.project.wisdom.domain.GysJh; +import com.zg.project.wisdom.domain.RkInfo; +import com.zg.project.wisdom.domain.RkRecord; +import com.zg.project.wisdom.domain.dto.RkBillCreateDTO; +import com.zg.project.wisdom.mapper.GysJhMapper; +import com.zg.project.wisdom.mapper.RkInfoMapper; +import com.zg.project.wisdom.mapper.RkRecordMapper; import com.zg.project.wisdom.service.IRkBillService; +import com.zg.project.wisdom.utils.BillNoUtil; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import com.zg.project.wisdom.mapper.RkBillMapper; +import com.zg.project.wisdom.domain.RkBill; +import org.springframework.transaction.annotation.Transactional; -import java.util.List; +import static com.zg.common.utils.SecurityUtils.getUserId; +/** + * 库存单据Service业务层处理 + * + * @author zg + * @date 2026-01-20 + */ @Service -public class RkBillServiceImpl implements IRkBillService { - +public class RkBillServiceImpl implements IRkBillService +{ @Autowired private RkBillMapper rkBillMapper; - @Override - public List selectRkBillList(RkBill rkBill) { - return rkBillMapper.selectRkBillList(rkBill); - } + @Autowired + private RkInfoMapper rkInfoMapper; + @Autowired + private RkRecordMapper rkRecordMapper; + + @Autowired + private GysJhMapper gysJhMapper; + + /** + * 查询库存单据 + * + * @param id 库存单据主键 + * @return 库存单据 + */ @Override - public RkBill selectRkBillById(Long id) { + public RkBill selectRkBillById(Long id) + { return rkBillMapper.selectRkBillById(id); } + /** + * 查询库存单据列表 + * + * @param rkBill 库存单据 + * @return 库存单据 + */ @Override - public int insertRkBill(RkBill rkBill) { + public List selectRkBillList(RkBill rkBill) + { + return rkBillMapper.selectRkBillList(rkBill); + } + + /** + * 新增库存单据 + * + * @param rkBill 库存单据 + * @return 结果 + */ + @Override + public int insertRkBill(RkBill rkBill) + { return rkBillMapper.insertRkBill(rkBill); } @Override - public int updateRkBill(RkBill rkBill) { - return rkBillMapper.updateRkBill(rkBill); + @Transactional(rollbackFor = Exception.class) + public int insertRkBillAndDetail(RkBillCreateDTO dto) { + + if (dto == null || dto.getRkInfoList() == null || dto.getRkInfoList().isEmpty()) { + throw new RuntimeException("入库明细不能为空"); + } + + String billNo = BillNoUtil.generateTodayBillNo("RK", null); + Date now = DateUtils.getNowDate(); + String userId = String.valueOf(SecurityUtils.getUserId()); + + // ================== 1. 主单 rk_bill ================== + RkBill bill = new RkBill(); + if (dto.getRkBill() != null) { + BeanUtils.copyProperties(dto.getRkBill(), bill); + } + + bill.setBillNo(billNo); + bill.setBizType("0"); // 入库 + bill.setOperationTime(now); + bill.setCreateTime(now); + bill.setCreateBy(userId); + bill.setIsDelete("0"); + + // operator:如果前端没传,默认当前登录人(Integer) + if (bill.getOperator() == null) { + bill.setOperator(Integer.valueOf(userId)); + } + + // execStatus:前端优先,默认 1 + if (StringUtils.isBlank(bill.getExecStatus())) { + bill.setExecStatus("1"); + } + + rkBillMapper.insertRkBill(bill); + + // ================== 2. 明细 + 事件 + 供应计划 ================== + for (RkInfo info : dto.getRkInfoList()) { + + // ---------- rk_info ---------- + info.setBillNo(billNo); + info.setBizType(bill.getBizType()); + info.setOperationType(bill.getOperationType()); + info.setOperationTime(bill.getOperationTime()); + info.setOperator(bill.getOperator()); // Integer + info.setWlType(bill.getWlType()); + info.setRemark(bill.getRemark()); + info.setCangku(bill.getCangku()); + + info.setIsChuku("0"); + info.setHasMoved("0"); + info.setIsBorrowed("0"); + info.setExecStatus(bill.getExecStatus()); + + info.setCreateTime(now); + info.setCreateBy(userId); + info.setIsDelete("0"); + + rkInfoMapper.insertRkInfo(info); + + // ---------- rk_record ---------- + RkRecord record = buildInRkRecord(bill, info, now); + record.setExecStatus(bill.getExecStatus()); + + rkRecordMapper.insertRkRecord(record); + + // ---------- 供应计划 ---------- + handleGysJhAfterInStock(info); + } + + return 1; + } + + private void handleGysJhAfterInStock(RkInfo info) { + + // 1. 未关联供应计划或无实际入库数量,直接跳过 + if (info.getGysJhId() == null || info.getRealQty() == null) { + return; + } + + // 2. 扣减供应计划数量(jh_qty = jh_qty - realQty) + gysJhMapper.decreaseJhQtyById( + info.getGysJhId(), + info.getRealQty() + ); + + // 3. 查询最新供应计划数据(用于判断剩余数量) + GysJh gysJh = gysJhMapper.selectGysJhById(info.getGysJhId()); + if (gysJh == null) { + throw new RuntimeException("供应计划不存在,ID:" + info.getGysJhId()); + } + + // 4. 根据剩余数量判断状态 + BigDecimal remainQty = gysJh.getJhQty(); + + String status; + if (remainQty == null || remainQty.compareTo(BigDecimal.ZERO) <= 0) { + status = "1"; // 全部入库 + } else { + status = "2"; // 部分入库 + } + + // 5. 更新供应计划状态(⚠ 不使用 Map,直接参数) + gysJhMapper.updateStatusById(gysJh.getId(), status); + } + + private RkRecord buildInRkRecord(RkBill bill, RkInfo info, Date now) { + + RkRecord record = new RkRecord(); + + // ① 明细 → 事件快照 + BeanUtils.copyProperties(info, record); + record.setId(null); + + // ② 主单 → 事件上下文 + record.setBillNo(bill.getBillNo()); + record.setBizType(bill.getBizType()); + record.setOperationType(bill.getOperationType()); + record.setOperationTime(bill.getOperationTime()); + record.setOperator(bill.getOperator()); // Integer + record.setWlType(bill.getWlType()); + record.setRemark(bill.getRemark()); + record.setCangku(bill.getCangku()); + + // ③ 状态字段 + record.setIsChuku("0"); + record.setHasMoved("0"); + record.setIsBorrowed("0"); + record.setIsDelete("0"); + + // ④ 审计字段 + record.setCreateTime(now); + record.setCreateBy(bill.getCreateBy()); + + // ⑤ 关联明细 + record.setRkInfoId(info.getId()); + record.setRdid(info.getId()); + + return record; } @Override - public int logicDeleteRkBillByIds(Long[] ids) { - return rkBillMapper.logicDeleteRkBillByIds(ids); + @Transactional(rollbackFor = Exception.class) + public int appendRkBillDetail(RkBillCreateDTO dto) { + + if (dto == null || dto.getRkBill() == null + || StringUtils.isBlank(dto.getRkBill().getBillNo())) { + throw new RuntimeException("单据号不能为空"); + } + + if (dto.getRkInfoList() == null || dto.getRkInfoList().isEmpty()) { + throw new RuntimeException("入库明细不能为空"); + } + + String billNo = dto.getRkBill().getBillNo(); + Date now = DateUtils.getNowDate(); + + // ================== 1. 查主单(存在性校验 + 不可改字段来源) ================== + RkBill bill = rkBillMapper.selectByBillNo(billNo); + if (bill == null) { + throw new RuntimeException("单据不存在:" + billNo); + } + + // ================== 2. execStatus 以【前端传入】为准 ================== + String execStatus = dto.getRkBill().getExecStatus(); + if (StringUtils.isBlank(execStatus)) { + execStatus = bill.getExecStatus(); + } + + // ================== 3. 追加明细 ================== + for (RkInfo info : dto.getRkInfoList()) { + + // ---------- 基础关联 ---------- + info.setBillNo(bill.getBillNo()); + + // ---------- 类型信息(不可由前端随意改) ---------- + info.setOperationType(bill.getOperationType()); + info.setBizType(bill.getBizType()); + info.setWlType(bill.getWlType()); + + // ---------- 仓库 ---------- + info.setCangku(bill.getCangku()); + + // ---------- 操作信息 ---------- + info.setOperationTime(now); + info.setOperator(bill.getOperator()); + + // ---------- 执行状态 ---------- + info.setExecStatus(execStatus); + + // ---------- 库存状态 ---------- + info.setIsChuku("0"); + info.setHasMoved("0"); + info.setIsBorrowed("0"); + + // ---------- 备注(关键新增) ---------- + // 明细备注优先,其次单据备注 + String finalRemark = info.getRemark(); + if (StringUtils.isBlank(finalRemark)) { + finalRemark = bill.getRemark(); + } + info.setRemark(finalRemark); + + // ---------- 审计字段 ---------- + info.setCreateTime(now); + info.setCreateBy(bill.getCreateBy()); + info.setIsDelete("0"); + + // ---------- 插入 rk_info ---------- + rkInfoMapper.insertRkInfo(info); + + // ---------- rk_record:事件流水 ---------- + RkRecord record = buildInRkRecord(bill, info, now); + record.setExecStatus(execStatus); + record.setRkInfoId(info.getId()); + + // ⭐ 同步备注到事件表(非常重要) + record.setRemark(finalRemark); + + rkRecordMapper.insertRkRecord(record); + + // ---------- 供应计划处理 ---------- + handleGysJhAfterInStock(info); + } + + return 1; + } + + + /** + * 修改库存单据 + * + * @param rkBill 库存单据 + * @return 结果 + */ + @Override + public int updateRkBill(RkBill rkBill) + { + return rkBillMapper.updateRkBill(rkBill); + } + + /** + * 批量删除库存单据 + * + * @param ids 需要删除的库存单据主键 + * @return 结果 + */ + @Override + public int deleteRkBillByIds(Long[] ids) + { + return rkBillMapper.deleteRkBillByIds(ids); + } + + /** + * 删除库存单据信息 + * + * @param id 库存单据主键 + * @return 结果 + */ + @Override + public int deleteRkBillById(Long id) + { + return rkBillMapper.deleteRkBillById(id); } } diff --git a/src/main/java/com/zg/project/wisdom/service/impl/RkInfoServiceImpl.java b/src/main/java/com/zg/project/wisdom/service/impl/RkInfoServiceImpl.java index e077faf..0c8cdd6 100644 --- a/src/main/java/com/zg/project/wisdom/service/impl/RkInfoServiceImpl.java +++ b/src/main/java/com/zg/project/wisdom/service/impl/RkInfoServiceImpl.java @@ -1,89 +1,30 @@ package com.zg.project.wisdom.service.impl; -import java.math.BigDecimal; -import java.text.SimpleDateFormat; -import java.time.Duration; -import java.time.Instant; -import java.time.LocalDate; -import java.time.ZoneId; -import java.time.temporal.ChronoUnit; -import java.util.*; -import java.util.stream.Collectors; - -import com.zg.common.exception.ServiceException; +import java.util.List; import com.zg.common.utils.DateUtils; -import com.zg.common.utils.SecurityUtils; -import com.zg.common.utils.StringUtils; -import com.zg.project.information.domain.Mtd; -import com.zg.project.information.mapper.MtdMapper; -import com.zg.project.inventory.AutoInventory.mapper.InventoryMatchScanMapper; -import com.zg.project.inventory.Task.mapper.InventoryTaskMapper; -import com.zg.project.inventory.domain.dto.QueryDTO; -import com.zg.project.inventory.domain.entity.InventoryMatchScan; -import com.zg.project.inventory.domain.vo.ChartDataVO; -import com.zg.project.inventory.domain.vo.PcdeCntVO; -import com.zg.project.information.mapper.PcdeDetailMapper; -import com.zg.project.system.service.ISysConfigService; -import com.zg.project.wisdom.domain.AuditSignature; -import com.zg.project.wisdom.domain.GysJh; -import com.zg.project.wisdom.domain.dto.*; -import com.zg.project.wisdom.domain.vo.DeliveryBillVO; -import com.zg.project.wisdom.mapper.AuditSignatureMapper; -import com.zg.project.wisdom.mapper.GysJhMapper; -import com.zg.project.wisdom.utils.BillNoUtil; -import com.zg.project.wisdom.utils.CodeConvertUtil; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; import com.zg.project.wisdom.mapper.RkInfoMapper; import com.zg.project.wisdom.domain.RkInfo; import com.zg.project.wisdom.service.IRkInfoService; -import org.springframework.transaction.annotation.Transactional; - -import javax.annotation.Resource; - -import static com.zg.common.utils.SecurityUtils.getUsername; /** - * 库存单据主Service业务层处理 + * 库存单据明细Service业务层处理 * * @author zg - * @date 2025-05-28 + * @date 2026-01-20 */ @Service -public class RkInfoServiceImpl implements IRkInfoService +public class RkInfoServiceImpl implements IRkInfoService { - @Autowired private RkInfoMapper rkInfoMapper; - @Autowired - private GysJhMapper gysJhMapper; - - @Autowired - private AuditSignatureMapper auditSignatureMapper; - - @Autowired - private InventoryMatchScanMapper matchScanMapper; - - @Autowired - private InventoryTaskMapper taskMapper; - - @Autowired - private ISysConfigService configService; - - @Autowired - private PcdeDetailMapper pcdeDetailMapper; - - @Autowired - private MtdMapper mtdMapper; - /** - * 查询库存单据主 - * - * @param id 库存单据主主键 - * @return 库存单据主 + * 查询库存单据明细 + * + * @param id 库存单据明细主键 + * @return 库存单据明细 */ @Override public RkInfo selectRkInfoById(Long id) @@ -92,1454 +33,64 @@ public class RkInfoServiceImpl implements IRkInfoService } /** - * 查询库存单据主列表 - * - * @param rkInfo 库存单据主 - * @return 库存单据主 + * 查询库存单据明细列表 + * + * @param rkInfo 库存单据明细 + * @return 库存单据明细 */ @Override public List selectRkInfoList(RkInfo rkInfo) { - boolean needAudit = "1".equals(configService.selectConfigByKey("rk.audit.enabled")); - - List list = rkInfoMapper.selectRkInfoList(rkInfo); - - // 审核开启时,过滤掉“审核失败”的数据 - if (needAudit) - { - list = list.stream() - .filter(info -> - info.getApproverId() == null - || "1".equals(info.getAuditResult()) - ) - .collect(Collectors.toList()); - } - - return list; - } - - @Override - public List selectBorrowAndReturnList(RkInfoQueryDTO query) { - boolean needAudit = "1".equals(configService.selectConfigByKey("rk.audit.enabled")); - - List list = rkInfoMapper.selectBorrowAndReturnList(query); - LocalDate today = LocalDate.now(); - - for (RkInfo info : list) { - // 计算库龄:这里也可以按 rk_time 算,你之前逻辑一样就行 - if (info.getRkTime() != null) { - LocalDate rkDate = info.getRkTime().toInstant() - .atZone(ZoneId.systemDefault()) - .toLocalDate(); - long days = ChronoUnit.DAYS.between(rkDate, today); - info.setStockAge(days); - } - - // 查询现场图片 + 审核结果(同原 list) - AuditSignature signature = auditSignatureMapper.selectPhotoUrlByRkId(info.getId()); - if (signature != null) { - info.setScenePhotoUrl(signature.getSignUrl()); - info.setAuditResult(signature.getAuditResult()); - info.setApproverId(signature.getApproverId()); - } else { - info.setScenePhotoUrl(null); - info.setAuditResult(null); - info.setApproverId(null); - } - } - - if (needAudit) { - list = list.stream() - .filter(info -> - info.getApproverId() == null || - "1".equals(info.getAuditResult()) - ) - .collect(Collectors.toList()); - } - - return list; - } - - @Override - public List selectGroupedByBill(RkInfoQueryDTO query) { - // 读取审核开关(1=开启;其它=关闭) - boolean needAudit = "1".equals(configService.selectConfigByKey("rk.audit.enabled")); - // 直接传给 Mapper;不改 DTO 结构,走多参数方式 - return rkInfoMapper.selectGroupedByBill(query, needAudit ? 1 : 0); - } - - @Override - public List selectBillHeaderList(RkInfoQueryDTO query) { - // 同样传入审核开关逻辑(保留原逻辑一致性) - boolean needAudit = "1".equals(configService.selectConfigByKey("rk.audit.enabled")); - return rkInfoMapper.selectBillHeaderList(query, needAudit ? 1 : 0); - } - - @Override - public RkInfo selectHeaderByBillNo(String billNo) { - if (StringUtils.isBlank(billNo)) { - return null; - } - return rkInfoMapper.selectHeaderByBillNo(billNo); + return rkInfoMapper.selectRkInfoList(rkInfo); } /** - * 修改库存单据主 - * - * @param rkInfo 库存单据主 + * 新增库存单据明细 + * + * @param rkInfo 库存单据明细 * @return 结果 */ + @Override + public int insertRkInfo(RkInfo rkInfo) + { + rkInfo.setCreateTime(DateUtils.getNowDate()); + return rkInfoMapper.insertRkInfo(rkInfo); + } + + /** + * 修改库存单据明细 + * + * @param rkInfo 库存单据明细 + * @return 结果 + */ + @Override public int updateRkInfo(RkInfo rkInfo) { - // 通用审计字段 rkInfo.setUpdateTime(DateUtils.getNowDate()); - rkInfo.setUpdateBy(SecurityUtils.getUserId().toString()); - - // 小仓编码:优先用前端传来的 warehouseCode,没有的话用 cangku - String warehouseCode = rkInfo.getWarehouseCode(); - if (StringUtils.isBlank(warehouseCode)) { - warehouseCode = rkInfo.getCangku(); - } - - // 库位编码 - String pcode = rkInfo.getPcode(); - - // 只有当小仓 + 库位都有的时候才做这层校验 -// if (StringUtils.isNotBlank(warehouseCode) && StringUtils.isNotBlank(pcode)) { -// -// // 临时组装一个 PcRkInfoBatchDTO,专门给 validateWarehouseAndPcode 用 -// PcRkInfoBatchDTO tmpDto = new PcRkInfoBatchDTO(); -// tmpDto.setWarehouseCode(warehouseCode); -// -// List rkList = new ArrayList<>(); -// PcRkInfoItemDTO item = new PcRkInfoItemDTO(); -// item.setPcode(pcode); -// rkList.add(item); -// -// tmpDto.setRkList(rkList); -// -// validateWarehouseAndPcode(tmpDto); -// } - - // ====== 校验通过再更新 ====== return rkInfoMapper.updateRkInfo(rkInfo); } - @Override - @Transactional(rollbackFor = Exception.class) - public int updateRkInfoByBillNoCk(RkInfo rkInfo) { - - // ====== 基础校验 ====== - if (StringUtils.isBlank(rkInfo.getBillNoCk())) { - throw new ServiceException("出库单据号 billNoCk 不能为空"); - } - - // 通用审计字段 - rkInfo.setUpdateTime(DateUtils.getNowDate()); - rkInfo.setUpdateBy(SecurityUtils.getUserId().toString()); - - // ====== 仓库 + 库位校验(保持与你 updateRkInfo 完全一致) ====== - String warehouseCode = rkInfo.getWarehouseCode(); - if (StringUtils.isBlank(warehouseCode)) { - warehouseCode = rkInfo.getCangku(); - } - String pcode = rkInfo.getPcode(); - - if (StringUtils.isNotBlank(warehouseCode) && StringUtils.isNotBlank(pcode)) { - PcRkInfoBatchDTO tmpDto = new PcRkInfoBatchDTO(); - tmpDto.setWarehouseCode(warehouseCode); - - PcRkInfoItemDTO item = new PcRkInfoItemDTO(); - item.setPcode(pcode); - - tmpDto.setRkList(Collections.singletonList(item)); - validateWarehouseAndPcode(tmpDto); - } - - // ====== 按 bill_no_ck 批量更新 ====== - return rkInfoMapper.updateByBillNoCk(rkInfo); - } - - /** - * 批量处理撤销入库 / 撤销出库的逻辑(不是通用删除接口) - * - * 规则说明: - * - isChuku = 4:表示撤销入库 - * - 若存在 gysJhId 和 realQty,则处理供应计划回补 - * - 最终物理删除该库存单据 - * - isChuku = 5:表示撤销出库 - * - 不删除,只将 isChuku 改为 0(未出库状态) - * - 其他 isChuku 状态:不做任何处理 - * - * @param ids 需要处理的库存单据ID数组(必须是入库/出库撤销) - * @return 实际删除的条数(仅统计撤销入库场景) - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int deleteRkInfoByIds(Long[] ids) { - int deleteCount = 0; - Date now = new Date(); - String userId = SecurityUtils.getUserId().toString(); - - for (Long id : ids) { - RkInfo info = rkInfoMapper.selectRkInfoById(id); - if (info == null) continue; - - String isChuku = info.getIsChuku(); - - // 撤销出库:只更新状态为“未出库”,不删除 - if ("5".equals(isChuku)) { - info.setIsChuku("0"); - info.setUpdateBy(userId); - info.setUpdateTime(now); - rkInfoMapper.updateRkInfo(info); - continue; - } - - // 撤销入库:更新供应计划,删除单据 - if ("4".equals(isChuku)) { - Long gysJhId = info.getGysJhId(); - BigDecimal realQty = info.getRealQty(); - - if (gysJhId != null && realQty != null) { - GysJh jh = gysJhMapper.selectGysJhById(gysJhId); - if (jh != null) { - String status = jh.getStatus(); - if ("2".equals(status)) { - BigDecimal updatedQty = - (jh.getJhQty() == null ? BigDecimal.ZERO : jh.getJhQty()) - .add(realQty); - - jh.setJhQty(updatedQty); - jh.setStatus("0"); - jh.setUpdateBy(userId); - jh.setUpdateTime(now); - - gysJhMapper.updateGysJh(jh); - } else if ("1".equals(status)) { - // 只更新状态 - jh.setStatus("0"); - jh.setUpdateBy(userId); - jh.setUpdateTime(now); - gysJhMapper.updateGysJh(jh); - } - } - } - - rkInfoMapper.deleteRkInfoById(id); - deleteCount++; - } - } - - return deleteCount; - } - - /** - * 删除库存单据主信息 - * - * @param + * 批量删除库存单据明细 + * + * @param ids 需要删除的库存单据明细主键 * @return 结果 */ - /** - * 撤销入库单据,并根据供应计划状态回退数量或修改状态 - * 逻辑说明: - * - 如果供应计划ID存在,查询对应供应计划记录 - * - 若状态为“2”(部分出库)且实际入库数量 realQty 不为空: - * - 将供应计划中的 jhQty 加上 realQty 回退数量 - * - 并将状态修改为“0”(未入库) - * - 若状态不是“2”,也将状态修改为“0” - * - 最后根据入库单据ID删除 rk_info 表中的对应入库记录 - * - * @param dto 包含主键id、实际入库数量realQty、供应计划IDgysJhId - * @return 删除成功的记录数 - */ @Override - @Transactional(rollbackFor = Exception.class) - public int deleteRkInfoById(RkCancelDTO dto) { - Long id = dto.getId(); // 获取要撤销的入库记录ID - - // 校验是否存在 - RkInfo rkInfo = rkInfoMapper.selectRkInfoById(id); - if (rkInfo == null) { - throw new ServiceException("入库记录不存在"); - } - - // 仅更新 is_chuku 字段为 "4" 表示已撤销 - RkInfo update = new RkInfo(); - update.setId(id); - update.setIsChuku("4"); // 4 = 已撤销 - update.setUpdateBy(getUsername()); - update.setUpdateTime(DateUtils.getNowDate()); - - return rkInfoMapper.updateRkInfo(update); - } - - - /** - * 新增入库单据 - * @param dto - * @return - */ - @Override - @Transactional(rollbackFor = Exception.class) - public void batchInsert(PcRkInfoBatchDTO dto) { - - String billNo = BillNoUtil.generateTodayBillNo("RK", rkInfoMapper); - List list = dto.getRkList(); - List rkInfos = new ArrayList<>(); - List records = new ArrayList<>(); - - boolean needAudit = "1".equals(configService.selectConfigByKey("rk.audit.enabled")); - String userId = SecurityUtils.getUserId().toString(); - Date now = DateUtils.getNowDate(); - - // ✅ 0. 只有前端传了库位编码,才做“库位属于当前小仓”的校验(否则不传库位会被拦截) - /*暂时去掉校验*/ -// boolean hasPcode = list != null && list.stream() -// .anyMatch(x -> StringUtils.isNotBlank(x.getPcode())); -// if (hasPcode) { -// validateWarehouseAndPcode(dto); -// } - - // ✅ 1. 供应计划扣减映射(同一个 gysJhId 多条明细时,realQty 累加) - Map realQtyMap = list.stream() - .filter(item -> item.getGysJhId() != null && item.getRealQty() != null) - .collect(Collectors.toMap( - PcRkInfoItemDTO::getGysJhId, - PcRkInfoItemDTO::getRealQty, - (a, b) -> a.add(b) - )); - - // ✅ 2-4. 供应计划扣减&状态更新(保持你原逻辑) - if (!realQtyMap.isEmpty()) { - List jhList = gysJhMapper.selectByIds(new ArrayList<>(realQtyMap.keySet())); - Set idsToUpdateStatus = new HashSet<>(); - - for (GysJh jh : jhList) { - Long jhId = jh.getId(); - BigDecimal planQty = jh.getJhQty() == null ? BigDecimal.ZERO : jh.getJhQty(); - BigDecimal realQty = realQtyMap.get(jhId); - if (realQty == null) { - continue; - } - - boolean isEqual = realQty.compareTo(planQty) == 0; - - if (!isEqual) { - gysJhMapper.decreaseJhQtyById(jhId, realQty); - if (!needAudit) { - gysJhMapper.updateStatusById(jhId, "2"); // 2 = 部分入库 - } - } else { - if (!needAudit) { - gysJhMapper.updateStatusById(jhId, "1"); // 1 = 全部入库 - } - } - } - - if (!idsToUpdateStatus.isEmpty()) { - gysJhMapper.batchUpdateStatusByIds(idsToUpdateStatus); - } - } - - // ✅ 5. 构建 RkInfo 入库记录(库位字段按“前端是否传 pcode”决定是否设置) - for (PcRkInfoItemDTO item : list) { - RkInfo rk = new RkInfo(); - BeanUtils.copyProperties(item, rk); - - rk.setBillNo(billNo); - rk.setRkType(dto.getRkType()); - rk.setWlType(dto.getWlType()); - rk.setLihuoY(dto.getLihuoY()); - rk.setCangku(dto.getWarehouseCode()); - rk.setRkTime(dto.getRkTime() != null ? dto.getRkTime() : DateUtils.getNowDate()); - - rk.setCreateBy(userId); - rk.setCreateTime(now); - rk.setIsDelete("0"); - - rk.setGysJhId(item.getGysJhId()); - rk.setFycde1(item.getFycde1()); - rk.setFycde2(item.getFycde2()); - - if (StringUtils.isBlank(rk.getDw()) && StringUtils.isNotBlank(item.getWlNo())) { - Mtd mtd = mtdMapper.selectMtdByMid(item.getWlNo().trim()); - if (mtd != null && StringUtils.isNotBlank(mtd.getUnt())) { - rk.setDw(mtd.getUnt()); - } - } - - // 库位编码前端不传,就不设置库位相关字段(并且不查 encodedId) - if (StringUtils.isNotBlank(item.getPcode())) { - // pcode 有值:允许设置/绑定库位 - rk.setPcode(item.getPcode()); - - // 只有有 pcode 才查 pcodeId - String encodedId = pcdeDetailMapper.selectEncodedIdByPcodeAndWarehouse( - item.getPcode(), - dto.getWarehouseCode() - ); - rk.setPcodeId(encodedId); - - // 这些字段如果前端没传,保持 null;如果传了就写入 - if (StringUtils.isNotBlank(item.getTrayCode())) { - rk.setTrayCode(item.getTrayCode()); - } else { - rk.setTrayCode(null); - } - - if (StringUtils.isNotBlank(item.getEntityId())) { - rk.setEntityId(item.getEntityId()); - } else { - rk.setEntityId(null); - } - } else { - // pcode 不传:明确不设置库位信息 - rk.setPcode(null); - rk.setPcodeId(null); - rk.setTrayCode(null); - rk.setEntityId(null); - } - - if (needAudit) { - rk.setStatus("0"); // 待审核 - rk.setIsChuku("2"); // 待入库(审核中) - } else { - rk.setStatus("1"); // 审核通过 - rk.setIsChuku("0"); // 已入库 - } - - rkInfos.add(rk); - } - - // ✅ 6. 批量插入 rk_info - rkInfoMapper.batchInsertRkInfo(rkInfos); - - // ✅ 7. 一货一图(现场照片)记录(审核开启时) - if (needAudit) { - for (int i = 0; i < rkInfos.size(); i++) { - RkInfo rk = rkInfos.get(i); - PcRkInfoItemDTO item = list.get(i); - - if (StringUtils.isNotBlank(item.getPhotoUrl())) { - AuditSignature photo = new AuditSignature(); - photo.setRkId(rk.getId()); - photo.setBillNo(billNo); - photo.setBillType("0"); - photo.setAuditResult("2"); - photo.setSignerId(userId); - photo.setSignerRole("2"); - photo.setImageType("1"); - photo.setSignUrl(item.getPhotoUrl()); - photo.setSignTime(now); - - // 这里照旧:有库位就写库位/托盘;没库位就是 null - photo.setPcode(rk.getPcode()); - photo.setTrayCode(rk.getTrayCode()); - - photo.setApproverId(dto.getApproverId()); - photo.setIsCurrent("1"); - photo.setIsDelete("0"); - photo.setCreateBy(userId); - photo.setCreateTime(now); - records.add(photo); - } - } - } - - // ✅ 8. 发起人签字记录(审核开启时) - if (needAudit) { - boolean hasOldSign = auditSignatureMapper.existsCurrentSigner(billNo, "0"); - if (hasOldSign) { - auditSignatureMapper.updateIsCurrentToZero(billNo, "0"); - } - - AuditSignature mainSign = new AuditSignature(); - mainSign.setBillNo(billNo); - mainSign.setBillType("0"); - mainSign.setSignerId(userId); - mainSign.setSignerRole("0"); - mainSign.setApproverId(dto.getApproverId()); - mainSign.setSignUrl(dto.getSignatureUrl()); - mainSign.setImageType("0"); - mainSign.setSignTime(now); - mainSign.setIsCurrent("1"); - mainSign.setAuditResult("2"); - mainSign.setIsDelete("0"); - mainSign.setCreateBy(userId); - mainSign.setCreateTime(now); - records.add(mainSign); - } - - if (needAudit && !records.isEmpty()) { - auditSignatureMapper.batchInsert(records); - } + public int deleteRkInfoByIds(Long[] ids) + { + return rkInfoMapper.deleteRkInfoByIds(ids); } /** - * 校验:前端传入的小仓编码与库位所属小仓是否一致 - * - * 规则: - * 1. dto.warehouseCode 不能为空 - * 2. 每一条 rkList 里的 pcode 不能为空 - * 3. 根据 pcode 查询 pcde_detail 表中的 warehouse_code - * - 如果查不到:提示“库位编码 xxx 不存在” - * - 如果与 dto.warehouseCode 不一致:提示“库位编码 xxx 不属于小仓 yyy” - */ - private void validateWarehouseAndPcode(PcRkInfoBatchDTO dto) { - String warehouseCode = dto.getWarehouseCode(); - if (StringUtils.isBlank(warehouseCode)) { - throw new ServiceException("所属小仓编码不能为空"); - } - - List rkList = dto.getRkList(); - if (rkList == null || rkList.isEmpty()) { - throw new ServiceException("入库明细不能为空"); - } - - for (PcRkInfoItemDTO item : rkList) { - String pcode = item.getPcode(); - if (StringUtils.isBlank(pcode)) { - throw new ServiceException("库位编码不能为空"); - } - - // 根据库位码查询所属小仓 - String dbWarehouseCode = pcdeDetailMapper.selectWarehouseCodeByPcode(pcode); - - if (StringUtils.isBlank(dbWarehouseCode)) { - throw new ServiceException("库位编码【" + pcode + "】不存在或未配置所属小仓"); - } - - if (!warehouseCode.equals(dbWarehouseCode)) { - throw new ServiceException("库位编码【" + pcode + "】不属于小仓【" + warehouseCode + "】,请检查入库数据"); - } - } - } - - - /** - * APP 入库校验: - * 校验:前端传入的小仓编码与库位所属小仓是否一致 - * - * 规则: - * 1. dto.warehouseCode 不能为空 - * 2. 每一条 rkList 不为空,且每个 scan 中的 pcode 不能为空 - * 3. 根据 pcode 查询 pcde_detail 表中的 warehouse_code - * - 如果查不到:提示“库位编码 xxx 不存在” - * - 如果与 dto.warehouseCode 不一致:提示“库位编码 xxx 不属于小仓 yyy” - */ - private void validateWarehouseAndPcode(RkInfoBatchDTO dto) { - // 1) 小仓编码必填 - String warehouseCode = dto.getWarehouseCode(); - if (StringUtils.isBlank(warehouseCode)) { - throw new ServiceException("所属小仓编码不能为空"); - } - - // 2) rkList 必须有数据 - List rkList = dto.getRkList(); - if (rkList == null || rkList.isEmpty()) { - throw new ServiceException("rkList 入库明细列表不能为空"); - } - - // 3) 遍历所有 item.scanList,逐个校验 pcode - for (RkInfoItemDTO item : rkList) { - - if (item.getScanList() == null || item.getScanList().isEmpty()) { - throw new ServiceException("物料【" + item.getWlNo() + "】未传入任何扫码明细(scanList 为空)"); - } - - for (RkInfoScanDTO scan : item.getScanList()) { - String pcode = scan.getPcode(); - if (StringUtils.isBlank(pcode)) { - throw new ServiceException("库位编码不能为空"); - } - - // 根据库位码查询所属小仓 - String dbWarehouseCode = pcdeDetailMapper.selectWarehouseCodeByPcode(pcode); - - if (StringUtils.isBlank(dbWarehouseCode)) { - throw new ServiceException("库位编码【" + pcode + "】不存在或未配置所属小仓"); - } - - if (!warehouseCode.equals(dbWarehouseCode)) { - throw new ServiceException("库位编码【" + pcode + "】不属于小仓【" + warehouseCode + "】,请检查入库数据"); - } - } - } - } - - // ================== APP 入库 ================== - - /** - * 新增入库单据(APP) - * @param dto 入库批次 DTO - * @return 实际入库明细条数 + * 删除库存单据明细信息 + * + * @param id 库存单据明细主键 + * @return 结果 */ @Override - @Transactional(rollbackFor = Exception.class) - public int batchInsertApp(RkInfoBatchDTO dto) { - -// // ✅ 0. 小仓 + 库位一致性校验(统一用 warehouseCode) -// validateWarehouseAndPcode(dto); - - List saveList = new ArrayList<>(); - String userId = SecurityUtils.getUserId().toString(); - Date now = DateUtils.getNowDate(); - - if (dto.getRkList() == null || dto.getRkList().isEmpty()) { - throw new ServiceException("rkList 入库明细列表不能为空"); - } - - boolean needAudit = "1".equals(configService.selectConfigByKey("rk.audit.enabled")); - String billNo = BillNoUtil.generateTodayBillNo("RK", rkInfoMapper); - - // ✅ 第1步:构造 gysJhId → realQty 的映射(从 scanList 中提取) - Map realQtyMap = new HashMap<>(); - for (RkInfoItemDTO item : dto.getRkList()) { - if (item.getScanList() == null) { - continue; - } - for (RkInfoScanDTO scan : item.getScanList()) { - Long jhId = scan.getGysJhId(); - BigDecimal realQty = scan.getRealQty(); - if (jhId != null && realQty != null) { - // 一物一图场景,每个 jhId 只有一条 scan 数据 - realQtyMap.put(jhId, realQty); - } - } - } - - // ✅ 第2步:更新 gys_jh 的 jh_qty 与 status - if (!realQtyMap.isEmpty()) { - List allJhIds = new ArrayList<>(realQtyMap.keySet()); - List jhList = gysJhMapper.selectByIds(allJhIds); - for (GysJh jh : jhList) { - Long jhId = jh.getId(); - BigDecimal planQty = jh.getJhQty() == null - ? BigDecimal.ZERO - : jh.getJhQty(); - BigDecimal realQty = realQtyMap.get(jhId); - if (realQty == null) { - continue; - } - - boolean isEqual = realQty.compareTo(planQty) == 0; - - if (!isEqual) { - // 实到数量小于计划数量,执行扣减 + 设为部分入库(2) - gysJhMapper.decreaseJhQtyById(jhId, realQty); - if (!needAudit) { - gysJhMapper.updateStatusById(jhId, "2"); // 2 = 部分入库 - } - } else { - // 实到数量等于计划数量,状态设为全部入库(1),不做扣减 - if (!needAudit) { - gysJhMapper.updateStatusById(jhId, "1"); // 1 = 全部入库 - } - } - } - } - - // ✅ 统一确定小仓编码:只允许从 warehouseCode 获取,不再兼容 cangku - String warehouseCode = dto.getWarehouseCode(); - if (StringUtils.isEmpty(warehouseCode)) { - throw new ServiceException("所属小仓编码不能为空"); - } - - // ✅ 第3步:构建 RkInfo 入库实体 - for (RkInfoItemDTO item : dto.getRkList()) { - if (item.getScanList() == null) { - continue; - } - - for (RkInfoScanDTO scan : item.getScanList()) { - RkInfo entity = new RkInfo(); - - entity.setRkType(dto.getRkType()); - entity.setWlType(dto.getWlType()); - - // 🚩 仓库:rk_info.cangku 只存小仓编码(warehouse_code) - entity.setCangku(warehouseCode); - - entity.setLihuoY(dto.getLihuoY()); - entity.setBillNo(billNo); - - entity.setXj(item.getXj()); - entity.setXmMs(item.getXmMs()); - entity.setXmNo(item.getXmNo()); - entity.setSapNo(item.getSapNo()); - entity.setJhQty(item.getJhQty()); - entity.setHtQty(item.getHtQty()); - entity.setJhAmt(item.getJhAmt()); - entity.setHtDj(item.getHtDj()); - entity.setDw(item.getDw()); - entity.setWlNo(item.getWlNo()); - entity.setWlMs(item.getWlMs()); - entity.setGysNo(item.getGysNo()); - entity.setGysMc(item.getGysMc()); - - entity.setPcode(scan.getPcode()); - entity.setPcodeId(CodeConvertUtil.stringToHex(scan.getPcode())); - entity.setTrayCode(scan.getTrayCode()); - entity.setRealQty(scan.getRealQty()); - entity.setEntityId(scan.getEntityId()); - entity.setRemark(scan.getRemark()); - entity.setGysJhId(scan.getGysJhId()); - - entity.setIsDelete("0"); - entity.setRkTime(now); - entity.setCreateBy(userId); - entity.setCreateTime(now); - - if (needAudit) { - entity.setStatus("0"); // 待审核 - entity.setIsChuku("2"); // 待入库 - } else { - entity.setStatus("1"); // 审核通过 - entity.setIsChuku("0"); // 已入库 - } - - saveList.add(entity); - } - } - - if (saveList.isEmpty()) { - throw new ServiceException("未提取到任何可保存的数据"); - } - - // ✅ 第4步:批量插入入库记录 - rkInfoMapper.batchInsertRkInfo(saveList); - - // ✅ 第5步:若开启审核,写入签字与照片信息 - if (needAudit) { - List recordList = new ArrayList<>(); - boolean isResubmit = auditSignatureMapper.existsCurrentSigner(billNo, "0"); - if (isResubmit) { - auditSignatureMapper.updateIsCurrentToZero(billNo, "0"); - } - - // 发起人签字记录 - AuditSignature mainSign = new AuditSignature(); - mainSign.setBillNo(billNo); - mainSign.setBillType("0"); - mainSign.setSignerId(userId); - mainSign.setSignerRole("0"); - mainSign.setSignUrl(dto.getSignatureUrl()); - mainSign.setImageType("0"); - mainSign.setSignTime(now); - mainSign.setApproverId(dto.getApproverId()); - mainSign.setAuditResult("2"); - mainSign.setIsCurrent("1"); - mainSign.setIsDelete("0"); - mainSign.setCreateBy(userId); - mainSign.setCreateTime(now); - recordList.add(mainSign); - - // 现场照片记录(一物一图,按 rkId 绑定) - int index = 0; - for (RkInfoItemDTO item : dto.getRkList()) { - if (item.getScanList() == null) { - continue; - } - for (RkInfoScanDTO scan : item.getScanList()) { - RkInfo rk = saveList.get(index++); - if (StringUtils.isNotBlank(scan.getPhotoUrl())) { - AuditSignature photo = new AuditSignature(); - photo.setBillNo(billNo); - photo.setBillType("0"); - photo.setRkId(rk.getId()); - photo.setSignerId(userId); - photo.setSignerRole("2"); - photo.setSignUrl(scan.getPhotoUrl()); - photo.setImageType("1"); - photo.setSignTime(now); - photo.setApproverId(dto.getApproverId()); - photo.setIsCurrent("1"); - photo.setAuditResult("2"); - photo.setIsDelete("0"); - photo.setCreateBy(userId); - photo.setCreateTime(now); - photo.setPcode(rk.getPcode()); - photo.setTrayCode(rk.getTrayCode()); - recordList.add(photo); - } - } - } - - if (!recordList.isEmpty()) { - auditSignatureMapper.batchInsert(recordList); - } - } - - return saveList.size(); - } - - - @Transactional - public void deleteByBillNo(String billNo) { - // 1. 查询 sap_no - List sapNos = rkInfoMapper.selectSapNoByBillNo(billNo); - - // 2. 更新供应计划状态 - if (sapNos != null && !sapNos.isEmpty()) { - gysJhMapper.resetGysJhStatusBySapNos(sapNos); - } - - // 3. 删除入库记录 - rkInfoMapper.deleteByBillNo(billNo); - } - - /** - * 撤销出库 - * @param - */ - @Override - public int deleteByCkBillNo(String billNoCk) { - - return rkInfoMapper.cancelStockOut(billNoCk); - - } - - /** - * 统计过期库存 - * @return - */ - @Override - public int countOverdueStock() { - return rkInfoMapper.countOverdueStock(); - } - - /** - * 获取最新20条逾期库存列表 - * @param i - * @return - */ - @Override - public List selectTopOverdueStock(int i) { - return rkInfoMapper.selectTopOverdueStock(i); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public int batchOutStock(StockOutDTO dto) { - - if (dto.getCkList() == null || dto.getCkList().isEmpty()) { - throw new ServiceException("出库数据不能为空"); - } - - String userId = SecurityUtils.getUserId().toString(); - Date now = DateUtils.getNowDate(); - - // Step 1: 判断是否需要审核 - boolean needAudit = "1".equals(configService.selectConfigByKey("rk.audit.enabled")); - - // Step 2: 生成出库单据号 - String billNo = BillNoUtil.generateTodayBillNo("CK", rkInfoMapper); - - // 记录:原记录id -> 出库记录id(部分出库时,照片要绑定到新插入的出库记录) - Map outRkIdMap = new HashMap<>(); - - // Step 3: 出库处理(支持部分出库) - for (StockOutItemDTO item : dto.getCkList()) { - - if (item.getId() == null) { - throw new ServiceException("出库记录ID不能为空"); - } - if (item.getRealQty() == null || item.getRealQty().compareTo(BigDecimal.ZERO) <= 0) { - throw new ServiceException("出库数量必须大于0,id=" + item.getId()); - } - - // 3.1 查询原库存记录 - RkInfo db = rkInfoMapper.selectRkInfoById(item.getId()); - if (db == null) { - throw new ServiceException("库存记录不存在,id=" + item.getId()); - } - - BigDecimal oldQty = db.getRealQty() == null ? BigDecimal.ZERO : db.getRealQty(); - BigDecimal outQty = item.getRealQty(); - - // 3.2 校验不能超出库存 - BigDecimal newQty = oldQty.subtract(outQty); - if (newQty.compareTo(BigDecimal.ZERO) < 0) { - throw new ServiceException("出库数量不能大于库存数量,id=" + item.getId() - + ",库存=" + oldQty + ",出库=" + outQty); - } - - boolean partialOut = newQty.compareTo(BigDecimal.ZERO) > 0; - - if (partialOut) { - // ✅ 部分出库:原记录只扣减 real_qty - RkInfo reduce = new RkInfo(); - reduce.setId(db.getId()); - reduce.setRealQty(newQty); - reduce.setUpdateBy(userId); - reduce.setUpdateTime(now); - rkInfoMapper.updateById(reduce); - - // ✅ 插入一条新的“出库记录”:复制原记录 + 覆盖本次出库字段 - RkInfo outRow = new RkInfo(); - BeanUtils.copyProperties(db, outRow); - outRow.setId(null); - - // —— 出库这次操作字段 - outRow.setBillNoCk(billNo); - outRow.setIsDelivery(dto.getIsDelivery()); - outRow.setCkType(dto.getCkType()); - outRow.setTeamCode(dto.getTeamCode()); - outRow.setLyTime(now); - outRow.setCkLihuoY(dto.getCkLihuoY()); - outRow.setCkRemark(item.getCkRemark()); - outRow.setXmNoCk(dto.getXmNoCk()); - outRow.setXmMsCk(dto.getXmMsCk()); - - // 新出库记录数量=本次出库数量 - outRow.setRealQty(outQty); - - // 借料字段(仅 JLCK 才写) - if ("JLCK".equals(dto.getCkType())) { - outRow.setIsBorrowed("1"); - outRow.setBorrowTime(dto.getBorrowTime()); - outRow.setReturnTime(dto.getReturnTime()); - } - - // 审核状态 + is_chuku(部分出库:新出库记录按正常出库逻辑走) - if (needAudit) { - outRow.setStatus("3"); // 出库待审核 - outRow.setIsChuku("JLCK".equals(dto.getCkType()) ? "3" : "2"); - } else { - outRow.setStatus("1"); // 审核通过 - outRow.setIsChuku("JLCK".equals(dto.getCkType()) ? "3" : "1"); - } - - // 通用字段 - outRow.setIsDelete("0"); - outRow.setCreateBy(userId); - outRow.setCreateTime(now); - outRow.setUpdateBy(userId); - outRow.setUpdateTime(now); - - rkInfoMapper.insertRkInfo(outRow); - - // 记录映射:照片绑定新出库记录 - outRkIdMap.put(db.getId(), outRow.getId()); - - } else { - // ✅ 全部出库:不扣减 real_qty,直接改状态 - RkInfo update = new RkInfo(); - update.setId(item.getId()); - update.setBillNoCk(billNo); - update.setIsDelivery(dto.getIsDelivery()); - update.setCkType(dto.getCkType()); - update.setTeamCode(dto.getTeamCode()); - update.setLyTime(now); - update.setCkLihuoY(dto.getCkLihuoY()); - update.setCkRemark(item.getCkRemark()); - update.setXmNoCk(dto.getXmNoCk()); - update.setXmMsCk(dto.getXmMsCk()); - update.setUpdateBy(userId); - update.setUpdateTime(now); - - if ("JLCK".equals(dto.getCkType())) { - update.setIsBorrowed("1"); - update.setBorrowTime(dto.getBorrowTime()); - update.setReturnTime(dto.getReturnTime()); - } - - if (needAudit) { - update.setStatus("3"); // 出库待审核 - update.setIsChuku("JLCK".equals(dto.getCkType()) ? "3" : "2"); - } else { - update.setStatus("1"); // 审核通过 - update.setIsChuku("JLCK".equals(dto.getCkType()) ? "3" : "1"); - } - - rkInfoMapper.updateById(update); - - // 全出库:照片绑定原记录 - outRkIdMap.put(item.getId(), item.getId()); - } - } - - // Step 4: 如果启用审核,写入签字记录(部分出库:照片绑定新出库记录ID) - if (needAudit) { - List recordList = new ArrayList<>(); - - boolean hasOldSign = auditSignatureMapper.existsCurrentSigner(billNo, "0"); - if (hasOldSign) { - auditSignatureMapper.updateIsCurrentToZero(billNo, "0"); - } - - AuditSignature sign = new AuditSignature(); - sign.setBillNo(billNo); - sign.setBillType("1"); - sign.setSignerId(userId); - sign.setSignerRole("0"); - sign.setSignUrl(dto.getSignatureUrl()); - sign.setImageType("0"); - sign.setSignTime(now); - sign.setAuditResult("2"); - sign.setApproverId(dto.getApproverId()); - sign.setIsCurrent("1"); - sign.setIsDelete("0"); - sign.setCreateBy(userId); - sign.setCreateTime(now); - recordList.add(sign); - - for (StockOutItemDTO item : dto.getCkList()) { - if (StringUtils.isBlank(item.getPhotoUrl())) continue; - - Long rkIdForPhoto = outRkIdMap.getOrDefault(item.getId(), item.getId()); - - AuditSignature photo = new AuditSignature(); - photo.setBillNo(billNo); - photo.setBillType("1"); - photo.setSignerId(userId); - photo.setSignerRole("2"); - photo.setSignUrl(item.getPhotoUrl()); - photo.setImageType("1"); - photo.setSignTime(now); - photo.setApproverId(dto.getApproverId()); - photo.setIsCurrent("1"); - photo.setAuditResult("2"); - photo.setIsDelete("0"); - photo.setCreateBy(userId); - photo.setCreateTime(now); - - // ✅ 关键:部分出库绑定“新出库记录”的 rk_id - photo.setRkId(rkIdForPhoto); - photo.setPcode(item.getPcode()); - photo.setTrayCode(item.getTrayCode()); - - recordList.add(photo); - } - - if (!recordList.isEmpty()) { - auditSignatureMapper.batchInsert(recordList); - } - } - - return dto.getCkList().size(); - } - - - @Override - @Transactional(rollbackFor = Exception.class) // 开启事务,异常时回滚 - public void matchWithStatus(QueryDTO dto) { - // 从 DTO 获取待比对的库位 ID 列表 - List pcdeIds = dto.getIds(); - if (pcdeIds == null || pcdeIds.isEmpty()) return; // 如果为空,直接返回 - - // 通过任务 ID 获取场景 ID(优先取 DTO 中的,若无则从任务表查) - String sceneId = taskMapper.selectSceneIdById(dto.getTaskId()); - if (sceneId == null || sceneId.trim().isEmpty()) { - throw new ServiceException("匹配失败:缺少场景ID"); - } - - //根据任务ID修改任务状态 - taskMapper.updateStatus(dto.getTaskId(), "1"); - - // 自动盘点必须有设备 ID - String deviceId = dto.getDeviceId(); - int scanType = dto.getScanType() != null ? dto.getScanType() : 0; // 扫描类型:0=手动盘点,1=自动盘点 - String taskId = dto.getTaskId(); - - // 校验:若是自动盘点(scanType=1),但未传设备 ID,则报错 - if (scanType == 1 && (deviceId == null || deviceId.trim().isEmpty())) { - throw new ServiceException("自动盘点必须传递设备ID"); - } - - // ====================== 分类匹配三类数据 ====================== - - // 1. 正常匹配的数据(库位 ID 存在于库存表中,且属于当前场景 sceneId) - List matchedAll = rkInfoMapper.getByPcodeIdList(pcdeIds, sceneId); - matchedAll.forEach(r -> r.setStatus("0")); // 标记状态 0:匹配成功 - - // 2. 未盘点的数据(存在于库存表,但未出现在传入的 pcdeIds 中) - List missedAll = rkInfoMapper.getMissedPcodeIds(pcdeIds, sceneId); - missedAll.forEach(r -> r.setStatus("1")); // 标记状态 1:未盘点 - - // 3. 异常数据(传入的库位 ID 在库存中不存在) - List errorIds = pcdeIds.stream() - .filter(id -> rkInfoMapper.existsByPcodeId(id, sceneId) == 0) // 判断库位是否存在 - .collect(Collectors.toList()); - - // 将异常库位 ID 封装成 RkInfo 对象,状态设为 2:错误 - List errorAll = errorIds.stream().map(id -> { - RkInfo r = new RkInfo(); - r.setPcodeId(id); - r.setStatus("2"); - return r; - }).collect(Collectors.toList()); - - // ====================== 扫描结果落库 ====================== - - // 当前时间字符串 - String tmeStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); - List toSave = new ArrayList<>(); - - // 将匹配成功的数据封装成扫描记录 - for (RkInfo r : matchedAll) { - toSave.add(buildScanRecord(taskId, r.getPcode(), "0", deviceId, tmeStr, scanType)); - } - // 将未盘点的数据封装成扫描记录 - for (RkInfo r : missedAll) { - toSave.add(buildScanRecord(taskId, r.getPcode(), "1", deviceId, tmeStr, scanType)); - } - // 将异常数据封装成扫描记录 - for (RkInfo r : errorAll) { - toSave.add(buildScanRecord(taskId, r.getPcodeId(), "2", deviceId, tmeStr, scanType)); - } - - // 批量插入数据库 - if (!toSave.isEmpty()) { - matchScanMapper.insertBatch(toSave); - } - - // 更新任务状态为“已完成”(状态=1) - if (taskId != null && !taskId.trim().isEmpty()) { - taskMapper.updateStatus(taskId, "1"); - } - } - - /** - * 封装一个盘点扫描记录 - * - * @param taskId 任务 ID - * @param pcode 库位编码 ID - * @param status 盘点状态(0=匹配成功,1=未盘点,2=错误) - * @param deviceId 设备 ID(自动盘点时才有) - * @param tme 扫描时间 - * @param scanType 扫描类型(0=手动盘点,1=自动盘点) - * @return 封装好的 InventoryMatchScan 对象 - */ - private InventoryMatchScan buildScanRecord(String taskId, String pcode, String status, - String deviceId, String tme, int scanType) { - InventoryMatchScan record = new InventoryMatchScan(); - record.setPcode(pcode); - record.setTaskId(taskId); - record.setStatus(status); - - // 自动盘点时才保存设备 ID - if (scanType == 1 && deviceId != null) { - record.setDeviceId(deviceId); - } - - record.setTme(tme); - record.setScanType(scanType); - return record; - } - - - @Override - public int countGetByWh(String warehouse) { - return rkInfoMapper.countGetByWh(warehouse); - } - - /** - * 图表统计:每个库位有多少个货物 - * @param dto - * @return - */ - @Override - public ChartDataVO matchWithAll(QueryDTO dto) { - List ids = dto.getIds(); - if (ids == null || ids.isEmpty()) { - return new ChartDataVO(Collections.emptyList(), - Collections.emptyList(), - 0L); - } - - List rows = rkInfoMapper.selectPcdeCntFromRkInfo(ids); - - List pcdeList = new ArrayList<>(rows.size()); - List fycdeCntList = new ArrayList<>(rows.size()); - - for (PcdeCntVO r : rows) { - pcdeList.add(r.getPcde()); - fycdeCntList.add(r.getCnt()); - } - - return new ChartDataVO(pcdeList, fycdeCntList, (long) rows.size()); - } - - /** - * 还料入库 - * @param dto - * @return - */ - @Override - public int refundMaterial(RefundRequestDTO dto) { - Long originalId = dto.getOriginalId(); - // 1. 查原出库记录 - RkInfo original = rkInfoMapper.selectRkInfoById(originalId); - if (original == null || "1".equals(original.getIsDelete())) { - throw new ServiceException("原出库记录不存在或已删除"); - } - - // 2. 构造新的入库记录 - RkInfo newEntry = new RkInfo(); - BeanUtils.copyProperties(original, newEntry); - newEntry.setId(null); - newEntry.setIsChuku("0"); - newEntry.setPcode(dto.getPcode()); - newEntry.setCangku(dto.getWarehouseCode()); - newEntry.setRkType(dto.getRkType()); - newEntry.setRkTime(DateUtils.getNowDate()); - newEntry.setBorrowTime(original.getBorrowTime()); - newEntry.setBillNo(BillNoUtil.generateTodayBillNo("RK", rkInfoMapper)); - newEntry.setCreateBy(SecurityUtils.getUserId().toString()); - newEntry.setCreateTime(DateUtils.getNowDate()); - newEntry.setUpdateBy(null); - newEntry.setUpdateTime(null); - newEntry.setIsBorrowed("0"); - - // 3. 插入新入库记录 - int rows = rkInfoMapper.insertRkInfo(newEntry); - - // ✅ 4. 更新原记录的 is_borrowed = '2' - RkInfo update = new RkInfo(); - update.setId(originalId); - update.setIsBorrowed("2"); - update.setReturnTime(DateUtils.getNowDate()); - update.setUpdateBy(getUsername()); - update.setUpdateTime(DateUtils.getNowDate()); - update.setPcode(dto.getPcode()); - update.setCangku(dto.getWarehouseCode()); - rkInfoMapper.updateById(update); - - return rows; - } - - @Override - public void cancelOutStockById(Long id) { - // 构造只更新 is_chuku 字段的对象 - RkInfo update = new RkInfo(); - update.setId(id); - update.setIsChuku("5"); - update.setUpdateBy(getUsername()); - update.setUpdateTime(DateUtils.getNowDate()); - - // 执行更新 - rkInfoMapper.updateRkInfo(update); - } - - /** - * 根据 IDs 恢复入库或出库状态(撤销撤销操作) - * - * 说明: - * - 如果 isChuku = 4(撤销入库),改为 0(已入库); - * - 如果 isChuku = 5(撤销出库),改为 1(已出库); - * - 其他状态不处理; - * - * @param ids 单据 ID 数组 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public void revertByIds(Long[] ids) { - Date now = new Date(); - String userId = SecurityUtils.getUserId().toString(); - - for (Long id : ids) { - RkInfo info = rkInfoMapper.selectRkInfoById(id); - if (info == null) continue; - - String isChuku = info.getIsChuku(); - - if ("4".equals(isChuku)) { - // 撤销入库 -> 恢复为已入库 - info.setIsChuku("0"); - info.setUpdateBy(userId); - info.setUpdateTime(now); - rkInfoMapper.updateRkInfo(info); - } else if ("5".equals(isChuku)) { - // 撤销出库 -> 恢复为已出库 - info.setIsChuku("1"); - info.setUpdateBy(userId); - info.setUpdateTime(now); - rkInfoMapper.updateRkInfo(info); - } - } - } - - @Override - public List listRkInfoByPcode(String pcode) { - return rkInfoMapper.listRkInfoByPcode(pcode); - } - - @Override - public List selectAllRkInfo(RkInfo query) { - return rkInfoMapper.selectAllRkInfo(query); - } - - @Override - public List selectRkInfoPageList(RkInfo query) { - return rkInfoMapper.selectRkInfoPageList(query); - } - - @Override - public int updateBillInfo(RkInfo query) { - return rkInfoMapper.updateBillInfo(query); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void appendToExistingBill(PcRkInfoBatchDTO dto) { - // ========== 参数校验 ========== - if (StringUtils.isEmpty(dto.getBillNo())) { - throw new ServiceException("入库单号 billNo 不能为空"); - } - if (dto.getRkList() == null || dto.getRkList().isEmpty()) { - throw new ServiceException("追加明细不能为空"); - } - - // ========== 1. 校验原单据是否存在 ========== - List exists = rkInfoMapper.selectRkInfoListByBillNo(dto.getBillNo()); - if (exists == null || exists.isEmpty()) { - throw new ServiceException("目标入库单不存在:" + dto.getBillNo()); - } - - Date now = DateUtils.getNowDate(); - String user = getUsername(); - - // ========== 2. 组装并插入追加的入库明细(无审批:直接入库) ========== - List toSave = new ArrayList<>(dto.getRkList().size()); - Date rkTime = dto.getRkTime() != null ? dto.getRkTime() : now; - - for (PcRkInfoItemDTO item : dto.getRkList()) { - RkInfo e = new RkInfo(); - BeanUtils.copyProperties(item, e); // 拷贝 DTO 相同字段 - - // 公共字段 - e.setBillNo(dto.getBillNo()); - e.setRkType(dto.getRkType()); - e.setWlType(dto.getWlType()); - e.setCangku(dto.getWarehouseCode()); - e.setLihuoY(dto.getLihuoY()); - e.setRkTime(rkTime); - - // 入库状态(未启用审批) - e.setIsChuku("0"); // 已入库 - e.setStatus("1"); // 正常 - e.setIsDelete("0"); - - e.setCreateBy(user); - e.setCreateTime(now); - e.setUpdateBy(user); - e.setUpdateTime(now); - - toSave.add(e); - } - rkInfoMapper.batchInsertRkInfo(toSave); - - // ========== 3. 更新供应计划(关键改动):只在“部分入库”时扣减 ========== - for (PcRkInfoItemDTO item : dto.getRkList()) { - Long jhId = item.getGysJhId(); - BigDecimal realQty = item.getRealQty(); - if (jhId == null || realQty == null) continue; - - // 查当前计划行 - GysJh plan = gysJhMapper.selectGysJhById(jhId); - if (plan == null) continue; - - // 已经标记为全部入库的行,直接跳过(既不扣减也不改) - if ("1".equals(plan.getStatus())) { - continue; - } - - // 计划剩余(表里 jh_qty 列) - BigDecimal remain = plan.getJhQty() == null - ? BigDecimal.ZERO - : plan.getJhQty(); - - // ① 全额入库:realQty >= remain -> 直接置 1,不做扣减 - if (remain.compareTo(BigDecimal.ZERO) <= 0 || realQty.compareTo(remain) >= 0) { - gysJhMapper.updateStatusById(jhId, "1"); // 全部入库 - // 不调用 decreaseJhQtyById,避免出现负数 - continue; - } - - // ② 部分入库:realQty < remain -> 先扣减,再把该行置 2 - gysJhMapper.decreaseJhQtyById(jhId, realQty); // jh_qty = jh_qty - realQty - gysJhMapper.updateStatusById(jhId, "2"); // 部分入库 - } - - // ========== 4. 按 sapNo 再做一轮收尾(把 <=0 的行批量收敛到 1,其余置 2)========== - // 说明:上面已经对每个行做了状态落地;此处是“兜底收敛”,确保同一 sapNo 下的行一致 - Set sapNos = dto.getRkList().stream() - .map(PcRkInfoItemDTO::getSapNo) - .filter(StringUtils::isNotEmpty) - .collect(Collectors.toSet()); - - for (String sapNo : sapNos) { - // 仅返回 status != '1' 的行(未完全入库的) - List rows = gysJhMapper.getBySapNo(sapNo); - if (rows == null || rows.isEmpty()) continue; - - List toAll = new ArrayList<>(); - List toPartial = new ArrayList<>(); - - for (GysJh r : rows) { - BigDecimal remain = r.getJhQty() == null - ? BigDecimal.ZERO - : r.getJhQty(); - - if (remain.compareTo(BigDecimal.ZERO) <= 0) { - toAll.add(r.getId()); // 已经无剩余 -> 置 1(全部入库) - } else { - toPartial.add(r.getId()); // 仍有剩余 -> 置 2(部分入库) - } - } - - for (Long id : toAll) { - gysJhMapper.updateStatusById(id, "1"); // 全部入库 - } - if (!toPartial.isEmpty()) { - gysJhMapper.batchUpdateStatusByIds(new HashSet<>(toPartial)); // 部分入库 - } - } - } - - @Override - public int updateDeliveryStatus(List ids, Integer isDelivery) { - if (ids == null || ids.isEmpty()) { - return 0; - } - return rkInfoMapper.updateDeliveryStatus(ids, isDelivery); - } - - @Override - public List selectDeliveryBillList(RkInfo query) { - // 先查出所有符合条件的明细 - List list = rkInfoMapper.selectDeliveryCkList(query); - if (list == null || list.isEmpty()) { - return Collections.emptyList(); - } - - // 按 billNoCk 分组:一个单据对应一组明细 - Map map = new LinkedHashMap<>(); - - for (RkInfo item : list) { - String billNoCk = item.getBillNoCk(); - // 兜底:如果 bill_no_ck 为空,就用 bill_no - if (StringUtils.isEmpty(billNoCk)) { - billNoCk = item.getBillNo(); - } - - DeliveryBillVO vo = map.get(billNoCk); - if (vo == null) { - vo = new DeliveryBillVO(); - vo.setBillNoCk(billNoCk); - vo.setCkLihuoY(item.getCkLihuoY()); - vo.setTeamCode(item.getTeamCode()); - vo.setLyTime(item.getLyTime()); - vo.setDetailList(new ArrayList<>()); - map.put(billNoCk, vo); - } - - vo.getDetailList().add(item); - } - - return new ArrayList<>(map.values()); + public int deleteRkInfoById(Long id) + { + return rkInfoMapper.deleteRkInfoById(id); } } diff --git a/src/main/java/com/zg/project/wisdom/service/impl/RkRecordServiceImpl.java b/src/main/java/com/zg/project/wisdom/service/impl/RkRecordServiceImpl.java new file mode 100644 index 0000000..4524128 --- /dev/null +++ b/src/main/java/com/zg/project/wisdom/service/impl/RkRecordServiceImpl.java @@ -0,0 +1,102 @@ +package com.zg.project.wisdom.service.impl; + +import java.util.List; +import com.zg.common.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.zg.project.wisdom.mapper.RkRecordMapper; +import com.zg.project.wisdom.domain.RkRecord; +import com.zg.project.wisdom.service.IRkRecordService; + +/** + * 出入库记录Service业务层处理 + * + * @author zg + * @date 2026-01-20 + */ +@Service +public class RkRecordServiceImpl implements IRkRecordService +{ + @Autowired + private RkRecordMapper rkRecordMapper; + + /** + * 查询出入库记录 + * + * @param id 出入库记录主键 + * @return 出入库记录 + */ + @Override + public RkRecord selectRkRecordById(Long id) + { + return rkRecordMapper.selectRkRecordById(id); + } + + @Override + public List selectRkRecordListByBillNo(String billNo) + { + return rkRecordMapper.selectRkRecordListByBillNo(billNo); + } + + /** + * 查询出入库记录列表 + * + * @param rkRecord 出入库记录 + * @return 出入库记录 + */ + @Override + public List selectRkRecordList(RkRecord rkRecord) + { + return rkRecordMapper.selectRkRecordList(rkRecord); + } + + /** + * 新增出入库记录 + * + * @param rkRecord 出入库记录 + * @return 结果 + */ + @Override + public int insertRkRecord(RkRecord rkRecord) + { + rkRecord.setCreateTime(DateUtils.getNowDate()); + return rkRecordMapper.insertRkRecord(rkRecord); + } + + /** + * 修改出入库记录 + * + * @param rkRecord 出入库记录 + * @return 结果 + */ + @Override + public int updateRkRecord(RkRecord rkRecord) + { + rkRecord.setUpdateTime(DateUtils.getNowDate()); + return rkRecordMapper.updateRkRecord(rkRecord); + } + + /** + * 批量删除出入库记录 + * + * @param ids 需要删除的出入库记录主键 + * @return 结果 + */ + @Override + public int deleteRkRecordByIds(Long[] ids) + { + return rkRecordMapper.deleteRkRecordByIds(ids); + } + + /** + * 删除出入库记录信息 + * + * @param id 出入库记录主键 + * @return 结果 + */ + @Override + public int deleteRkRecordById(Long id) + { + return rkRecordMapper.deleteRkRecordById(id); + } +} diff --git a/src/main/java/com/zg/project/wisdom/service/impl/RkStatisticsServiceImpl.java b/src/main/java/com/zg/project/wisdom/service/impl/RkStatisticsServiceImpl.java index e29659f..18697a3 100644 --- a/src/main/java/com/zg/project/wisdom/service/impl/RkStatisticsServiceImpl.java +++ b/src/main/java/com/zg/project/wisdom/service/impl/RkStatisticsServiceImpl.java @@ -7,20 +7,16 @@ import com.zg.common.utils.StringUtils; import com.zg.common.utils.poi.ExcelUtil; import com.zg.project.wisdom.domain.dto.RkInfoQueryDTO; import com.zg.project.wisdom.domain.vo.*; -import com.zg.project.wisdom.mapper.GysJhMapper; import com.zg.project.wisdom.mapper.RkInfoMapper; import com.zg.project.wisdom.mapper.RkStatisticsMapper; import com.zg.project.wisdom.service.RkStatisticsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; -import java.sql.Timestamp; import java.time.*; import java.time.format.DateTimeFormatter; -import java.time.temporal.ChronoUnit; import java.util.*; @Service @@ -433,23 +429,23 @@ public class RkStatisticsServiceImpl implements RkStatisticsService { return list; } - @Override - public Map selectStockStatistics(RkInfoQueryDTO query) { - - if (query.getIsChuku() == null) { - query.setIsChuku("0"); // 默认只查在库 - } - - Map result = rkInfoMapper.selectStockStatistics(query); - - // 处理空值情况,防止前端拿到 null 报错 - if (result == null) { - result = new HashMap<>(); - } - result.putIfAbsent("sumMoney", 0); - result.putIfAbsent("sumQty", 0); - result.putIfAbsent("pcdeCount", 0); - - return result; - } +// @Override +// public Map selectStockStatistics(RkInfoQueryDTO query) { +// +// if (query.getIsChuku() == null) { +// query.setIsChuku("0"); // 默认只查在库 +// } +// +// Map result = rkInfoMapper.selectStockStatistics(query); +// +// // 处理空值情况,防止前端拿到 null 报错 +// if (result == null) { +// result = new HashMap<>(); +// } +// result.putIfAbsent("sumMoney", 0); +// result.putIfAbsent("sumQty", 0); +// result.putIfAbsent("pcdeCount", 0); +// +// return result; +// } } diff --git a/src/main/resources/application-druid.yml b/src/main/resources/application-druid.yml index 969fea2..7724b83 100644 --- a/src/main/resources/application-druid.yml +++ b/src/main/resources/application-druid.yml @@ -7,7 +7,8 @@ spring: # 主库数据源 master: # url: jdbc:mysql://47.100.212.83:3306/wisdom?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 - url: jdbc:mysql://192.168.1.28:3306/wisdom?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + url: jdbc:mysql://192.168.1.28:3306/wisdomnew?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 +# url: jdbc:mysql://192.168.1.28:3306/wisdom?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 # url: jdbc:mysql://192.168.1.192:3306/wisdom?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 # url: jdbc:mysql://192.168.1.251:3306/wisdom?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 # url: jdbc:mysql://localhost:3306/wisdom?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 diff --git a/src/main/resources/mybatis/wisdom/RkBillMapper.xml b/src/main/resources/mybatis/wisdom/RkBillMapper.xml index 33eafa4..5437c1e 100644 --- a/src/main/resources/mybatis/wisdom/RkBillMapper.xml +++ b/src/main/resources/mybatis/wisdom/RkBillMapper.xml @@ -1,161 +1,223 @@ - - - - - INSERT INTO rk_bill ( - rk_type, wl_type, cangku, rk_time, lihuo_y, - ck_type, ck_time, ck_lihuo_y, ck_remark, team_code, - bill_no, is_chuku, is_delete, - created_by, created_at, - updated_by, updated_at - ) VALUES ( - #{rkType}, #{wlType}, #{cangku}, #{rkTime}, #{lihuoY}, - #{ckType}, #{ckTime}, #{ckLihuoY}, #{ckRemark}, #{teamCode}, - #{billNo}, #{isChuku}, #{isDelete}, - #{createBy}, #{createTime}, - #{updateBy}, #{updateTime} - ) - + + + + + - - + + + + + - - + + + AND rb.wl_type = #{wlType} + AND rb.cangku = #{cangku} + AND rb.bill_no = #{billNo} + AND rb.operation_type = #{operationType} + AND rb.biz_type = #{bizType} + AND rb.operation_time = #{operationTime} + + + AND rb.operation_time >= #{startDate} + + + AND rb.operation_time <= #{endDate} + + AND rb.exec_status = #{execStatus} + AND rb.operator = #{operator} + AND rb.team_code = #{teamCode} + AND rb.is_delivery = #{isDelivery} + AND rb.is_delete = #{isDelete} + + ORDER BY rb.exec_status ASC, rb.operation_time DESC + + + + + + - - - - - + + UPDATE rk_bill - - rk_type = #{rkType}, + wl_type = #{wlType}, cangku = #{cangku}, - rk_time = #{rkTime}, - lihuo_y = #{lihuoY}, - - ck_type = #{ckType}, - ck_time = #{ckTime}, - ck_lihuo_y = #{ckLihuoY}, - ck_remark = #{ckRemark}, + bill_no = #{billNo}, + operation_type = #{operationType}, + biz_type = #{bizType}, + operation_time = #{operationTime}, + exec_status = #{execStatus}, + operator = #{operator}, team_code = #{teamCode}, - - bill_no = #{billNo}, - is_chuku = #{isChuku}, remark = #{remark}, - updated_by = #{updateBy}, - updated_at = #{updateTime}, - + is_delivery = #{isDelivery}, + is_delete = #{isDelete}, + WHERE id = #{id} - - - UPDATE rk_bill - SET is_delete = '1' + + + DELETE FROM rk_bill WHERE id = #{id} + + + + DELETE FROM rk_bill WHERE id IN - + #{id} - + diff --git a/src/main/resources/mybatis/wisdom/RkInfoMapper.xml b/src/main/resources/mybatis/wisdom/RkInfoMapper.xml index 5a921c4..392b3a7 100644 --- a/src/main/resources/mybatis/wisdom/RkInfoMapper.xml +++ b/src/main/resources/mybatis/wisdom/RkInfoMapper.xml @@ -4,1646 +4,221 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - SELECT - ri.id, - ri.bill_no, - ri.bill_no_ck, - ri.rk_type, st.type_name AS rk_type_name, - ri.wl_type, mt.type_name AS wl_type_name, - - ri.cangku, - wh.warehouse_name AS cangku_name, - - wh.parent_warehouse_code AS parent_warehouse_code, - wh.parent_warehouse_name AS parent_warehouse_name, - wh.warehouse_code AS warehouse_code, - wh.warehouse_name AS warehouse_name, - - ri.rk_time, - ri.lihuo_y, - ri.is_chuku, - ri.is_borrowed, - ri.is_delivery, - ri.remark, - - ri.ck_lihuo_y, - ri.ck_type, - sot.type_name AS ck_type_name, - - ri.team_code, - ct.team_name, - - ri.ck_remark, - ri.ly_time, - ri.borrow_time, - ri.return_time, - - ri.xj, - ri.xm_no, - ri.xm_ms, - ri.xm_no_ck, - ri.xm_ms_ck, - - ri.wl_no, - ri.wl_ms, - ri.gys_no, - ri.gys_mc, - - ri.jh_amt, - ri.ht_dj, - ri.sap_no, - ri.xh, - ri.gys_jh_id, - - ri.jh_qty, - ri.ht_qty, - ri.dw, - ri.real_qty, - - ri.pcode, - ri.pcode_id, - ri.tray_code, - ri.entity_id, - - ri.status, - ri.has_moved, - - ri.create_by, - ri.create_time, - ri.update_by, - ri.update_time, - ri.is_delete, - - u.user_name AS lihuo_y_name, - - -- ✅ 库龄(天) - DATEDIFF(CURDATE(), ri.rk_time) AS stock_age, - - -- 总金额 = 单价 × 实际数量 - COALESCE(ri.ht_dj, 0) * COALESCE(ri.real_qty, 0) AS total_amount - FROM rk_info ri - LEFT JOIN stock_in_type st ON ri.rk_type = st.type_code - LEFT JOIN material_type mt ON ri.wl_type = mt.type_code - LEFT JOIN warehouse_info wh ON ri.cangku = wh.warehouse_code - LEFT JOIN stock_out_type sot ON ri.ck_type = sot.type_code - LEFT JOIN construction_team ct ON ri.team_code = ct.team_code - LEFT JOIN sys_user u ON ri.lihuo_y = u.user_id - - - - - - SELECT - ri.id, - ri.bill_no, - ri.bill_no_ck, - ri.rk_type, - ri.wl_type, - ri.cangku, - ri.rk_time, - ri.lihuo_y, - ri.is_chuku, - ri.xj, - ri.xm_no, - ri.xm_ms, - ri.xm_no_ck, - ri.xm_ms_ck, - ri.gys_mc, - ri.wl_no, - ri.wl_ms, - ri.gys_no, - ri.sap_no, - ri.ck_type, - ri.ly_time, - ri.ck_lihuo_y, - ri.pcode, - ri.is_delete - FROM rk_info ri - - - - INSERT INTO rk_info ( - bill_no, - rk_type, wl_type, cangku, lihuo_y, rk_time, - wl_no, wl_ms, xm_no, xm_ms, - xm_no_ck, xm_ms_ck, xj, sap_no, gys_no, gys_mc, - jh_qty, ht_qty, jh_amt, ht_dj, dw, - borrow_time, return_time, status, - pcode, pcode_id, tray_code, real_qty, entity_id, fycde_1, fycde_2, - remark, is_chuku, is_borrowed, gys_jh_id, - is_delete, create_by, create_time - ) - VALUES - - ( - #{item.billNo}, - #{item.rkType}, #{item.wlType}, #{item.cangku}, #{item.lihuoY}, #{item.rkTime}, - #{item.wlNo}, #{item.wlMs}, #{item.xmNo}, #{item.xmMs}, - #{item.xmNoCk}, #{item.xmMsCk}, #{item.xj}, #{item.sapNo}, #{item.gysNo}, #{item.gysMc}, - #{item.jhQty}, #{item.htQty}, #{item.jhAmt}, #{item.htDj}, #{item.dw}, - #{item.borrowTime}, #{item.returnTime}, #{item.status}, - #{item.pcode}, #{item.pcodeId}, #{item.trayCode}, #{item.realQty}, #{item.entityId}, - #{item.fycde1}, #{item.fycde2}, - #{item.remark}, #{item.isChuku}, #{item.isBorrowed}, #{item.gysJhId}, - #{item.isDelete}, #{item.createBy}, #{item.createTime} - ) - - - - - - INSERT INTO rk_info ( - rk_type, wl_type, cangku, rk_time, lihuo_y, - is_chuku, remark, bill_no, xj, xm_no, xm_ms, is_borrowed, - wl_no, wl_ms, gys_no, gys_mc, jh_amt, ht_dj, - sap_no, xh, jh_qty, ht_qty, dw, real_qty, - pcode, tray_code, entity_id, - ck_lihuo_y, ck_type, team_code, ck_remark, - ly_time, bill_no_ck, has_moved, borrow_time, - gys_jh_id, + select + id, + operation_type, + biz_type, + wl_type, + cangku, + operation_time, + operator, + is_chuku, status, - create_by, create_time, update_by, update_time, is_delete - ) VALUES ( - #{rkType}, #{wlType}, #{cangku}, #{rkTime}, #{lihuoY}, - #{isChuku}, #{remark}, #{billNo}, #{xj}, #{xmNo}, #{xmMs}, #{isBorrowed}, - #{wlNo}, #{wlMs}, #{gysNo}, #{gysMc}, #{jhAmt}, #{htDj}, - #{sapNo}, #{xh}, #{jhQty}, #{htQty}, #{dw}, #{realQty}, - #{pcode}, #{trayCode}, #{entityId}, - #{ckLihuoY}, #{ckType}, #{teamCode}, #{ckRemark}, - #{lyTime}, #{billNoCk}, #{hasMoved}, #{borrowTime}, - #{gysJhId}, - #{status}, - #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, #{isDelete} - ) - + exec_status, + remark, + bill_no, + xj, + xm_no, + xm_ms, + xm_no_ck, + xm_ms_ck, + wl_no, + wl_ms, + gys_no, + gys_mc, + jh_amt, + ht_dj, + sap_no, + xh, + jh_qty, + ht_qty, + dw, + real_qty, + pcode, + pcode_id, + tray_code, + entity_id, + team_code, + borrow_time, + return_time, + has_moved, + is_borrowed, + create_by, + create_time, + update_by, + update_time, + is_delete, + gys_jh_id, + rdid, + rdid_ck, + sid, + is_delivery, + fycde_1, + fycde_2, + is_update, + /* 新增库龄计算 */ + DATEDIFF(CURRENT_DATE, operation_time) AS stock_age -- 库龄(天) + from rk_info + - - UPDATE rk_info - SET - is_chuku = '0', - bill_no_ck = NULL, - ck_lihuo_y = NULL, - ck_type = NULL, - team_code = NULL, - ly_time = NULL, - ck_remark = NULL, - is_borrowed = NULL, - update_time = NOW() - WHERE bill_no_ck = #{billNoCk} - - - - DELETE FROM rk_info - WHERE bill_no = #{billNo} + + + delete from rk_info where id = #{id} + + delete from rk_info + where id in + + #{item} + + + + - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + values ( + #{operationType}, #{bizType}, #{wlType}, #{cangku}, #{operationTime}, #{operator}, + #{isChuku}, #{status}, #{execStatus}, #{remark}, #{billNo}, + #{xj}, #{xmNo}, #{xmMs}, #{xmNoCk}, #{xmMsCk}, + #{wlNo}, #{wlMs}, + #{gysNo}, #{gysMc}, + #{jhAmt}, #{htDj}, #{sapNo}, #{xh}, + #{jhQty}, #{htQty}, #{dw}, #{realQty}, + #{pcode}, #{pcodeId}, #{trayCode}, #{entityId}, + #{teamCode}, #{borrowTime}, #{returnTime}, + #{hasMoved}, #{isBorrowed}, + #{gysJhId}, + #{rdid}, #{rdidCk}, #{sid}, + #{isDelivery}, + #{fycde1}, #{fycde2}, + #{isUpdate}, + #{createBy}, #{createTime}, #{isDelete} + ) + + - UPDATE rk_info - - rk_type = #{rkType}, - wl_type = #{wlType}, - - - - cangku = #{cangku}, - - - rk_time = #{rkTime}, - lihuo_y = #{lihuoY}, - is_chuku = #{isChuku}, - is_borrowed = #{isBorrowed}, - - bill_no = #{billNo}, - bill_no_ck = #{billNoCk}, - - remark = #{remark}, - xj = #{xj}, - xm_no = #{xmNo}, - xm_ms = #{xmMs}, - xm_no_ck = #{xmNoCk}, - xm_ms_ck = #{xmMsCk}, - - wl_no = #{wlNo}, - wl_ms = #{wlMs}, - - gys_no = #{gysNo}, - gys_mc = #{gysMc}, - - jh_amt = #{jhAmt}, - ht_dj = #{htDj}, - sap_no = #{sapNo}, - xh = #{xh}, - - jh_qty = #{jhQty}, - ht_qty = #{htQty}, - dw = #{dw}, - real_qty = #{realQty}, - - pcode = #{pcode}, - pcode_id = #{pcodeId}, - tray_code = #{trayCode}, - entity_id = #{entityId}, - - ck_lihuo_y = #{ckLihuoY}, - ck_type = #{ckType}, - team_code = #{teamCode}, - - ly_time = #{lyTime}, - borrow_time = #{borrowTime}, - return_time = #{returnTime}, - ck_remark = #{ckRemark}, - - is_delivery = #{isDelivery}, - has_moved = #{hasMoved}, - - - fycde_1 = #{fycde1}, - fycde_2 = #{fycde2}, - - - gys_jh_id = #{gysJhId}, - - update_by = #{updateBy}, - update_time = #{updateTime}, - is_delete = #{isDelete}, - - WHERE id = #{id} - - - - UPDATE rk_info - - rk_type = #{rkType}, - wl_type = #{wlType}, - - cangku = #{cangku}, - - rk_time = #{rkTime}, - lihuo_y = #{lihuoY}, - is_chuku = #{isChuku}, - is_borrowed = #{isBorrowed}, - - remark = #{remark}, - xm_no_ck = #{xmNoCk}, - xm_ms_ck = #{xmMsCk}, - - ck_lihuo_y = #{ckLihuoY}, - ck_type = #{ckType}, - team_code = #{teamCode}, - ck_remark = #{ckRemark}, - - ly_time = #{lyTime}, - borrow_time = #{borrowTime}, - return_time = #{returnTime}, - - is_delivery = #{isDelivery}, - has_moved = #{hasMoved}, - - update_by = #{updateBy}, - update_time = #{updateTime}, - - WHERE bill_no_ck = #{billNoCk} - AND is_delete = '0' - - - update rk_info - - is_delete = 1 - + + operation_type = #{operationType}, + biz_type = #{bizType}, + wl_type = #{wlType}, + cangku = #{cangku}, + status = #{status}, + exec_status = #{execStatus}, + update_by = #{updateBy}, + update_time = #{updateTime}, + where id = #{id} - - - update rk_info - set is_delete = 1 - where id in - - #{id} - - - - - UPDATE rk_info - - is_chuku = #{isChuku}, - is_borrowed = #{isBorrowed}, - bill_no_ck = #{billNoCk}, - ck_type = #{ckType}, - is_delivery = #{isDelivery}, - ck_lihuo_y = #{ckLihuoY}, - team_code = #{teamCode}, - ck_remark = #{ckRemark}, - xm_no_ck = #{xmNoCk}, - xm_ms_ck = #{xmMsCk}, - update_by = #{updateBy}, - update_time = #{updateTime}, - ly_time = #{lyTime}, - borrow_time = #{borrowTime}, - return_time = #{returnTime}, - pcode = #{pcode}, - cangku = #{cangku}, - status = #{status}, - real_qty = #{realQty}, - - WHERE id = #{id} - - - - UPDATE rk_info - - status = #{status}, - is_chuku = #{isChuku}, - update_by = #{updateBy}, - update_time = #{updateTime}, - - - - bill_no = #{billNo} - - - bill_no_ck = #{billNoCk} - - - - - - UPDATE rk_info - SET is_delete = #{isDelete}, - status = #{status}, - update_by = #{updateBy}, - update_time = #{updateTime} - WHERE bill_no = #{billNo} - AND status IN ('0', '2') - - - - UPDATE rk_info - SET is_delete = #{isDelete}, - status = #{status}, - update_by = #{updateBy}, - update_time = #{updateTime} - WHERE bill_no_ck = #{billNoCk} - AND status IN ('0', '2') - - - - UPDATE rk_info - SET status = #{status}, - is_chuku = #{isChuku}, - update_by = #{updateBy}, - update_time = #{updateTime} - WHERE bill_no_ck = #{billNoCk} - AND is_delete = '0' - AND bill_no IS NOT NULL - - - - - - - - - - - - - - - - - - - - UPDATE rk_info - - - rk_type = #{rkType}, - - - wl_type = #{wlType}, - - - - cangku = #{warehouseCode}, - - - - rk_time = #{rkTime}, - - - WHERE bill_no = #{billNo} - - - - UPDATE rk_info - SET is_delivery = #{isDelivery} - WHERE is_delete = '0' - AND id IN - - #{id} - - diff --git a/src/main/resources/mybatis/wisdom/RkRecordMapper.xml b/src/main/resources/mybatis/wisdom/RkRecordMapper.xml new file mode 100644 index 0000000..d35e9dd --- /dev/null +++ b/src/main/resources/mybatis/wisdom/RkRecordMapper.xml @@ -0,0 +1,443 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT + rr.*, + + /* 理货员姓名 */ + su.nick_name AS operator_name, + + /* 物资类型名称 */ + mt.type_name AS wl_type_name, + + /* 出入库类型名称:入库 / 出库 二选一 */ + COALESCE(sit.type_name, sot.type_name) AS operation_type_name, + + /* 仓库信息:小仓/大仓 */ + wh.warehouse_name, + wh.parent_warehouse_code, + wh.parent_warehouse_name + FROM rk_record rr + LEFT JOIN sys_user su + ON rr.operator = su.user_id + LEFT JOIN material_type mt + ON rr.wl_type = mt.type_code + LEFT JOIN stock_in_type sit + ON rr.operation_type = sit.type_code + LEFT JOIN stock_out_type sot + ON rr.operation_type = sot.type_code + LEFT JOIN warehouse_info wh + ON rr.cangku = wh.warehouse_code + + + + + + + + + + + + + + INSERT INTO rk_record ( + + + rk_info_id, + + operation_type, + biz_type, + wl_type, + cangku, + operation_time, + operator, + + is_chuku, + status, + exec_status, + remark, + bill_no, + + xj, + xm_no, + xm_ms, + xm_no_ck, + xm_ms_ck, + + wl_no, + wl_ms, + + gys_no, + gys_mc, + + jh_amt, + ht_dj, + sap_no, + xh, + + jh_qty, + ht_qty, + dw, + real_qty, + + pcode, + pcode_id, + tray_code, + entity_id, + team_code, + + borrow_time, + return_time, + has_moved, + is_borrowed, + + gys_jh_id, + rdid, + rdid_ck, + sid, + + is_delivery, + fycde_1, + fycde_2, + is_update, + + create_by, + create_time, + update_by, + update_time, + is_delete + ) + VALUES ( + + + #{rkInfoId}, + + #{operationType}, + #{bizType}, + #{wlType}, + #{cangku}, + #{operationTime}, + #{operator}, + + #{isChuku}, + #{status}, + #{execStatus}, + #{remark}, + #{billNo}, + + #{xj}, + #{xmNo}, + #{xmMs}, + #{xmNoCk}, + #{xmMsCk}, + + #{wlNo}, + #{wlMs}, + + #{gysNo}, + #{gysMc}, + + #{jhAmt}, + #{htDj}, + #{sapNo}, + #{xh}, + + #{jhQty}, + #{htQty}, + #{dw}, + #{realQty}, + + #{pcode}, + #{pcodeId}, + #{trayCode}, + #{entityId}, + #{teamCode}, + + #{borrowTime}, + #{returnTime}, + #{hasMoved}, + #{isBorrowed}, + + #{gysJhId}, + #{rdid}, + #{rdidCk}, + #{sid}, + + #{isDelivery}, + #{fycde1}, + #{fycde2}, + #{isUpdate}, + + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{isDelete} + ) + + + + + UPDATE rk_record + + + + rk_info_id = #{rkInfoId}, + + operation_type = #{operationType}, + biz_type = #{bizType}, + wl_type = #{wlType}, + cangku = #{cangku}, + operation_time = #{operationTime}, + operator = #{operator}, + + is_chuku = #{isChuku}, + status = #{status}, + exec_status = #{execStatus}, + remark = #{remark}, + bill_no = #{billNo}, + + xj = #{xj}, + xm_no = #{xmNo}, + xm_ms = #{xmMs}, + xm_no_ck = #{xmNoCk}, + xm_ms_ck = #{xmMsCk}, + + wl_no = #{wlNo}, + wl_ms = #{wlMs}, + + gys_no = #{gysNo}, + gys_mc = #{gysMc}, + + jh_amt = #{jhAmt}, + ht_dj = #{htDj}, + sap_no = #{sapNo}, + xh = #{xh}, + + jh_qty = #{jhQty}, + ht_qty = #{htQty}, + dw = #{dw}, + real_qty = #{realQty}, + + pcode = #{pcode}, + pcode_id = #{pcodeId}, + tray_code = #{trayCode}, + entity_id = #{entityId}, + team_code = #{teamCode}, + + borrow_time = #{borrowTime}, + return_time = #{returnTime}, + has_moved = #{hasMoved}, + is_borrowed = #{isBorrowed}, + + gys_jh_id = #{gysJhId}, + rdid = #{rdid}, + rdid_ck = #{rdidCk}, + sid = #{sid}, + + is_delivery = #{isDelivery}, + fycde_1 = #{fycde1}, + fycde_2 = #{fycde2}, + is_update = #{isUpdate}, + + update_by = #{updateBy}, + update_time = #{updateTime}, + is_delete = #{isDelete}, + + WHERE id = #{id} + + + + + DELETE FROM rk_record WHERE id = #{id} + + + + DELETE FROM rk_record WHERE id IN + + #{id} + + + +