From 6fb4762af9e4bda9ccebf9cc7d0482d4cd18c992 Mon Sep 17 00:00:00 2001 From: HashMap Date: Wed, 6 Aug 2025 17:06:48 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat(module):=20=E5=85=A5=E5=BA=93=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加入库管理模块,实现批量导入功能 --- .../WzMaterialsManagementController.java | 106 +++++++++++ .../stock/controller/WzStockInController.java | 124 ++++++++++++ .../controller/WzStockOutController.java | 106 +++++++++++ .../stock/domain/WzMaterialsManagement.java | 87 +++++++++ .../zhyc/module/stock/domain/WzStockIn.java | 142 ++++++++++++++ .../zhyc/module/stock/domain/WzStockOut.java | 179 ++++++++++++++++++ .../mapper/WzMaterialsManagementMapper.java | 63 ++++++ .../module/stock/mapper/WzStockInMapper.java | 70 +++++++ .../module/stock/mapper/WzStockOutMapper.java | 63 ++++++ .../IWzMaterialsManagementService.java | 61 ++++++ .../stock/service/IWzStockInService.java | 73 +++++++ .../stock/service/IWzStockOutService.java | 61 ++++++ .../WzMaterialsManagementServiceImpl.java | 96 ++++++++++ .../service/impl/WzStockInServiceImpl.java | 137 ++++++++++++++ .../service/impl/WzStockOutServiceImpl.java | 96 ++++++++++ .../stock/WzMaterialsManagementMapper.xml | 93 +++++++++ .../mapper/stock/WzStockInMapper.xml | 147 ++++++++++++++ .../mapper/stock/WzStockOutMapper.xml | 168 ++++++++++++++++ 18 files changed, 1872 insertions(+) create mode 100644 zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzMaterialsManagementController.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockInController.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockOutController.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzMaterialsManagement.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockIn.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockOut.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzMaterialsManagementMapper.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockInMapper.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockOutMapper.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzMaterialsManagementService.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockInService.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockOutService.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzMaterialsManagementServiceImpl.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockInServiceImpl.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockOutServiceImpl.java create mode 100644 zhyc-module/src/main/resources/mapper/stock/WzMaterialsManagementMapper.xml create mode 100644 zhyc-module/src/main/resources/mapper/stock/WzStockInMapper.xml create mode 100644 zhyc-module/src/main/resources/mapper/stock/WzStockOutMapper.xml diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzMaterialsManagementController.java b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzMaterialsManagementController.java new file mode 100644 index 0000000..db687da --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzMaterialsManagementController.java @@ -0,0 +1,106 @@ +package com.zhyc.module.stock.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; +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.zhyc.common.annotation.Log; +import com.zhyc.common.core.controller.BaseController; +import com.zhyc.common.core.domain.AjaxResult; +import com.zhyc.common.enums.BusinessType; +import com.zhyc.module.stock.domain.WzMaterialsManagement; +import com.zhyc.module.stock.service.IWzMaterialsManagementService; +import com.zhyc.common.utils.poi.ExcelUtil; +import com.zhyc.common.core.page.TableDataInfo; + +/** + * 物资管理Controller + * + * @author HashMap + * @date 2025-08-05 + */ +@RestController +@RequestMapping("/stock/management") +public class WzMaterialsManagementController extends BaseController +{ + private final IWzMaterialsManagementService wzMaterialsManagementService; + + public WzMaterialsManagementController(IWzMaterialsManagementService wzMaterialsManagementService) { + this.wzMaterialsManagementService = wzMaterialsManagementService; + } + + /** + * 查询物资管理列表 + */ + @PreAuthorize("@ss.hasPermi('stock:management:list')") + @GetMapping("/list") + public TableDataInfo list(WzMaterialsManagement wzMaterialsManagement) + { + startPage(); + List list = wzMaterialsManagementService.selectWzMaterialsManagementList(wzMaterialsManagement); + return getDataTable(list); + } + + /** + * 导出物资管理列表 + */ + @PreAuthorize("@ss.hasPermi('stock:management:export')") + @Log(title = "物资管理", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, WzMaterialsManagement wzMaterialsManagement) + { + List list = wzMaterialsManagementService.selectWzMaterialsManagementList(wzMaterialsManagement); + ExcelUtil util = new ExcelUtil<>(WzMaterialsManagement.class); + util.exportExcel(response, list, "物资管理数据"); + } + + /** + * 获取物资管理详细信息 + */ + @PreAuthorize("@ss.hasPermi('stock:management:query')") + @GetMapping(value = "/{materialManagementCode}") + public AjaxResult getInfo(@PathVariable("materialManagementCode") Long materialManagementCode) + { + return success(wzMaterialsManagementService.selectWzMaterialsManagementByMaterialManagementCode(materialManagementCode)); + } + + /** + * 新增物资管理 + */ + @PreAuthorize("@ss.hasPermi('stock:management:add')") + @Log(title = "物资管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody WzMaterialsManagement wzMaterialsManagement) + { + return toAjax(wzMaterialsManagementService.insertWzMaterialsManagement(wzMaterialsManagement)); + } + + /** + * 修改物资管理 + */ + @PreAuthorize("@ss.hasPermi('stock:management:edit')") + @Log(title = "物资管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody WzMaterialsManagement wzMaterialsManagement) + { + return toAjax(wzMaterialsManagementService.updateWzMaterialsManagement(wzMaterialsManagement)); + } + + /** + * 删除物资管理 + */ + @PreAuthorize("@ss.hasPermi('stock:management:remove')") + @Log(title = "物资管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{materialManagementCodes}") + public AjaxResult remove(@PathVariable Long[] materialManagementCodes) + { + return toAjax(wzMaterialsManagementService.deleteWzMaterialsManagementByMaterialManagementCodes(materialManagementCodes)); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockInController.java b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockInController.java new file mode 100644 index 0000000..b14aa86 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockInController.java @@ -0,0 +1,124 @@ +package com.zhyc.module.stock.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import com.zhyc.common.core.domain.entity.SysUser; +import com.zhyc.module.stock.service.impl.WzStockInServiceImpl; +import org.springframework.security.access.prepost.PreAuthorize; +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.zhyc.common.annotation.Log; +import com.zhyc.common.core.controller.BaseController; +import com.zhyc.common.core.domain.AjaxResult; +import com.zhyc.common.enums.BusinessType; +import com.zhyc.module.stock.domain.WzStockIn; +import com.zhyc.module.stock.service.IWzStockInService; +import com.zhyc.common.utils.poi.ExcelUtil; +import com.zhyc.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; + +/** + * 入库记录Controller + * + * @author HashMap + * @date 2025-08-05 + */ +@RestController +@RequestMapping("/stock/in") +public class WzStockInController extends BaseController +{ + private final IWzStockInService wzStockInService; + + public WzStockInController(IWzStockInService wzStockInService) { + this.wzStockInService = wzStockInService; + } + + /** + * 查询入库记录列表 + */ + @PreAuthorize("@ss.hasPermi('stock:in:list')") + @GetMapping("/list") + public TableDataInfo list(WzStockIn wzStockIn) + { + startPage(); + List list = wzStockInService.selectWzStockInList(wzStockIn); + return getDataTable(list); + } + + /** + * 导出入库记录列表 + */ + @PreAuthorize("@ss.hasPermi('stock:in:export')") + @Log(title = "入库记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, WzStockIn wzStockIn) + { + List list = wzStockInService.selectWzStockInList(wzStockIn); + ExcelUtil util = new ExcelUtil<>(WzStockIn.class); + util.exportExcel(response, list, "入库记录数据"); + } + + /** + * 获取入库记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('stock:in:query')") + @GetMapping(value = "/{stockInCode}") + public AjaxResult getInfo(@PathVariable("stockInCode") Long stockInCode) + { + return success(wzStockInService.selectWzStockInByStockInCode(stockInCode)); + } + + /** + * 新增入库记录 + */ + @PreAuthorize("@ss.hasPermi('stock:in:add')") + @Log(title = "入库记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody WzStockIn wzStockIn) + { + return toAjax(wzStockInService.insertWzStockIn(wzStockIn)); + } + + /** + * 修改入库记录 + */ + @PreAuthorize("@ss.hasPermi('stock:in:edit')") + @Log(title = "入库记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody WzStockIn wzStockIn) + { + return toAjax(wzStockInService.updateWzStockIn(wzStockIn)); + } + + /** + * 删除入库记录 + */ + @PreAuthorize("@ss.hasPermi('stock:in:remove')") + @Log(title = "入库记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{stockInCodes}") + public AjaxResult remove(@PathVariable Long[] stockInCodes) + { + return toAjax(wzStockInService.deleteWzStockInByStockInCodes(stockInCodes)); + } + + @Log(title = "用户管理", businessType = BusinessType.IMPORT) + @PreAuthorize("@ss.hasPermi('stock:in:import')") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception + { + ExcelUtil util = new ExcelUtil(WzStockIn.class); + List stockInList = util.importExcel(file.getInputStream()); + stockInList.removeIf(wzStockIn -> wzStockIn.getDocDate() == null); + String operName = getUsername(); + String message = wzStockInService.importUser(stockInList, updateSupport, operName); +// String message = "OK We are testing"; + return success(message); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockOutController.java b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockOutController.java new file mode 100644 index 0000000..f4b051d --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockOutController.java @@ -0,0 +1,106 @@ +package com.zhyc.module.stock.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; +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.zhyc.common.annotation.Log; +import com.zhyc.common.core.controller.BaseController; +import com.zhyc.common.core.domain.AjaxResult; +import com.zhyc.common.enums.BusinessType; +import com.zhyc.module.stock.domain.WzStockOut; +import com.zhyc.module.stock.service.IWzStockOutService; +import com.zhyc.common.utils.poi.ExcelUtil; +import com.zhyc.common.core.page.TableDataInfo; + +/** + * 出库记录Controller + * + * @author HashMap + * @date 2025-08-05 + */ +@RestController +@RequestMapping("/stock/out") +public class WzStockOutController extends BaseController +{ + private final IWzStockOutService wzStockOutService; + + public WzStockOutController(IWzStockOutService wzStockOutService) { + this.wzStockOutService = wzStockOutService; + } + + /** + * 查询出库记录列表 + */ + @PreAuthorize("@ss.hasPermi('stock:out:list')") + @GetMapping("/list") + public TableDataInfo list(WzStockOut wzStockOut) + { + startPage(); + List list = wzStockOutService.selectWzStockOutList(wzStockOut); + return getDataTable(list); + } + + /** + * 导出出库记录列表 + */ + @PreAuthorize("@ss.hasPermi('stock:out:export')") + @Log(title = "出库记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, WzStockOut wzStockOut) + { + List list = wzStockOutService.selectWzStockOutList(wzStockOut); + ExcelUtil util = new ExcelUtil<>(WzStockOut.class); + util.exportExcel(response, list, "出库记录数据"); + } + + /** + * 获取出库记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('stock:out:query')") + @GetMapping(value = "/{stockOutCode}") + public AjaxResult getInfo(@PathVariable("stockOutCode") Long stockOutCode) + { + return success(wzStockOutService.selectWzStockOutByStockOutCode(stockOutCode)); + } + + /** + * 新增出库记录 + */ + @PreAuthorize("@ss.hasPermi('stock:out:add')") + @Log(title = "出库记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody WzStockOut wzStockOut) + { + return toAjax(wzStockOutService.insertWzStockOut(wzStockOut)); + } + + /** + * 修改出库记录 + */ + @PreAuthorize("@ss.hasPermi('stock:out:edit')") + @Log(title = "出库记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody WzStockOut wzStockOut) + { + return toAjax(wzStockOutService.updateWzStockOut(wzStockOut)); + } + + /** + * 删除出库记录 + */ + @PreAuthorize("@ss.hasPermi('stock:out:remove')") + @Log(title = "出库记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{stockOutCodes}") + public AjaxResult remove(@PathVariable Long[] stockOutCodes) + { + return toAjax(wzStockOutService.deleteWzStockOutByStockOutCodes(stockOutCodes)); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzMaterialsManagement.java b/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzMaterialsManagement.java new file mode 100644 index 0000000..88d3a53 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzMaterialsManagement.java @@ -0,0 +1,87 @@ +package com.zhyc.module.stock.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.zhyc.common.annotation.Excel; +import com.zhyc.common.core.domain.BaseEntity; + +/** + * 物资管理对象 wz_materials_management + * + * @author HashMap + * @date 2025-08-05 + */ +@Setter +@Getter +public class WzMaterialsManagement extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 序号 */ + @Excel(name = "序号") + private Long materialManagementCode; + + /** 存货编码 */ + @Excel(name = "存货编码") + private String materialId; + + /** 存货 */ + @Excel(name = "存货") + private String materialName; + + /** 批号 */ + @Excel(name = "批号") + private String batchId; + + /** 规格型号 */ + @Excel(name = "规格型号") + private String materialSpecification; + + /** 主计量 */ + @Excel(name = "主计量") + private String materialUnit; + + /** 现存量(主) */ + @Excel(name = "现存量(主)") + private BigDecimal currentStock; + + /** 库存预警 */ + @Excel(name = "库存预警") + private String stockAlarm; + + /** 生产日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "生产日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date productionDate; + + /** 失效日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "失效日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date expirationDate; + + /** 失效预警 */ + @Excel(name = "失效预警") + private String expirationAlarm; + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("materialManagementCode", getMaterialManagementCode()) + .append("materialId", getMaterialId()) + .append("materialName", getMaterialName()) + .append("batchId", getBatchId()) + .append("materialSpecification", getMaterialSpecification()) + .append("materialUnit", getMaterialUnit()) + .append("currentStock", getCurrentStock()) + .append("stockAlarm", getStockAlarm()) + .append("productionDate", getProductionDate()) + .append("expirationDate", getExpirationDate()) + .append("expirationAlarm", getExpirationAlarm()) + .toString(); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockIn.java b/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockIn.java new file mode 100644 index 0000000..cda8b08 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockIn.java @@ -0,0 +1,142 @@ +package com.zhyc.module.stock.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.zhyc.common.annotation.Excel; +import com.zhyc.common.core.domain.BaseEntity; + +/** + * 入库记录对象 wz_stock_in + * + * @author HashMap + * @date 2025-08-05 + */ +@Setter +@Getter +public class WzStockIn extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 序号 */ + private Long stockInCode; + + /** 单据日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "单据日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date docDate; + + /** 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date createDate; + + /** 单据编号 */ + @Excel(name = "单据编号") + private String docId; + + /** 业务类型 */ + @Excel(name = "业务类型") + private String businessType; + + /** 仓库编码 */ + @Excel(name = "仓库编码") + private String repositoryId; + + /** 仓库 */ + @Excel(name = "仓库") + private String repositoryName; + + /** 入库类别 */ + @Excel(name = "入库类别") + private String stockInType; + + /** 供应商编码 */ + @Excel(name = "供应商编码") + private String supplierId; + + /** 供应商 */ + @Excel(name = "供应商") + private String supplierName; + + /** 部门编码 */ + @Excel(name = "部门编码") + private String departmentId; + + /** 部门 */ + @Excel(name = "部门") + private String departmentName; + + /** 经手人编码 */ + @Excel(name = "经手人编码") + private String operatorId; + + /** 经手人 */ + @Excel(name = "经手人") + private String operatorName; + + /** 制单人 */ + @Excel(name = "制单人") + private String single; + + /** 审核人 */ + @Excel(name = "审核人") + private String reviewer; + + /** 存货编码 */ + @Excel(name = "存货编码") + private String materialId; + + /** 存货 */ + @Excel(name = "存货") + private String materialName; + + /** 规格型号 */ + @Excel(name = "规格型号") + private String materialSpecification; + + /** 计量单位 */ + @Excel(name = "计量单位") + private String materialUnit; + + /** 实收数量 */ + @Excel(name = "实收数量") + private BigDecimal count; + + /** 入库调整 */ + @Excel(name = "入库调整") + private String stockInAdjustRemark; + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("stockInCode", getStockInCode()) + .append("docDate", getDocDate()) + .append("createDate", getCreateDate()) + .append("docId", getDocId()) + .append("businessType", getBusinessType()) + .append("repositoryId", getRepositoryId()) + .append("repositoryName", getRepositoryName()) + .append("stockInType", getStockInType()) + .append("supplierId", getSupplierId()) + .append("supplierName", getSupplierName()) + .append("departmentId", getDepartmentId()) + .append("departmentName", getDepartmentName()) + .append("operatorId", getOperatorId()) + .append("operatorName", getOperatorName()) + .append("remark", getRemark()) + .append("single", getSingle()) + .append("reviewer", getReviewer()) + .append("materialId", getMaterialId()) + .append("materialName", getMaterialName()) + .append("materialSpecification", getMaterialSpecification()) + .append("materialUnit", getMaterialUnit()) + .append("count", getCount()) + .append("stockInAdjustRemark", getStockInAdjustRemark()) + .toString(); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockOut.java b/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockOut.java new file mode 100644 index 0000000..24e5038 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockOut.java @@ -0,0 +1,179 @@ +package com.zhyc.module.stock.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.zhyc.common.annotation.Excel; +import com.zhyc.common.core.domain.BaseEntity; + +/** + * 出库记录对象 wz_stock_out + * + * @author HashMap + * @date 2025-08-05 + */ +@Getter +@Setter +public class WzStockOut extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 序号 */ + private Long stockOutCode; + + /** 单据日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "单据日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date docDate; + + /** 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date createDate; + + /** 单据编号 */ + @Excel(name = "单据编号") + private String docId; + + /** 业务类型 */ + @Excel(name = "业务类型") + private String businessType; + + /** 仓库编码 */ + @Excel(name = "仓库编码") + private String repositoryId; + + /** 仓库名称 */ + @Excel(name = "仓库名称") + private String repositoryName; + + /** 项目分类 */ + @Excel(name = "项目分类") + private String projectClassification; + + /** 项目编码 */ + @Excel(name = "项目编码") + private String projectId; + + /** 项目 */ + @Excel(name = "项目") + private String projectName; + + /** 生产车间编码 */ + @Excel(name = "生产车间编码") + private String departmentId; + + /** 生产车间 */ + @Excel(name = "生产车间") + private String departmentName; + + /** 领用人 */ + @Excel(name = "领用人") + private String receiver; + + /** 制单人 */ + @Excel(name = "制单人") + private String single; + + /** 审核人 */ + @Excel(name = "审核人") + private String reviewer; + + /** 审核时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date reviewDate; + + /** 修改人 */ + @Excel(name = "修改人") + private String modifier; + + /** 材料分类编码 */ + @Excel(name = "材料分类编码") + private String materialClassId; + + /** 材料分类 */ + @Excel(name = "材料分类") + private String materialClassName; + + /** 材料名称 */ + @Excel(name = "材料名称") + private String materialName; + + /** 材料规格 */ + @Excel(name = "材料规格") + private String materialSpecification; + + /** 计量单位 */ + @Excel(name = "计量单位") + private String materialUnit; + + /** 数量 */ + @Excel(name = "数量") + private BigDecimal count; + + /** 批号 */ + @Excel(name = "批号") + private Long batchId; + + /** 生产日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "生产日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date productionDate; + + /** 保质期 */ + @Excel(name = "保质期") + private Long shelfLife; + + /** 保质期单位 */ + @Excel(name = "保质期单位") + private String shelfLifeUnit; + + /** 失效日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "失效日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date expirationDate; + + /** 代理人 */ + @Excel(name = "代理人") + private String agent; + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("stockOutCode", getStockOutCode()) + .append("docDate", getDocDate()) + .append("createDate", getCreateDate()) + .append("docId", getDocId()) + .append("businessType", getBusinessType()) + .append("repositoryId", getRepositoryId()) + .append("repositoryName", getRepositoryName()) + .append("projectClassification", getProjectClassification()) + .append("projectId", getProjectId()) + .append("projectName", getProjectName()) + .append("departmentId", getDepartmentId()) + .append("departmentName", getDepartmentName()) + .append("receiver", getReceiver()) + .append("single", getSingle()) + .append("reviewer", getReviewer()) + .append("reviewDate", getReviewDate()) + .append("modifier", getModifier()) + .append("materialClassId", getMaterialClassId()) + .append("materialClassName", getMaterialClassName()) + .append("materialName", getMaterialName()) + .append("materialSpecification", getMaterialSpecification()) + .append("materialUnit", getMaterialUnit()) + .append("count", getCount()) + .append("batchId", getBatchId()) + .append("productionDate", getProductionDate()) + .append("shelfLife", getShelfLife()) + .append("shelfLifeUnit", getShelfLifeUnit()) + .append("expirationDate", getExpirationDate()) + .append("agent", getAgent()) + .toString(); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzMaterialsManagementMapper.java b/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzMaterialsManagementMapper.java new file mode 100644 index 0000000..26bc020 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzMaterialsManagementMapper.java @@ -0,0 +1,63 @@ +package com.zhyc.module.stock.mapper; + +import java.util.List; +import com.zhyc.module.stock.domain.WzMaterialsManagement; +import org.apache.ibatis.annotations.Mapper; + +/** + * 物资管理Mapper接口 + * + * @author HashMap + * @date 2025-08-05 + */ +@Mapper +public interface WzMaterialsManagementMapper +{ + /** + * 查询物资管理 + * + * @param materialManagementCode 物资管理主键 + * @return 物资管理 + */ + WzMaterialsManagement selectWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode); + + /** + * 查询物资管理列表 + * + * @param wzMaterialsManagement 物资管理 + * @return 物资管理集合 + */ + List selectWzMaterialsManagementList(WzMaterialsManagement wzMaterialsManagement); + + /** + * 新增物资管理 + * + * @param wzMaterialsManagement 物资管理 + * @return 结果 + */ + int insertWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement); + + /** + * 修改物资管理 + * + * @param wzMaterialsManagement 物资管理 + * @return 结果 + */ + int updateWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement); + + /** + * 删除物资管理 + * + * @param materialManagementCode 物资管理主键 + * @return 结果 + */ + int deleteWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode); + + /** + * 批量删除物资管理 + * + * @param materialManagementCodes 需要删除的数据主键集合 + * @return 结果 + */ + int deleteWzMaterialsManagementByMaterialManagementCodes(Long[] materialManagementCodes); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockInMapper.java b/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockInMapper.java new file mode 100644 index 0000000..ed2fda8 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockInMapper.java @@ -0,0 +1,70 @@ +package com.zhyc.module.stock.mapper; + +import java.util.List; +import com.zhyc.module.stock.domain.WzStockIn; +import org.apache.ibatis.annotations.Mapper; + +/** + * 入库记录Mapper接口 + * + * @author HashMap + * @date 2025-08-05 + */ +@Mapper +public interface WzStockInMapper +{ + /** + * 查询入库记录 + * + * @param stockInCode 入库记录主键 + * @return 入库记录 + */ + WzStockIn selectWzStockInByStockInCode(Long stockInCode); + + /** + * 查询入库记录列表 + * + * @param wzStockIn 入库记录 + * @return 入库记录集合 + */ + List selectWzStockInList(WzStockIn wzStockIn); + + /** + * 新增入库记录 + * + * @param wzStockIn 入库记录 + * @return 结果 + */ + int insertWzStockIn(WzStockIn wzStockIn); + + /** + * 修改入库记录 + * + * @param wzStockIn 入库记录 + * @return 结果 + */ + int updateWzStockIn(WzStockIn wzStockIn); + + /** + * 删除入库记录 + * + * @param stockInCode 入库记录主键 + * @return 结果 + */ + int deleteWzStockInByStockInCode(Long stockInCode); + + /** + * 批量删除入库记录 + * + * @param stockInCodes 需要删除的数据主键集合 + * @return 结果 + */ + int deleteWzStockInByStockInCodes(Long[] stockInCodes); + + /** + * 查询最近的入库记录 + * + * @return 数据库中最近的入库记录 + */ + WzStockIn getEarliestStockIn(); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockOutMapper.java b/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockOutMapper.java new file mode 100644 index 0000000..791793a --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockOutMapper.java @@ -0,0 +1,63 @@ +package com.zhyc.module.stock.mapper; + +import java.util.List; +import com.zhyc.module.stock.domain.WzStockOut; +import org.apache.ibatis.annotations.Mapper; + +/** + * 出库记录Mapper接口 + * + * @author HashMap + * @date 2025-08-05 + */ +@Mapper +public interface WzStockOutMapper +{ + /** + * 查询出库记录 + * + * @param stockOutCode 出库记录主键 + * @return 出库记录 + */ + WzStockOut selectWzStockOutByStockOutCode(Long stockOutCode); + + /** + * 查询出库记录列表 + * + * @param wzStockOut 出库记录 + * @return 出库记录集合 + */ + List selectWzStockOutList(WzStockOut wzStockOut); + + /** + * 新增出库记录 + * + * @param wzStockOut 出库记录 + * @return 结果 + */ + int insertWzStockOut(WzStockOut wzStockOut); + + /** + * 修改出库记录 + * + * @param wzStockOut 出库记录 + * @return 结果 + */ + int updateWzStockOut(WzStockOut wzStockOut); + + /** + * 删除出库记录 + * + * @param stockOutCode 出库记录主键 + * @return 结果 + */ + int deleteWzStockOutByStockOutCode(Long stockOutCode); + + /** + * 批量删除出库记录 + * + * @param stockOutCodes 需要删除的数据主键集合 + * @return 结果 + */ + int deleteWzStockOutByStockOutCodes(Long[] stockOutCodes); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzMaterialsManagementService.java b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzMaterialsManagementService.java new file mode 100644 index 0000000..c41114f --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzMaterialsManagementService.java @@ -0,0 +1,61 @@ +package com.zhyc.module.stock.service; + +import java.util.List; +import com.zhyc.module.stock.domain.WzMaterialsManagement; + +/** + * 物资管理Service接口 + * + * @author HashMap + * @date 2025-08-05 + */ +public interface IWzMaterialsManagementService +{ + /** + * 查询物资管理 + * + * @param materialManagementCode 物资管理主键 + * @return 物资管理 + */ + WzMaterialsManagement selectWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode); + + /** + * 查询物资管理列表 + * + * @param wzMaterialsManagement 物资管理 + * @return 物资管理集合 + */ + List selectWzMaterialsManagementList(WzMaterialsManagement wzMaterialsManagement); + + /** + * 新增物资管理 + * + * @param wzMaterialsManagement 物资管理 + * @return 结果 + */ + int insertWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement); + + /** + * 修改物资管理 + * + * @param wzMaterialsManagement 物资管理 + * @return 结果 + */ + int updateWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement); + + /** + * 批量删除物资管理 + * + * @param materialManagementCodes 需要删除的物资管理主键集合 + * @return 结果 + */ + int deleteWzMaterialsManagementByMaterialManagementCodes(Long[] materialManagementCodes); + + /** + * 删除物资管理信息 + * + * @param materialManagementCode 物资管理主键 + * @return 结果 + */ + int deleteWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockInService.java b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockInService.java new file mode 100644 index 0000000..1db71f9 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockInService.java @@ -0,0 +1,73 @@ +package com.zhyc.module.stock.service; + +import java.util.List; + +import com.zhyc.common.core.domain.entity.SysUser; +import com.zhyc.module.stock.domain.WzStockIn; + +/** + * 入库记录Service接口 + * + * @author HashMap + * @date 2025-08-05 + */ +public interface IWzStockInService +{ + /** + * 查询入库记录 + * + * @param stockInCode 入库记录主键 + * @return 入库记录 + */ + WzStockIn selectWzStockInByStockInCode(Long stockInCode); + + /** + * 查询入库记录列表 + * + * @param wzStockIn 入库记录 + * @return 入库记录集合 + */ + List selectWzStockInList(WzStockIn wzStockIn); + + /** + * 新增入库记录 + * + * @param wzStockIn 入库记录 + * @return 结果 + */ + int insertWzStockIn(WzStockIn wzStockIn); + + /** + * 修改入库记录 + * + * @param wzStockIn 入库记录 + * @return 结果 + */ + int updateWzStockIn(WzStockIn wzStockIn); + + /** + * 批量删除入库记录 + * + * @param stockInCodes 需要删除的入库记录主键集合 + * @return 结果 + */ + int deleteWzStockInByStockInCodes(Long[] stockInCodes); + + /** + * 删除入库记录信息 + * + * @param stockInCode 入库记录主键 + * @return 结果 + */ + int deleteWzStockInByStockInCode(Long stockInCode); + + /** + * 导入入库数据 + * + * @param StockInList 入库数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + public String importUser(List StockInList, Boolean isUpdateSupport, String operName); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockOutService.java b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockOutService.java new file mode 100644 index 0000000..4dc8c35 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockOutService.java @@ -0,0 +1,61 @@ +package com.zhyc.module.stock.service; + +import java.util.List; +import com.zhyc.module.stock.domain.WzStockOut; + +/** + * 出库记录Service接口 + * + * @author HashMap + * @date 2025-08-05 + */ +public interface IWzStockOutService +{ + /** + * 查询出库记录 + * + * @param stockOutCode 出库记录主键 + * @return 出库记录 + */ + WzStockOut selectWzStockOutByStockOutCode(Long stockOutCode); + + /** + * 查询出库记录列表 + * + * @param wzStockOut 出库记录 + * @return 出库记录集合 + */ + List selectWzStockOutList(WzStockOut wzStockOut); + + /** + * 新增出库记录 + * + * @param wzStockOut 出库记录 + * @return 结果 + */ + int insertWzStockOut(WzStockOut wzStockOut); + + /** + * 修改出库记录 + * + * @param wzStockOut 出库记录 + * @return 结果 + */ + int updateWzStockOut(WzStockOut wzStockOut); + + /** + * 批量删除出库记录 + * + * @param stockOutCodes 需要删除的出库记录主键集合 + * @return 结果 + */ + int deleteWzStockOutByStockOutCodes(Long[] stockOutCodes); + + /** + * 删除出库记录信息 + * + * @param stockOutCode 出库记录主键 + * @return 结果 + */ + int deleteWzStockOutByStockOutCode(Long stockOutCode); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzMaterialsManagementServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzMaterialsManagementServiceImpl.java new file mode 100644 index 0000000..e04415f --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzMaterialsManagementServiceImpl.java @@ -0,0 +1,96 @@ +package com.zhyc.module.stock.service.impl; + +import java.util.List; + +import org.springframework.stereotype.Service; +import com.zhyc.module.stock.mapper.WzMaterialsManagementMapper; +import com.zhyc.module.stock.domain.WzMaterialsManagement; +import com.zhyc.module.stock.service.IWzMaterialsManagementService; + +/** + * 物资管理Service业务层处理 + * + * @author HashMap + * @date 2025-08-05 + */ +@Service +public class WzMaterialsManagementServiceImpl implements IWzMaterialsManagementService +{ + private final WzMaterialsManagementMapper wzMaterialsManagementMapper; + + public WzMaterialsManagementServiceImpl(WzMaterialsManagementMapper wzMaterialsManagementMapper) { + this.wzMaterialsManagementMapper = wzMaterialsManagementMapper; + } + + /** + * 查询物资管理 + * + * @param materialManagementCode 物资管理主键 + * @return 物资管理 + */ + @Override + public WzMaterialsManagement selectWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode) + { + return wzMaterialsManagementMapper.selectWzMaterialsManagementByMaterialManagementCode(materialManagementCode); + } + + /** + * 查询物资管理列表 + * + * @param wzMaterialsManagement 物资管理 + * @return 物资管理 + */ + @Override + public List selectWzMaterialsManagementList(WzMaterialsManagement wzMaterialsManagement) + { + return wzMaterialsManagementMapper.selectWzMaterialsManagementList(wzMaterialsManagement); + } + + /** + * 新增物资管理 + * + * @param wzMaterialsManagement 物资管理 + * @return 结果 + */ + @Override + public int insertWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement) + { + return wzMaterialsManagementMapper.insertWzMaterialsManagement(wzMaterialsManagement); + } + + /** + * 修改物资管理 + * + * @param wzMaterialsManagement 物资管理 + * @return 结果 + */ + @Override + public int updateWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement) + { + return wzMaterialsManagementMapper.updateWzMaterialsManagement(wzMaterialsManagement); + } + + /** + * 批量删除物资管理 + * + * @param materialManagementCodes 需要删除的物资管理主键 + * @return 结果 + */ + @Override + public int deleteWzMaterialsManagementByMaterialManagementCodes(Long[] materialManagementCodes) + { + return wzMaterialsManagementMapper.deleteWzMaterialsManagementByMaterialManagementCodes(materialManagementCodes); + } + + /** + * 删除物资管理信息 + * + * @param materialManagementCode 物资管理主键 + * @return 结果 + */ + @Override + public int deleteWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode) + { + return wzMaterialsManagementMapper.deleteWzMaterialsManagementByMaterialManagementCode(materialManagementCode); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockInServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockInServiceImpl.java new file mode 100644 index 0000000..7632654 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockInServiceImpl.java @@ -0,0 +1,137 @@ +package com.zhyc.module.stock.service.impl; + +import java.util.List; + +import com.zhyc.common.exception.ServiceException; +import com.zhyc.common.utils.StringUtils; +import org.springframework.stereotype.Service; +import com.zhyc.module.stock.mapper.WzStockInMapper; +import com.zhyc.module.stock.domain.WzStockIn; +import com.zhyc.module.stock.service.IWzStockInService; +import org.springframework.transaction.annotation.Transactional; + +/** + * 入库记录Service业务层处理 + * + * @author HashMap + * @date 2025-08-05 + */ +@Service +public class WzStockInServiceImpl implements IWzStockInService { + private final WzStockInMapper wzStockInMapper; + + public WzStockInServiceImpl(WzStockInMapper wzStockInMapper) { + this.wzStockInMapper = wzStockInMapper; + } + + /** + * 查询入库记录 + * + * @param stockInCode 入库记录主键 + * @return 入库记录 + */ + @Override + public WzStockIn selectWzStockInByStockInCode(Long stockInCode) { + return wzStockInMapper.selectWzStockInByStockInCode(stockInCode); + } + + /** + * 查询入库记录列表 + * + * @param wzStockIn 入库记录 + * @return 入库记录 + */ + @Override + public List selectWzStockInList(WzStockIn wzStockIn) { + return wzStockInMapper.selectWzStockInList(wzStockIn); + } + + /** + * 新增入库记录 + * + * @param wzStockIn 入库记录 + * @return 结果 + */ + @Override + public int insertWzStockIn(WzStockIn wzStockIn) { + return wzStockInMapper.insertWzStockIn(wzStockIn); + } + + /** + * 修改入库记录 + * + * @param wzStockIn 入库记录 + * @return 结果 + */ + @Override + public int updateWzStockIn(WzStockIn wzStockIn) { + return wzStockInMapper.updateWzStockIn(wzStockIn); + } + + /** + * 批量删除入库记录 + * + * @param stockInCodes 需要删除的入库记录主键 + * @return 结果 + */ + @Override + public int deleteWzStockInByStockInCodes(Long[] stockInCodes) { + return wzStockInMapper.deleteWzStockInByStockInCodes(stockInCodes); + } + + /** + * 删除入库记录信息 + * + * @param stockInCode 入库记录主键 + * @return 结果 + */ + @Override + public int deleteWzStockInByStockInCode(Long stockInCode) { + return wzStockInMapper.deleteWzStockInByStockInCode(stockInCode); + } + + /** + * 导入用户数据 + * + * @param StockInList 用户数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public String importUser(List StockInList, Boolean isUpdateSupport, String operName) { + if (StringUtils.isNull(StockInList) || StockInList.isEmpty()) { + throw new ServiceException("导入用户数据不能为空!"); + } + int successNum = 0; + int failureNum = 0; + int sameNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + try { + WzStockIn earliestStockIn = wzStockInMapper.getEarliestStockIn(); + System.out.println(earliestStockIn); + for (WzStockIn wzStockIn : StockInList) { + if (earliestStockIn.getDocDate().getTime() >= wzStockIn.getDocDate().getTime()) { + sameNum++; + continue; + } + int result = wzStockInMapper.insertWzStockIn(wzStockIn); + if (result == 0) { + failureNum++; + failureMsg.append("失败的项:").append(wzStockIn.getDocId()).append("\n"); + } + else successNum++; + } + + } catch (Exception e) { + failureNum++; + } + if (failureNum > 0) { + return failureMsg.toString(); + } + successMsg.append("导入完成 : 导入 ").append(successNum).append(" 条\n跳过 ").append(sameNum).append(" 条(重复记录)"); + return successMsg.toString(); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockOutServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockOutServiceImpl.java new file mode 100644 index 0000000..d023e10 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockOutServiceImpl.java @@ -0,0 +1,96 @@ +package com.zhyc.module.stock.service.impl; + +import java.util.List; + +import org.springframework.stereotype.Service; +import com.zhyc.module.stock.mapper.WzStockOutMapper; +import com.zhyc.module.stock.domain.WzStockOut; +import com.zhyc.module.stock.service.IWzStockOutService; + +/** + * 出库记录Service业务层处理 + * + * @author HashMap + * @date 2025-08-05 + */ +@Service +public class WzStockOutServiceImpl implements IWzStockOutService +{ + private final WzStockOutMapper wzStockOutMapper; + + public WzStockOutServiceImpl(WzStockOutMapper wzStockOutMapper) { + this.wzStockOutMapper = wzStockOutMapper; + } + + /** + * 查询出库记录 + * + * @param stockOutCode 出库记录主键 + * @return 出库记录 + */ + @Override + public WzStockOut selectWzStockOutByStockOutCode(Long stockOutCode) + { + return wzStockOutMapper.selectWzStockOutByStockOutCode(stockOutCode); + } + + /** + * 查询出库记录列表 + * + * @param wzStockOut 出库记录 + * @return 出库记录 + */ + @Override + public List selectWzStockOutList(WzStockOut wzStockOut) + { + return wzStockOutMapper.selectWzStockOutList(wzStockOut); + } + + /** + * 新增出库记录 + * + * @param wzStockOut 出库记录 + * @return 结果 + */ + @Override + public int insertWzStockOut(WzStockOut wzStockOut) + { + return wzStockOutMapper.insertWzStockOut(wzStockOut); + } + + /** + * 修改出库记录 + * + * @param wzStockOut 出库记录 + * @return 结果 + */ + @Override + public int updateWzStockOut(WzStockOut wzStockOut) + { + return wzStockOutMapper.updateWzStockOut(wzStockOut); + } + + /** + * 批量删除出库记录 + * + * @param stockOutCodes 需要删除的出库记录主键 + * @return 结果 + */ + @Override + public int deleteWzStockOutByStockOutCodes(Long[] stockOutCodes) + { + return wzStockOutMapper.deleteWzStockOutByStockOutCodes(stockOutCodes); + } + + /** + * 删除出库记录信息 + * + * @param stockOutCode 出库记录主键 + * @return 结果 + */ + @Override + public int deleteWzStockOutByStockOutCode(Long stockOutCode) + { + return wzStockOutMapper.deleteWzStockOutByStockOutCode(stockOutCode); + } +} diff --git a/zhyc-module/src/main/resources/mapper/stock/WzMaterialsManagementMapper.xml b/zhyc-module/src/main/resources/mapper/stock/WzMaterialsManagementMapper.xml new file mode 100644 index 0000000..f555332 --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/stock/WzMaterialsManagementMapper.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + select material_management_code, material_id, material_name, batch_id, material_specification, material_unit, current_stock, stock_alarm, production_date, expiration_date, expiration_alarm from wz_materials_management + + + + + + + + insert into wz_materials_management + + material_id, + material_name, + batch_id, + material_specification, + material_unit, + current_stock, + stock_alarm, + production_date, + expiration_date, + expiration_alarm, + + + #{materialId}, + #{materialName}, + #{batchId}, + #{materialSpecification}, + #{materialUnit}, + #{currentStock}, + #{stockAlarm}, + #{productionDate}, + #{expirationDate}, + #{expirationAlarm}, + + + + + update wz_materials_management + + material_id = #{materialId}, + material_name = #{materialName}, + batch_id = #{batchId}, + material_specification = #{materialSpecification}, + material_unit = #{materialUnit}, + current_stock = #{currentStock}, + stock_alarm = #{stockAlarm}, + production_date = #{productionDate}, + expiration_date = #{expirationDate}, + expiration_alarm = #{expirationAlarm}, + + where material_management_code = #{materialManagementCode} + + + + delete from wz_materials_management where material_management_code = #{materialManagementCode} + + + + delete from wz_materials_management where material_management_code in + + #{materialManagementCode} + + + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/stock/WzStockInMapper.xml b/zhyc-module/src/main/resources/mapper/stock/WzStockInMapper.xml new file mode 100644 index 0000000..55c5c1e --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/stock/WzStockInMapper.xml @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select stock_in_code, doc_date, create_date, doc_id, business_type, repository_id, repository_name, stock_in_type, supplier_id, supplier_name, department_id, department_name, operator_id, operator_name, remark, single, reviewer, material_id, material_name, material_specification, material_unit, count, stock_in_adjust_remark from wz_stock_in + + + + + + + + insert into wz_stock_in + + doc_date, + create_date, + doc_id, + business_type, + repository_id, + repository_name, + stock_in_type, + supplier_id, + supplier_name, + department_id, + department_name, + operator_id, + operator_name, + remark, + single, + reviewer, + material_id, + material_name, + material_specification, + material_unit, + count, + stock_in_adjust_remark, + + + #{docDate}, + #{createDate}, + #{docId}, + #{businessType}, + #{repositoryId}, + #{repositoryName}, + #{stockInType}, + #{supplierId}, + #{supplierName}, + #{departmentId}, + #{departmentName}, + #{operatorId}, + #{operatorName}, + #{remark}, + #{single}, + #{reviewer}, + #{materialId}, + #{materialName}, + #{materialSpecification}, + #{materialUnit}, + #{count}, + #{stockInAdjustRemark}, + + + + + update wz_stock_in + + doc_date = #{docDate}, + create_date = #{createDate}, + doc_id = #{docId}, + business_type = #{businessType}, + repository_id = #{repositoryId}, + repository_name = #{repositoryName}, + stock_in_type = #{stockInType}, + supplier_id = #{supplierId}, + supplier_name = #{supplierName}, + department_id = #{departmentId}, + department_name = #{departmentName}, + operator_id = #{operatorId}, + operator_name = #{operatorName}, + remark = #{remark}, + single = #{single}, + reviewer = #{reviewer}, + material_id = #{materialId}, + material_name = #{materialName}, + material_specification = #{materialSpecification}, + material_unit = #{materialUnit}, + count = #{count}, + stock_in_adjust_remark = #{stockInAdjustRemark}, + + where stock_in_code = #{stockInCode} + + + + delete from wz_stock_in where stock_in_code = #{stockInCode} + + + + delete from wz_stock_in where stock_in_code in + + #{stockInCode} + + + + + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/stock/WzStockOutMapper.xml b/zhyc-module/src/main/resources/mapper/stock/WzStockOutMapper.xml new file mode 100644 index 0000000..216dc4c --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/stock/WzStockOutMapper.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select stock_out_code, doc_date, create_date, doc_id, business_type, repository_id, repository_name, project_classification, project_id, project_name, department_id, department_name, receiver, single, reviewer, review_date, modifier, material_class_id, material_class_name, material_name, material_specification, material_unit, count, batch_id, production_date, shelf_life, shelf_life_unit, expiration_date, agent from wz_stock_out + + + + + + + + insert into wz_stock_out + + doc_date, + create_date, + doc_id, + business_type, + repository_id, + repository_name, + project_classification, + project_id, + project_name, + department_id, + department_name, + receiver, + single, + reviewer, + review_date, + modifier, + material_class_id, + material_class_name, + material_name, + material_specification, + material_unit, + count, + batch_id, + production_date, + shelf_life, + shelf_life_unit, + expiration_date, + agent, + + + #{docDate}, + #{createDate}, + #{docId}, + #{businessType}, + #{repositoryId}, + #{repositoryName}, + #{projectClassification}, + #{projectId}, + #{projectName}, + #{departmentId}, + #{departmentName}, + #{receiver}, + #{single}, + #{reviewer}, + #{reviewDate}, + #{modifier}, + #{materialClassId}, + #{materialClassName}, + #{materialName}, + #{materialSpecification}, + #{materialUnit}, + #{count}, + #{batchId}, + #{productionDate}, + #{shelfLife}, + #{shelfLifeUnit}, + #{expirationDate}, + #{agent}, + + + + + update wz_stock_out + + doc_date = #{docDate}, + create_date = #{createDate}, + doc_id = #{docId}, + business_type = #{businessType}, + repository_id = #{repositoryId}, + repository_name = #{repositoryName}, + project_classification = #{projectClassification}, + project_id = #{projectId}, + project_name = #{projectName}, + department_id = #{departmentId}, + department_name = #{departmentName}, + receiver = #{receiver}, + single = #{single}, + reviewer = #{reviewer}, + review_date = #{reviewDate}, + modifier = #{modifier}, + material_class_id = #{materialClassId}, + material_class_name = #{materialClassName}, + material_name = #{materialName}, + material_specification = #{materialSpecification}, + material_unit = #{materialUnit}, + count = #{count}, + batch_id = #{batchId}, + production_date = #{productionDate}, + shelf_life = #{shelfLife}, + shelf_life_unit = #{shelfLifeUnit}, + expiration_date = #{expirationDate}, + agent = #{agent}, + + where stock_out_code = #{stockOutCode} + + + + delete from wz_stock_out where stock_out_code = #{stockOutCode} + + + + delete from wz_stock_out where stock_out_code in + + #{stockOutCode} + + + \ No newline at end of file From a473018c48d2a72af9c9b216baff7a4d386f72cf Mon Sep 17 00:00:00 2001 From: HashMap Date: Wed, 6 Aug 2025 18:11:35 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat(module):=20=E7=89=A9=E8=B5=84=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加物资管理 实现Excel批量导入 --- .../WzMaterialsManagementController.java | 42 ++++++---- .../stock/controller/WzStockInController.java | 4 +- .../mapper/WzMaterialsManagementMapper.java | 8 ++ .../IWzMaterialsManagementService.java | 10 +++ .../stock/service/IWzStockInService.java | 3 +- .../WzMaterialsManagementServiceImpl.java | 78 ++++++++++++++----- .../stock/WzMaterialsManagementMapper.xml | 6 +- 7 files changed, 108 insertions(+), 43 deletions(-) diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzMaterialsManagementController.java b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzMaterialsManagementController.java index db687da..e1b567e 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzMaterialsManagementController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzMaterialsManagementController.java @@ -2,6 +2,7 @@ package com.zhyc.module.stock.controller; import java.util.List; import javax.servlet.http.HttpServletResponse; + import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -19,17 +20,17 @@ import com.zhyc.module.stock.domain.WzMaterialsManagement; import com.zhyc.module.stock.service.IWzMaterialsManagementService; import com.zhyc.common.utils.poi.ExcelUtil; import com.zhyc.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; /** * 物资管理Controller - * + * * @author HashMap * @date 2025-08-05 */ @RestController @RequestMapping("/stock/management") -public class WzMaterialsManagementController extends BaseController -{ +public class WzMaterialsManagementController extends BaseController { private final IWzMaterialsManagementService wzMaterialsManagementService; public WzMaterialsManagementController(IWzMaterialsManagementService wzMaterialsManagementService) { @@ -41,8 +42,7 @@ public class WzMaterialsManagementController extends BaseController */ @PreAuthorize("@ss.hasPermi('stock:management:list')") @GetMapping("/list") - public TableDataInfo list(WzMaterialsManagement wzMaterialsManagement) - { + public TableDataInfo list(WzMaterialsManagement wzMaterialsManagement) { startPage(); List list = wzMaterialsManagementService.selectWzMaterialsManagementList(wzMaterialsManagement); return getDataTable(list); @@ -54,8 +54,7 @@ public class WzMaterialsManagementController extends BaseController @PreAuthorize("@ss.hasPermi('stock:management:export')") @Log(title = "物资管理", businessType = BusinessType.EXPORT) @PostMapping("/export") - public void export(HttpServletResponse response, WzMaterialsManagement wzMaterialsManagement) - { + public void export(HttpServletResponse response, WzMaterialsManagement wzMaterialsManagement) { List list = wzMaterialsManagementService.selectWzMaterialsManagementList(wzMaterialsManagement); ExcelUtil util = new ExcelUtil<>(WzMaterialsManagement.class); util.exportExcel(response, list, "物资管理数据"); @@ -66,8 +65,7 @@ public class WzMaterialsManagementController extends BaseController */ @PreAuthorize("@ss.hasPermi('stock:management:query')") @GetMapping(value = "/{materialManagementCode}") - public AjaxResult getInfo(@PathVariable("materialManagementCode") Long materialManagementCode) - { + public AjaxResult getInfo(@PathVariable("materialManagementCode") Long materialManagementCode) { return success(wzMaterialsManagementService.selectWzMaterialsManagementByMaterialManagementCode(materialManagementCode)); } @@ -77,8 +75,7 @@ public class WzMaterialsManagementController extends BaseController @PreAuthorize("@ss.hasPermi('stock:management:add')") @Log(title = "物资管理", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@RequestBody WzMaterialsManagement wzMaterialsManagement) - { + public AjaxResult add(@RequestBody WzMaterialsManagement wzMaterialsManagement) { return toAjax(wzMaterialsManagementService.insertWzMaterialsManagement(wzMaterialsManagement)); } @@ -88,8 +85,7 @@ public class WzMaterialsManagementController extends BaseController @PreAuthorize("@ss.hasPermi('stock:management:edit')") @Log(title = "物资管理", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@RequestBody WzMaterialsManagement wzMaterialsManagement) - { + public AjaxResult edit(@RequestBody WzMaterialsManagement wzMaterialsManagement) { return toAjax(wzMaterialsManagementService.updateWzMaterialsManagement(wzMaterialsManagement)); } @@ -98,9 +94,23 @@ public class WzMaterialsManagementController extends BaseController */ @PreAuthorize("@ss.hasPermi('stock:management:remove')") @Log(title = "物资管理", businessType = BusinessType.DELETE) - @DeleteMapping("/{materialManagementCodes}") - public AjaxResult remove(@PathVariable Long[] materialManagementCodes) - { + @DeleteMapping("/{materialManagementCodes}") + public AjaxResult remove(@PathVariable Long[] materialManagementCodes) { return toAjax(wzMaterialsManagementService.deleteWzMaterialsManagementByMaterialManagementCodes(materialManagementCodes)); } + + @Log(title = "物资管理", businessType = BusinessType.IMPORT) + @PreAuthorize("@ss.hasPermi('stock:management:import')") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception { + ExcelUtil util = new ExcelUtil<>(WzMaterialsManagement.class); + List stockInList = util.importExcel(file.getInputStream()); + for (WzMaterialsManagement wzMaterialsManagement : stockInList) { + System.out.println(wzMaterialsManagement); + } + String operName = getUsername(); + String message = wzMaterialsManagementService.importUser(stockInList, updateSupport, operName); + // String message = "OK We are testing"; + return success(message); + } } diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockInController.java b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockInController.java index b14aa86..6705202 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockInController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockInController.java @@ -3,8 +3,6 @@ package com.zhyc.module.stock.controller; import java.util.List; import javax.servlet.http.HttpServletResponse; -import com.zhyc.common.core.domain.entity.SysUser; -import com.zhyc.module.stock.service.impl.WzStockInServiceImpl; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -113,7 +111,7 @@ public class WzStockInController extends BaseController @PostMapping("/importData") public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception { - ExcelUtil util = new ExcelUtil(WzStockIn.class); + ExcelUtil util = new ExcelUtil<>(WzStockIn.class); List stockInList = util.importExcel(file.getInputStream()); stockInList.removeIf(wzStockIn -> wzStockIn.getDocDate() == null); String operName = getUsername(); diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzMaterialsManagementMapper.java b/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzMaterialsManagementMapper.java index 26bc020..a1c75a9 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzMaterialsManagementMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzMaterialsManagementMapper.java @@ -60,4 +60,12 @@ public interface WzMaterialsManagementMapper * @return 结果 */ int deleteWzMaterialsManagementByMaterialManagementCodes(Long[] materialManagementCodes); + + /** + * 以物资编码获取记录 + * + * @param materialID 物资编码 + * @return 结果 + */ + WzMaterialsManagement selectWzMaterialsManagementByMaterialID(String materialID); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzMaterialsManagementService.java b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzMaterialsManagementService.java index c41114f..46e71dc 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzMaterialsManagementService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzMaterialsManagementService.java @@ -58,4 +58,14 @@ public interface IWzMaterialsManagementService * @return 结果 */ int deleteWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode); + + /** + * 导入入库数据 + * + * @param MaterialsManagementList 物资数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + String importUser(List MaterialsManagementList, Boolean isUpdateSupport, String operName); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockInService.java b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockInService.java index 1db71f9..8d986a0 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockInService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockInService.java @@ -2,7 +2,6 @@ package com.zhyc.module.stock.service; import java.util.List; -import com.zhyc.common.core.domain.entity.SysUser; import com.zhyc.module.stock.domain.WzStockIn; /** @@ -69,5 +68,5 @@ public interface IWzStockInService * @param operName 操作用户 * @return 结果 */ - public String importUser(List StockInList, Boolean isUpdateSupport, String operName); + String importUser(List StockInList, Boolean isUpdateSupport, String operName); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzMaterialsManagementServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzMaterialsManagementServiceImpl.java index e04415f..ab6d272 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzMaterialsManagementServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzMaterialsManagementServiceImpl.java @@ -2,20 +2,22 @@ package com.zhyc.module.stock.service.impl; import java.util.List; +import com.zhyc.common.exception.ServiceException; +import com.zhyc.common.utils.StringUtils; import org.springframework.stereotype.Service; import com.zhyc.module.stock.mapper.WzMaterialsManagementMapper; import com.zhyc.module.stock.domain.WzMaterialsManagement; import com.zhyc.module.stock.service.IWzMaterialsManagementService; +import org.springframework.transaction.annotation.Transactional; /** * 物资管理Service业务层处理 - * + * * @author HashMap * @date 2025-08-05 */ @Service -public class WzMaterialsManagementServiceImpl implements IWzMaterialsManagementService -{ +public class WzMaterialsManagementServiceImpl implements IWzMaterialsManagementService { private final WzMaterialsManagementMapper wzMaterialsManagementMapper; public WzMaterialsManagementServiceImpl(WzMaterialsManagementMapper wzMaterialsManagementMapper) { @@ -24,73 +26,107 @@ public class WzMaterialsManagementServiceImpl implements IWzMaterialsManagementS /** * 查询物资管理 - * + * * @param materialManagementCode 物资管理主键 * @return 物资管理 */ @Override - public WzMaterialsManagement selectWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode) - { + public WzMaterialsManagement selectWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode) { return wzMaterialsManagementMapper.selectWzMaterialsManagementByMaterialManagementCode(materialManagementCode); } /** * 查询物资管理列表 - * + * * @param wzMaterialsManagement 物资管理 * @return 物资管理 */ @Override - public List selectWzMaterialsManagementList(WzMaterialsManagement wzMaterialsManagement) - { + public List selectWzMaterialsManagementList(WzMaterialsManagement wzMaterialsManagement) { return wzMaterialsManagementMapper.selectWzMaterialsManagementList(wzMaterialsManagement); } /** * 新增物资管理 - * + * * @param wzMaterialsManagement 物资管理 * @return 结果 */ @Override - public int insertWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement) - { + public int insertWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement) { return wzMaterialsManagementMapper.insertWzMaterialsManagement(wzMaterialsManagement); } /** * 修改物资管理 - * + * * @param wzMaterialsManagement 物资管理 * @return 结果 */ @Override - public int updateWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement) - { + public int updateWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement) { return wzMaterialsManagementMapper.updateWzMaterialsManagement(wzMaterialsManagement); } /** * 批量删除物资管理 - * + * * @param materialManagementCodes 需要删除的物资管理主键 * @return 结果 */ @Override - public int deleteWzMaterialsManagementByMaterialManagementCodes(Long[] materialManagementCodes) - { + public int deleteWzMaterialsManagementByMaterialManagementCodes(Long[] materialManagementCodes) { return wzMaterialsManagementMapper.deleteWzMaterialsManagementByMaterialManagementCodes(materialManagementCodes); } /** * 删除物资管理信息 - * + * * @param materialManagementCode 物资管理主键 * @return 结果 */ @Override - public int deleteWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode) - { + public int deleteWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode) { return wzMaterialsManagementMapper.deleteWzMaterialsManagementByMaterialManagementCode(materialManagementCode); } + + /** + * 导入用户数据 + * + * @param MaterialsManagementList 物资数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public String importUser(List MaterialsManagementList, Boolean isUpdateSupport, String operName) { + if (StringUtils.isNull(MaterialsManagementList) || MaterialsManagementList.isEmpty()) { + throw new ServiceException("导入用户数据不能为空!"); + } + int successNum = 0; + int sameNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + try { + for (WzMaterialsManagement wzMaterialsManagement : MaterialsManagementList) { + if (wzMaterialsManagement.getMaterialId() != null) { + WzMaterialsManagement isExist = wzMaterialsManagementMapper.selectWzMaterialsManagementByMaterialID(wzMaterialsManagement.getMaterialId()); + // 存在则更新 + if (isExist != null) { + sameNum++; + wzMaterialsManagementMapper.updateWzMaterialsManagement(wzMaterialsManagement); + continue; + } + } + int result = wzMaterialsManagementMapper.insertWzMaterialsManagement(wzMaterialsManagement); + if (result > 0) successNum++; + } + } catch (Exception e) { + return failureMsg.append("导入出错:").append(e.getMessage()).toString(); + } + successMsg.append("导入完成 : 导入 ").append(successNum).append(" 条\n更新 ").append(sameNum).append(" 条(已存在记录)"); + return successMsg.toString(); + } + } diff --git a/zhyc-module/src/main/resources/mapper/stock/WzMaterialsManagementMapper.xml b/zhyc-module/src/main/resources/mapper/stock/WzMaterialsManagementMapper.xml index f555332..d2347c4 100644 --- a/zhyc-module/src/main/resources/mapper/stock/WzMaterialsManagementMapper.xml +++ b/zhyc-module/src/main/resources/mapper/stock/WzMaterialsManagementMapper.xml @@ -77,7 +77,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" expiration_date = #{expirationDate}, expiration_alarm = #{expirationAlarm}, - where material_management_code = #{materialManagementCode} + where material_id = #{materialId} @@ -90,4 +90,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{materialManagementCode} + + \ No newline at end of file From 64c2de5d21903a6d97760a701f6396bd32bab105 Mon Sep 17 00:00:00 2001 From: HashMap Date: Wed, 6 Aug 2025 21:10:06 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat(module):=20=E5=87=BA=E5=BA=93=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 出库记录 & 批量导入 --- .../controller/WzStockOutController.java | 24 +++ .../zhyc/module/stock/domain/WzStockOut.java | 200 ++++++++++++------ .../module/stock/mapper/WzStockOutMapper.java | 7 + .../stock/service/IWzStockOutService.java | 11 + .../service/impl/WzStockOutServiceImpl.java | 82 +++++-- .../mapper/stock/WzStockOutMapper.xml | 14 +- 6 files changed, 252 insertions(+), 86 deletions(-) diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockOutController.java b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockOutController.java index f4b051d..cb80a44 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockOutController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockOutController.java @@ -19,6 +19,7 @@ import com.zhyc.module.stock.domain.WzStockOut; import com.zhyc.module.stock.service.IWzStockOutService; import com.zhyc.common.utils.poi.ExcelUtil; import com.zhyc.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; /** * 出库记录Controller @@ -103,4 +104,27 @@ public class WzStockOutController extends BaseController { return toAjax(wzStockOutService.deleteWzStockOutByStockOutCodes(stockOutCodes)); } + + /** + * 导入出库记录 + */ + @Log(title = "出库记录", businessType = BusinessType.IMPORT) + @PreAuthorize("@ss.hasPermi('stock:out:import')") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception + { + ExcelUtil util = new ExcelUtil<>(WzStockOut.class); + List WzStockOutList = util.importExcel(file.getInputStream()); + WzStockOutList.removeIf(wzStockOut -> wzStockOut.getDocId() == null); + String operName = getUsername(); + String message; + try { + message = wzStockOutService.importUser(WzStockOutList, updateSupport, operName); + }catch (Exception e) { + message = e.getMessage(); + logger.error(e.getMessage()); + } + // String message = "OK We are testing"; + return success(message); + } } diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockOut.java b/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockOut.java index 24e5038..c0a84a9 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockOut.java +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockOut.java @@ -2,6 +2,7 @@ package com.zhyc.module.stock.domain; import java.math.BigDecimal; import java.util.Date; + import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Getter; import lombok.Setter; @@ -12,168 +13,239 @@ import com.zhyc.common.core.domain.BaseEntity; /** * 出库记录对象 wz_stock_out - * + * * @author HashMap * @date 2025-08-05 */ @Getter @Setter -public class WzStockOut extends BaseEntity -{ +public class WzStockOut extends BaseEntity { private static final long serialVersionUID = 1L; - /** 序号 */ + /** + * 序号 + */ private Long stockOutCode; - /** 单据日期 */ + /** + * 单据日期 + */ @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "单据日期", width = 30, dateFormat = "yyyy-MM-dd") private Date docDate; - /** 创建时间 */ + /** + * 创建时间 + */ @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd") private Date createDate; - /** 单据编号 */ + /** + * 单据编号 + */ @Excel(name = "单据编号") private String docId; - /** 业务类型 */ + /** + * 业务类型 + */ @Excel(name = "业务类型") private String businessType; - /** 仓库编码 */ + /** + * 仓库编码 + */ @Excel(name = "仓库编码") private String repositoryId; - /** 仓库名称 */ - @Excel(name = "仓库名称") + /** + * 仓库名称 + */ + @Excel(name = "仓库") private String repositoryName; - /** 项目分类 */ + /** + * 项目分类 + */ @Excel(name = "项目分类") private String projectClassification; - /** 项目编码 */ + /** + * 项目编码 + */ @Excel(name = "项目编码") private String projectId; - /** 项目 */ + /** + * 项目 + */ @Excel(name = "项目") private String projectName; - /** 生产车间编码 */ + /** + * 生产车间编码 + */ @Excel(name = "生产车间编码") private String departmentId; - /** 生产车间 */ + /** + * 生产车间 + */ @Excel(name = "生产车间") private String departmentName; - /** 领用人 */ + /** + * 领用人编码 + */ + @Excel(name = "领用人编码") + private String receiverId; + + /** + * 领用人 + */ @Excel(name = "领用人") private String receiver; - /** 制单人 */ + /** + * 制单人 + */ @Excel(name = "制单人") private String single; - /** 审核人 */ + /** + * 审核人 + */ @Excel(name = "审核人") private String reviewer; - /** 审核时间 */ + /** + * 审核时间 + */ @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd") private Date reviewDate; - /** 修改人 */ + /** + * 修改人 + */ @Excel(name = "修改人") private String modifier; - /** 材料分类编码 */ + /** + * 材料分类编码 + */ @Excel(name = "材料分类编码") private String materialClassId; - /** 材料分类 */ + /** + * 材料分类 + */ @Excel(name = "材料分类") private String materialClassName; - /** 材料名称 */ + /** + * 材料编码 + */ + @Excel(name = "材料编码") + private String materialId; + + /** + * 材料名称 + */ @Excel(name = "材料名称") private String materialName; - /** 材料规格 */ + /** + * 材料规格 + */ @Excel(name = "材料规格") private String materialSpecification; - /** 计量单位 */ + /** + * 计量单位 + */ @Excel(name = "计量单位") private String materialUnit; - /** 数量 */ + /** + * 数量 + */ @Excel(name = "数量") private BigDecimal count; - /** 批号 */ + /** + * 批号 + */ @Excel(name = "批号") private Long batchId; - /** 生产日期 */ + /** + * 生产日期 + */ @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "生产日期", width = 30, dateFormat = "yyyy-MM-dd") private Date productionDate; - /** 保质期 */ + /** + * 保质期 + */ @Excel(name = "保质期") private Long shelfLife; - /** 保质期单位 */ + /** + * 保质期单位 + */ @Excel(name = "保质期单位") private String shelfLifeUnit; - /** 失效日期 */ + /** + * 失效日期 + */ @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "失效日期", width = 30, dateFormat = "yyyy-MM-dd") private Date expirationDate; - /** 代理人 */ + /** + * 代理人 + */ @Excel(name = "代理人") private String agent; @Override public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("stockOutCode", getStockOutCode()) - .append("docDate", getDocDate()) - .append("createDate", getCreateDate()) - .append("docId", getDocId()) - .append("businessType", getBusinessType()) - .append("repositoryId", getRepositoryId()) - .append("repositoryName", getRepositoryName()) - .append("projectClassification", getProjectClassification()) - .append("projectId", getProjectId()) - .append("projectName", getProjectName()) - .append("departmentId", getDepartmentId()) - .append("departmentName", getDepartmentName()) - .append("receiver", getReceiver()) - .append("single", getSingle()) - .append("reviewer", getReviewer()) - .append("reviewDate", getReviewDate()) - .append("modifier", getModifier()) - .append("materialClassId", getMaterialClassId()) - .append("materialClassName", getMaterialClassName()) - .append("materialName", getMaterialName()) - .append("materialSpecification", getMaterialSpecification()) - .append("materialUnit", getMaterialUnit()) - .append("count", getCount()) - .append("batchId", getBatchId()) - .append("productionDate", getProductionDate()) - .append("shelfLife", getShelfLife()) - .append("shelfLifeUnit", getShelfLifeUnit()) - .append("expirationDate", getExpirationDate()) - .append("agent", getAgent()) - .toString(); + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("stockOutCode", getStockOutCode()) + .append("docDate", getDocDate()) + .append("createDate", getCreateDate()) + .append("docId", getDocId()) + .append("businessType", getBusinessType()) + .append("repositoryId", getRepositoryId()) + .append("repositoryName", getRepositoryName()) + .append("projectClassification", getProjectClassification()) + .append("projectId", getProjectId()) + .append("projectName", getProjectName()) + .append("departmentId", getDepartmentId()) + .append("departmentName", getDepartmentName()) + .append("receiverId", getReceiverId()) + .append("receiver", getReceiver()) + .append("single", getSingle()) + .append("reviewer", getReviewer()) + .append("reviewDate", getReviewDate()) + .append("modifier", getModifier()) + .append("materialClassId", getMaterialClassId()) + .append("materialClassName", getMaterialClassName()) + .append("materialId", getMaterialId()) + .append("materialName", getMaterialName()) + .append("materialSpecification", getMaterialSpecification()) + .append("materialUnit", getMaterialUnit()) + .append("count", getCount()) + .append("batchId", getBatchId()) + .append("productionDate", getProductionDate()) + .append("shelfLife", getShelfLife()) + .append("shelfLifeUnit", getShelfLifeUnit()) + .append("expirationDate", getExpirationDate()) + .append("agent", getAgent()) + .toString(); } } diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockOutMapper.java b/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockOutMapper.java index 791793a..a9ae9ce 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockOutMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockOutMapper.java @@ -60,4 +60,11 @@ public interface WzStockOutMapper * @return 结果 */ int deleteWzStockOutByStockOutCodes(Long[] stockOutCodes); + + /** + * 查询最近的记录 + * + * @return 结果 + */ + WzStockOut getEarliestStockOut(); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockOutService.java b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockOutService.java index 4dc8c35..6e4c75b 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockOutService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockOutService.java @@ -1,6 +1,7 @@ package com.zhyc.module.stock.service; import java.util.List; + import com.zhyc.module.stock.domain.WzStockOut; /** @@ -58,4 +59,14 @@ public interface IWzStockOutService * @return 结果 */ int deleteWzStockOutByStockOutCode(Long stockOutCode); + + /** + * 导入入库数据 + * + * @param WzStockOutList 入库数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + String importUser(List WzStockOutList, Boolean isUpdateSupport, String operName) throws Exception; } diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockOutServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockOutServiceImpl.java index d023e10..5fb6c36 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockOutServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockOutServiceImpl.java @@ -1,21 +1,24 @@ package com.zhyc.module.stock.service.impl; +import java.util.Date; import java.util.List; +import com.zhyc.common.exception.ServiceException; +import com.zhyc.common.utils.StringUtils; import org.springframework.stereotype.Service; import com.zhyc.module.stock.mapper.WzStockOutMapper; import com.zhyc.module.stock.domain.WzStockOut; import com.zhyc.module.stock.service.IWzStockOutService; +import org.springframework.transaction.annotation.Transactional; /** * 出库记录Service业务层处理 - * + * * @author HashMap * @date 2025-08-05 */ @Service -public class WzStockOutServiceImpl implements IWzStockOutService -{ +public class WzStockOutServiceImpl implements IWzStockOutService { private final WzStockOutMapper wzStockOutMapper; public WzStockOutServiceImpl(WzStockOutMapper wzStockOutMapper) { @@ -24,73 +27,110 @@ public class WzStockOutServiceImpl implements IWzStockOutService /** * 查询出库记录 - * + * * @param stockOutCode 出库记录主键 * @return 出库记录 */ @Override - public WzStockOut selectWzStockOutByStockOutCode(Long stockOutCode) - { + public WzStockOut selectWzStockOutByStockOutCode(Long stockOutCode) { return wzStockOutMapper.selectWzStockOutByStockOutCode(stockOutCode); } /** * 查询出库记录列表 - * + * * @param wzStockOut 出库记录 * @return 出库记录 */ @Override - public List selectWzStockOutList(WzStockOut wzStockOut) - { + public List selectWzStockOutList(WzStockOut wzStockOut) { return wzStockOutMapper.selectWzStockOutList(wzStockOut); } /** * 新增出库记录 - * + * * @param wzStockOut 出库记录 * @return 结果 */ @Override - public int insertWzStockOut(WzStockOut wzStockOut) - { + public int insertWzStockOut(WzStockOut wzStockOut) { return wzStockOutMapper.insertWzStockOut(wzStockOut); } /** * 修改出库记录 - * + * * @param wzStockOut 出库记录 * @return 结果 */ @Override - public int updateWzStockOut(WzStockOut wzStockOut) - { + public int updateWzStockOut(WzStockOut wzStockOut) { return wzStockOutMapper.updateWzStockOut(wzStockOut); } /** * 批量删除出库记录 - * + * * @param stockOutCodes 需要删除的出库记录主键 * @return 结果 */ @Override - public int deleteWzStockOutByStockOutCodes(Long[] stockOutCodes) - { + public int deleteWzStockOutByStockOutCodes(Long[] stockOutCodes) { return wzStockOutMapper.deleteWzStockOutByStockOutCodes(stockOutCodes); } /** * 删除出库记录信息 - * + * * @param stockOutCode 出库记录主键 * @return 结果 */ @Override - public int deleteWzStockOutByStockOutCode(Long stockOutCode) - { + public int deleteWzStockOutByStockOutCode(Long stockOutCode) { return wzStockOutMapper.deleteWzStockOutByStockOutCode(stockOutCode); } + + /** + * 导入用户数据 + * + * @param WzStockOutList 入库数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public String importUser(List WzStockOutList, Boolean isUpdateSupport, String operName) throws Exception { + if (StringUtils.isNull(WzStockOutList) || WzStockOutList.isEmpty()) { + throw new ServiceException("导入入库数据不能为空!"); + } + int successNum = 0; + int sameNum = 0; + StringBuilder successMsg = new StringBuilder(); + WzStockOut earliestStockOut = wzStockOutMapper.getEarliestStockOut(); + // 确保最近记录有值 + if (null == earliestStockOut || earliestStockOut.getCreateDate() == null) { + if (earliestStockOut != null) { + earliestStockOut.setCreateDate(new Date(0)); + } else { + earliestStockOut = new WzStockOut(); + earliestStockOut.setCreateDate(new Date(0)); + } + } + for (WzStockOut wzStockOut : WzStockOutList) { + if (null != wzStockOut && null != wzStockOut.getCreateDate()) { + if (earliestStockOut.getCreateDate().getTime() >= wzStockOut.getCreateDate().getTime()) { + sameNum++; + continue; + } + } else { + continue; + } + int result = wzStockOutMapper.insertWzStockOut(wzStockOut); + if (result > 0) successNum++; + } + successMsg.append("导入完成 : 导入 ").append(successNum).append(" 条\n跳过 ").append(sameNum).append(" 条(重复记录)"); + return successMsg.toString(); + } } diff --git a/zhyc-module/src/main/resources/mapper/stock/WzStockOutMapper.xml b/zhyc-module/src/main/resources/mapper/stock/WzStockOutMapper.xml index 216dc4c..5df3b87 100644 --- a/zhyc-module/src/main/resources/mapper/stock/WzStockOutMapper.xml +++ b/zhyc-module/src/main/resources/mapper/stock/WzStockOutMapper.xml @@ -17,6 +17,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -24,6 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -37,7 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select stock_out_code, doc_date, create_date, doc_id, business_type, repository_id, repository_name, project_classification, project_id, project_name, department_id, department_name, receiver, single, reviewer, review_date, modifier, material_class_id, material_class_name, material_name, material_specification, material_unit, count, batch_id, production_date, shelf_life, shelf_life_unit, expiration_date, agent from wz_stock_out + select stock_out_code, doc_date, create_date, doc_id, business_type, repository_id, repository_name, project_classification, project_id, project_name, department_id, department_name,receiver_id, receiver, single, reviewer, review_date, modifier, material_class_id, material_class_name, material_id,material_name, material_specification, material_unit, count, batch_id, production_date, shelf_life, shelf_life_unit, expiration_date, agent from wz_stock_out + SELECT * FROM wz_stock_out ORDER BY create_date DESC LIMIT 1 + \ No newline at end of file