diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsMaterialTransferBillsController.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsMaterialTransferBillsController.java new file mode 100644 index 00000000..b1a2dc2e --- /dev/null +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsMaterialTransferBillsController.java @@ -0,0 +1,116 @@ +package org.dromara.wms.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.wms.domain.vo.WmsMaterialTransferBillsVo; +import org.dromara.wms.domain.bo.WmsMaterialTransferBillsBo; +import org.dromara.wms.service.IWmsMaterialTransferBillsService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 物料调拨单 + * 前端访问路由地址为:/wms/materialTransferBills + * + * @author Yinq + * @date 2025-12-08 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/materialTransferBills") +public class WmsMaterialTransferBillsController extends BaseController { + + private final IWmsMaterialTransferBillsService wmsMaterialTransferBillsService; + + /** + * 查询物料调拨单列表 + */ + @SaCheckPermission("wms:materialTransferBills:list") + @GetMapping("/list") + public TableDataInfo list(WmsMaterialTransferBillsBo bo, PageQuery pageQuery) { + return wmsMaterialTransferBillsService.queryPageList(bo, pageQuery); + } + + /** + * 导出物料调拨单列表 + */ + @SaCheckPermission("wms:materialTransferBills:export") + @Log(title = "物料调拨单", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(WmsMaterialTransferBillsBo bo, HttpServletResponse response) { + List list = wmsMaterialTransferBillsService.queryList(bo); + ExcelUtil.exportExcel(list, "物料调拨单", WmsMaterialTransferBillsVo.class, response); + } + + /** + * 获取物料调拨单详细信息 + * + * @param transferBillsId 主键 + */ + @SaCheckPermission("wms:materialTransferBills:query") + @GetMapping("/{transferBillsId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("transferBillsId") Long transferBillsId) { + return R.ok(wmsMaterialTransferBillsService.queryById(transferBillsId)); + } + + /** + * 新增物料调拨单 + */ + @SaCheckPermission("wms:materialTransferBills:add") + @Log(title = "物料调拨单", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody WmsMaterialTransferBillsBo bo) { + return toAjax(wmsMaterialTransferBillsService.insertByBo(bo)); + } + + /** + * 修改物料调拨单 + */ + @SaCheckPermission("wms:materialTransferBills:edit") + @Log(title = "物料调拨单", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody WmsMaterialTransferBillsBo bo) { + return toAjax(wmsMaterialTransferBillsService.updateByBo(bo)); + } + + /** + * 删除物料调拨单 + * + * @param transferBillsIds 主键串 + */ + @SaCheckPermission("wms:materialTransferBills:remove") + @Log(title = "物料调拨单", businessType = BusinessType.DELETE) + @DeleteMapping("/{transferBillsIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("transferBillsIds") Long[] transferBillsIds) { + return toAjax(wmsMaterialTransferBillsService.deleteWithValidByIds(List.of(transferBillsIds), true)); + } + + /** + * 下拉框查询物料调拨单列表 + */ + @GetMapping("/getWmsMaterialTransferBillsList") + public R> getWmsMaterialTransferBillsList(WmsMaterialTransferBillsBo bo) { + List list = wmsMaterialTransferBillsService.queryList(bo); + return R.ok(list); + } + +} diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsMaterialTransferRecordController.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsMaterialTransferRecordController.java index 76cf4cd1..8e5abffc 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsMaterialTransferRecordController.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsMaterialTransferRecordController.java @@ -78,7 +78,7 @@ public class WmsMaterialTransferRecordController extends BaseController { @RepeatSubmit() @PostMapping() public R add(@Validated(AddGroup.class) @RequestBody List bo) { - return toAjax(wmsMaterialTransferRecordService.insertByBo(bo)); + return toAjax(wmsMaterialTransferRecordService.insertByBo(null,bo)); } /** diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsMaterialTransferBills.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsMaterialTransferBills.java new file mode 100644 index 00000000..2e696d4d --- /dev/null +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsMaterialTransferBills.java @@ -0,0 +1,62 @@ +package org.dromara.wms.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 物料调拨单对象 wms_material_transfer_bills + * + * @author Yinq + * @date 2025-12-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("wms_material_transfer_bills") +public class WmsMaterialTransferBills extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 调拨记录ID + */ + @TableId(value = "transfer_bills_id", type = IdType.AUTO) + private Long transferBillsId; + + /** + * 调拨单号 + */ + private String transferBillsCode; + + /** + * 调出仓库 + */ + private Long transferOutStoreId; + + /** + * 调入仓库 + */ + private Long transferInStoreId; + + /** + * 状态 + */ + private String billsStatus; + + /** + * 备注 + */ + private String remark; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @TableLogic + private String delFlag; + + +} diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsMaterialTransferRecord.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsMaterialTransferRecord.java index 00449b31..0ea20df9 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsMaterialTransferRecord.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsMaterialTransferRecord.java @@ -85,5 +85,5 @@ public class WmsMaterialTransferRecord extends TenantEntity { * 成品描述 */ private String productSpe; - + private Long transferBillsId; } diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsMaterialTransferBillsBo.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsMaterialTransferBillsBo.java new file mode 100644 index 00000000..1b54006f --- /dev/null +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsMaterialTransferBillsBo.java @@ -0,0 +1,58 @@ +package org.dromara.wms.domain.bo; + +import org.dromara.wms.domain.WmsMaterialTransferBills; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import org.dromara.wms.domain.WmsMaterialTransferRecord; + +import java.util.List; + +/** + * 物料调拨单业务对象 wms_material_transfer_bills + * + * @author Yinq + * @date 2025-12-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = WmsMaterialTransferBills.class, reverseConvertGenerate = false) +public class WmsMaterialTransferBillsBo extends BaseEntity { + + /** + * 调拨记录ID + */ + @NotNull(message = "调拨记录ID不能为空", groups = { EditGroup.class }) + private Long transferBillsId; + + /** + * 调拨单号 + */ + private String transferBillsCode; + + /** + * 调出仓库 + */ + private Long transferOutStoreId; + + /** + * 调入仓库 + */ + private Long transferInStoreId; + + /** + * 状态 + */ + private String billsStatus; + + /** + * 备注 + */ + private String remark; + + List list; +} diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsMaterialTransferRecordBo.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsMaterialTransferRecordBo.java index c320c6f1..496f4841 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsMaterialTransferRecordBo.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsMaterialTransferRecordBo.java @@ -72,6 +72,6 @@ public class WmsMaterialTransferRecordBo extends BaseEntity { * 成品描述 */ private String productSpe; - + private Long transferBillsId; } diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/vo/WmsMaterialTransferBillsVo.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/vo/WmsMaterialTransferBillsVo.java new file mode 100644 index 00000000..f803024d --- /dev/null +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/vo/WmsMaterialTransferBillsVo.java @@ -0,0 +1,111 @@ +package org.dromara.wms.domain.vo; + +import org.dromara.wms.domain.WmsMaterialTransferBills; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 物料调拨单视图对象 wms_material_transfer_bills + * + * @author Yinq + * @date 2025-12-08 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = WmsMaterialTransferBills.class) +public class WmsMaterialTransferBillsVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 调拨记录ID + */ + @ExcelProperty(value = "调拨记录ID") + private Long transferBillsId; + + /** + * 调拨单号 + */ + @ExcelProperty(value = "调拨单号") + private String transferBillsCode; + + /** + * 调出仓库 + */ + @ExcelProperty(value = "调出仓库") + private Long transferOutStoreId; + + /** + * 调入仓库 + */ + @ExcelProperty(value = "调入仓库") + private Long transferInStoreId; + + /** + * 状态 + */ + @ExcelProperty(value = "状态") + private String billsStatus; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 租户编号 + */ + @ExcelProperty(value = "租户编号") + private String tenantId; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @ExcelProperty(value = "删除标志", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=代表存在,1=代表删除") + private String delFlag; + + /** + * 创建部门 + */ + @ExcelProperty(value = "创建部门") + private Long createDept; + + /** + * 创建人 + */ + @ExcelProperty(value = "创建人") + private Long createBy; + + /** + * 创建时间 + */ + @ExcelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新人 + */ + @ExcelProperty(value = "更新人") + private Long updateBy; + + /** + * 更新时间 + */ + @ExcelProperty(value = "更新时间") + private Date updateTime; + + +} diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/mapper/WmsMaterialTransferBillsMapper.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/mapper/WmsMaterialTransferBillsMapper.java new file mode 100644 index 00000000..84b2008c --- /dev/null +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/mapper/WmsMaterialTransferBillsMapper.java @@ -0,0 +1,37 @@ +package org.dromara.wms.mapper; + +import java.util.List; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.wms.domain.WmsMaterialTransferBills; +import org.dromara.wms.domain.vo.WmsMaterialTransferBillsVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 物料调拨单Mapper接口 + * + * @author Yinq + * @date 2025-12-08 + */ +public interface WmsMaterialTransferBillsMapper extends BaseMapperPlus { + + /** + * 查询物料调拨单列表 + * + * @param page 分页 + * @param queryWrapper 条件 + * @return 物料调拨单集合 + */ + public Page selectCustomWmsMaterialTransferBillsVoList(@Param("page") Page page, @Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + + /** + * 查询物料调拨单列表 + * + * @param queryWrapper 条件 + * @return 物料调拨单集合 + */ + public List selectCustomWmsMaterialTransferBillsVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + +} diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsMaterialTransferBillsService.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsMaterialTransferBillsService.java new file mode 100644 index 00000000..f81de430 --- /dev/null +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsMaterialTransferBillsService.java @@ -0,0 +1,69 @@ +package org.dromara.wms.service; + +import org.dromara.wms.domain.WmsMaterialTransferBills; +import org.dromara.wms.domain.vo.WmsMaterialTransferBillsVo; +import org.dromara.wms.domain.bo.WmsMaterialTransferBillsBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 物料调拨单Service接口 + * + * @author Yinq + * @date 2025-12-08 + */ +public interface IWmsMaterialTransferBillsService { + + /** + * 查询物料调拨单 + * + * @param transferBillsId 主键 + * @return 物料调拨单 + */ + WmsMaterialTransferBillsVo queryById(Long transferBillsId); + + /** + * 分页查询物料调拨单列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 物料调拨单分页列表 + */ + TableDataInfo queryPageList(WmsMaterialTransferBillsBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的物料调拨单列表 + * + * @param bo 查询条件 + * @return 物料调拨单列表 + */ + List queryList(WmsMaterialTransferBillsBo bo); + + /** + * 新增物料调拨单 + * + * @param bo 物料调拨单 + * @return 是否新增成功 + */ + Boolean insertByBo(WmsMaterialTransferBillsBo bo); + + /** + * 修改物料调拨单 + * + * @param bo 物料调拨单 + * @return 是否修改成功 + */ + Boolean updateByBo(WmsMaterialTransferBillsBo bo); + + /** + * 校验并批量删除物料调拨单信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsMaterialTransferRecordService.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsMaterialTransferRecordService.java index 1d52d03d..d8633e6f 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsMaterialTransferRecordService.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsMaterialTransferRecordService.java @@ -48,7 +48,7 @@ public interface IWmsMaterialTransferRecordService { * @param bo 物料调拨 * @return 是否新增成功 */ - Boolean insertByBo(List bo); + Boolean insertByBo(Long transferBillsId,List bo); /** * 修改物料调拨 diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsInStockBillServiceImpl.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsInStockBillServiceImpl.java index 4e1e8a2a..66a0ce43 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsInStockBillServiceImpl.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsInStockBillServiceImpl.java @@ -26,6 +26,7 @@ import org.dromara.wms.service.IWmsInventoryDetailsService; import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.domain.RemoteStartProcess; import org.dromara.workflow.api.event.ProcessEvent; +import org.springframework.beans.factory.parsing.BeanEntry; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; @@ -45,7 +46,6 @@ public class WmsInStockBillServiceImpl implements IWmsInStockBillService { private final WmsInStockDetailsMapper wmsInStockDetailsMapper; private final IWmsInventoryDetailsService inventoryService; // private final IWmsWarehouseInfoService warehouseService; - private final WmsInventoryLedgerMapper wmsInventoryLedgerMapper; @DubboReference private RemoteCodeRuleService remoteCodeRuleService; @DubboReference(timeout = 30000)//超时时间 @@ -113,7 +113,6 @@ public class WmsInStockBillServiceImpl implements IWmsInStockBillService { @Override public Boolean insertByBo(WmsInStockBillBo bo) { WmsInStockBill add = MapstructUtils.convert(bo, WmsInStockBill.class); - String inStockType = add.getInStockType(); add.setInStockCode(remoteCodeRuleService.selectCodeRuleCode("1005"));// 物料入库编码 add.setInStockBillStatus("3"); boolean flag = baseMapper.insert(add) > 0;//插入主表 @@ -125,45 +124,17 @@ public class WmsInStockBillServiceImpl implements IWmsInStockBillService { inStockDetailsList.forEach(item -> { item.setInStockBillId(inStockBillId); // 设置入库单明细的入库单ID item.setProjectId(projectId); // 关联项目 - Double inStockAmount = item.getInStockAmount(); - Double inventoryTableAmount = 0.0;// 库存表数量 // 构建库存明细 - WmsInventoryDetailsBo inventory = new WmsInventoryDetailsBo(); - inventory.setWarehouseId(item.getWarehouseId()); - inventory.setProjectId(projectId); - inventory.setBatchNumber(item.getBatchNumber()); - inventory.setMaterielId(item.getMaterialId()); - inventory.setUnitPrice(item.getUnitPrice()); - // 查询相同项目 相同仓库 相同批次 相同单价的物料 - WmsInventoryDetails queryInventory = inventoryService.queryInventory(inventory); - if (queryInventory != null) { - WmsInventoryDetailsBo inventoryUpdate = new WmsInventoryDetailsBo(); - inventoryUpdate.setInventoryDetailsId(queryInventory.getInventoryDetailsId()); - inventoryTableAmount = queryInventory.getInventoryAmount() ; - inventoryUpdate.setInventoryAmount(inventoryTableAmount+ inStockAmount); - inventoryService.updateByBo(inventoryUpdate); // 更新库存数量 - } else { - - inventory.setUnitName(item.getUnitName()); - inventory.setInventoryAmount(inStockAmount); - inventory.setStartInventoryAmount(inStockAmount); // 初始库存数量 - inventoryService.insertByBo(inventory); - } - - - //库存变动 - WmsInventoryLedger wmsInventoryLedger = new WmsInventoryLedger(); - wmsInventoryLedger.setWarehouseId(item.getWarehouseId()); - wmsInventoryLedger.setBatchNumber(item.getBatchNumber()); - wmsInventoryLedger.setMaterielId(item.getMaterialId()); - wmsInventoryLedger.setChangeType(inStockType);//变动类型 - wmsInventoryLedger.setLedgerState("1"); - wmsInventoryLedger.setChangeAmount(inStockAmount); - wmsInventoryLedger.setInventoryAmount(inventoryTableAmount); - wmsInventoryLedgers.add(wmsInventoryLedger); + inventoryService.inStoreAddInventoryAmount( + item.getWarehouseId(), + projectId, + item.getBatchNumber(), + item.getMaterialId(), + item.getUnitPrice(), + item.getUnitName(), + item.getInStockAmount(),add.getInStockType()); }); wmsInStockDetailsMapper.insert(inStockDetailsList); //插入子表 - wmsInventoryLedgerMapper.insert(wmsInventoryLedgers); } return flag; } diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsInventoryDetailsServiceImpl.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsInventoryDetailsServiceImpl.java index 45dfe06d..49cb13e2 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsInventoryDetailsServiceImpl.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsInventoryDetailsServiceImpl.java @@ -12,10 +12,12 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.wms.domain.WmsBaseProduct; import org.dromara.wms.domain.WmsInventoryDetails; +import org.dromara.wms.domain.WmsInventoryLedger; import org.dromara.wms.domain.WmsWarehouseInfo; import org.dromara.wms.domain.bo.WmsInventoryDetailsBo; import org.dromara.wms.domain.vo.WmsInventoryDetailsVo; import org.dromara.wms.mapper.WmsInventoryDetailsMapper; +import org.dromara.wms.mapper.WmsInventoryLedgerMapper; import org.dromara.wms.service.IWmsInventoryDetailsService; import org.springframework.stereotype.Service; @@ -33,6 +35,7 @@ import java.util.List; public class WmsInventoryDetailsServiceImpl implements IWmsInventoryDetailsService { private final WmsInventoryDetailsMapper baseMapper; + private final WmsInventoryLedgerMapper wmsInventoryLedgerMapper; /** * 查询库存明细 @@ -96,7 +99,6 @@ public class WmsInventoryDetailsServiceImpl implements IWmsInventoryDetailsServi return baseMapper.selectVoList(lqw); } - private MPJLambdaWrapper buildQueryWrapper(WmsInventoryDetailsBo bo) { // Map params = bo.getParams(); MPJLambdaWrapper lqw = JoinWrappers.lambda(WmsInventoryDetails.class) @@ -148,7 +150,6 @@ public class WmsInventoryDetailsServiceImpl implements IWmsInventoryDetailsServi return baseMapper.updateById(update) > 0; } - /** * 校验并批量删除库存明细信息 * @@ -161,22 +162,6 @@ public class WmsInventoryDetailsServiceImpl implements IWmsInventoryDetailsServi return baseMapper.deleteByIds(ids) > 0; } - - @Override - public WmsInventoryDetails queryInventory(WmsInventoryDetailsBo bo) { - MPJLambdaWrapper lqw = JoinWrappers.lambda(WmsInventoryDetails.class) - .selectAll(WmsInventoryDetails.class) - .eq(WmsInventoryDetails::getDelFlag, "0") - .eq(StringUtils.isNotBlank(bo.getLocationCode()), WmsInventoryDetails::getLocationCode, bo.getLocationCode()) - .eq(bo.getWarehouseId() != null, WmsInventoryDetails::getWarehouseId, bo.getWarehouseId()) - .eq(bo.getMaterielId() != null, WmsInventoryDetails::getMaterielId, bo.getMaterielId()) - .eq(bo.getProjectId() != null, WmsInventoryDetails::getProjectId, bo.getProjectId()) - .eq(StringUtils.isNotBlank(bo.getBatchNumber()), WmsInventoryDetails::getBatchNumber, bo.getBatchNumber()) - .eq(bo.getUnitPrice() != null, WmsInventoryDetails::getUnitPrice, bo.getUnitPrice()); - - return baseMapper.selectOne(lqw); - } - @Override public Double workUpdateInventory(Long inventoryDetailsId, Double disposalQty) { @@ -210,4 +195,72 @@ public class WmsInventoryDetailsServiceImpl implements IWmsInventoryDetailsServi public Boolean workAddUpdateInventory(WmsInventoryDetails inventoryDetails) { return baseMapper.workAddUpdateInventory(inventoryDetails) > 0; } + + /** + * 新增或更新库存明细 + * + * @param warehouseId 仓库ID + * @param projectId 项目ID + * @param batchNumber 批次号 + * @param materialId 物料ID + * @param unitPrice 单价 + * @param unitName 单位 + * @param inStockAmount 入库数量 + * @return 是否新增或更新成功 + */ + + @Override + public Boolean inStoreAddInventoryAmount(Long warehouseId, Long projectId, String batchNumber, Long materialId, + Double unitPrice, String unitName, Double inStockAmount, String changeType) { + WmsInventoryDetailsBo inventory = new WmsInventoryDetailsBo(); + inventory.setWarehouseId(warehouseId); + inventory.setProjectId(projectId); + inventory.setBatchNumber(batchNumber); + inventory.setMaterielId(materialId); + inventory.setUnitPrice(unitPrice); + // 查询相同项目 相同仓库 相同批次 相同单价的物料 + WmsInventoryDetails queryInventory = queryInventory(inventory); + Double inventoryTableAmount = 0.0; + if (queryInventory != null) { + inventoryTableAmount = queryInventory.getInventoryAmount(); + baseMapper.updateTableById(queryInventory.getInventoryDetailsId(), inStockAmount, DateUtils.getNowDate(), LoginHelper.getUserId()); // 更新库存数量 + } else { + inventory.setUnitName(unitName); + inventory.setInventoryAmount(inStockAmount); + inventory.setStartInventoryAmount(inStockAmount); + this.insertByBo(inventory); + } + //库存变动 + WmsInventoryLedger wmsInventoryLedger = new WmsInventoryLedger(); + wmsInventoryLedger.setWarehouseId(warehouseId); + wmsInventoryLedger.setBatchNumber(batchNumber); + wmsInventoryLedger.setMaterielId(materialId); + wmsInventoryLedger.setChangeType(changeType);//变动类型 + wmsInventoryLedger.setLedgerState("1"); + wmsInventoryLedger.setChangeAmount(inStockAmount); + wmsInventoryLedger.setInventoryAmount(inventoryTableAmount); + wmsInventoryLedgerMapper.insert(wmsInventoryLedger); + return true; + } + + /** + * 查询符合条件的库存明细 + * + * @param bo 查询条件 + * @return 库存明细 + */ + @Override + public WmsInventoryDetails queryInventory(WmsInventoryDetailsBo bo) { + MPJLambdaWrapper lqw = JoinWrappers.lambda(WmsInventoryDetails.class) + .selectAll(WmsInventoryDetails.class) + .eq(WmsInventoryDetails::getDelFlag, "0") + .eq(StringUtils.isNotBlank(bo.getLocationCode()), WmsInventoryDetails::getLocationCode, bo.getLocationCode()) + .eq(bo.getWarehouseId() != null, WmsInventoryDetails::getWarehouseId, bo.getWarehouseId()) + .eq(bo.getMaterielId() != null, WmsInventoryDetails::getMaterielId, bo.getMaterielId()) + .eq(bo.getProjectId() != null, WmsInventoryDetails::getProjectId, bo.getProjectId()) + .eq(StringUtils.isNotBlank(bo.getBatchNumber()), WmsInventoryDetails::getBatchNumber, bo.getBatchNumber()) + .eq(bo.getUnitPrice() != null, WmsInventoryDetails::getUnitPrice, bo.getUnitPrice()); + + return baseMapper.selectOne(lqw); + } } diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsMaterialTransferBillsServiceImpl.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsMaterialTransferBillsServiceImpl.java new file mode 100644 index 00000000..7a84aa7a --- /dev/null +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsMaterialTransferBillsServiceImpl.java @@ -0,0 +1,147 @@ +package org.dromara.wms.service.impl; + +import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; + import org.dromara.common.mybatis.core.page.TableDataInfo; + import org.dromara.common.mybatis.core.page.PageQuery; + import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.dromara.system.api.RemoteCodeRuleService; +import org.dromara.wms.service.IWmsMaterialTransferRecordService; +import org.springframework.stereotype.Service; +import org.dromara.wms.domain.bo.WmsMaterialTransferBillsBo; +import org.dromara.wms.domain.vo.WmsMaterialTransferBillsVo; +import org.dromara.wms.domain.WmsMaterialTransferBills; +import org.dromara.wms.mapper.WmsMaterialTransferBillsMapper; +import org.dromara.wms.service.IWmsMaterialTransferBillsService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 物料调拨单Service业务层处理 + * + * @author Yinq + * @date 2025-12-08 + */ +@RequiredArgsConstructor +@Service +public class WmsMaterialTransferBillsServiceImpl implements IWmsMaterialTransferBillsService { + + private final WmsMaterialTransferBillsMapper baseMapper; + + /** + * 查询物料调拨单 + * + * @param transferBillsId 主键 + * @return 物料调拨单 + */ + @Override + public WmsMaterialTransferBillsVo queryById(Long transferBillsId){ + return baseMapper.selectVoById(transferBillsId); + } + + /** + * 分页查询物料调拨单列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 物料调拨单分页列表 + */ + @Override + public TableDataInfo queryPageList(WmsMaterialTransferBillsBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的物料调拨单列表 + * + * @param bo 查询条件 + * @return 物料调拨单列表 + */ + @Override + public List queryList(WmsMaterialTransferBillsBo bo) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private MPJLambdaWrapper buildQueryWrapper(WmsMaterialTransferBillsBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper lqw = JoinWrappers.lambda(WmsMaterialTransferBills.class) + .selectAll(WmsMaterialTransferBills.class) + .eq(WmsMaterialTransferBills::getDelFlag, "0") + .eq(bo.getTransferOutStoreId() != null, WmsMaterialTransferBills::getTransferOutStoreId, bo.getTransferOutStoreId()) + .eq(bo.getTransferInStoreId() != null, WmsMaterialTransferBills::getTransferInStoreId, bo.getTransferInStoreId()) + .eq(StringUtils.isNotBlank(bo.getBillsStatus()), WmsMaterialTransferBills::getBillsStatus, bo.getBillsStatus()) + .between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null, + WmsMaterialTransferBills::getCreateTime ,params.get("beginCreateTime"), params.get("endCreateTime")) +; + return lqw; + } + @DubboReference + private RemoteCodeRuleService remoteCodeRuleService; + private final IWmsMaterialTransferRecordService wmsMaterialTransferRecordService; + /** + * 新增物料调拨单 + * + * @param bo 物料调拨单 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(WmsMaterialTransferBillsBo bo) { + WmsMaterialTransferBills add = MapstructUtils.convert(bo, WmsMaterialTransferBills.class); + add.setTransferBillsCode(remoteCodeRuleService.selectCodeRuleCode("wms_1003")); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + Long transferBillsId = add.getTransferBillsId(); + bo.setTransferBillsId(transferBillsId); + wmsMaterialTransferRecordService.insertByBo(transferBillsId,bo.getList()); + + + } + return flag; + } + + /** + * 修改物料调拨单 + * + * @param bo 物料调拨单 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(WmsMaterialTransferBillsBo bo) { + WmsMaterialTransferBills update = MapstructUtils.convert(bo, WmsMaterialTransferBills.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(WmsMaterialTransferBills entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除物料调拨单信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsMaterialTransferRecordServiceImpl.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsMaterialTransferRecordServiceImpl.java index adef713f..1cbd60f4 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsMaterialTransferRecordServiceImpl.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsMaterialTransferRecordServiceImpl.java @@ -35,6 +35,7 @@ public class WmsMaterialTransferRecordServiceImpl implements IWmsMaterialTransfe private final WmsMaterialTransferRecordMapper baseMapper; private final WmsInventoryDetailsMapper wmsInventoryDetailsMapper; + /** * 查询物料调拨 * @@ -77,6 +78,7 @@ public class WmsMaterialTransferRecordServiceImpl implements IWmsMaterialTransfe MPJLambdaWrapper lqw = JoinWrappers.lambda(WmsMaterialTransferRecord.class) .selectAll(WmsMaterialTransferRecord.class) .eq(WmsMaterialTransferRecord::getDelFlag, "0") + .eq(bo.getTransferBillsId() != null, WmsMaterialTransferRecord::getTransferBillsId, bo.getTransferBillsId()) .eq(bo.getMaterielId() != null, WmsMaterialTransferRecord::getMaterielId, bo.getMaterielId()) .eq(StringUtils.isNotBlank(bo.getBatchNumber()), WmsMaterialTransferRecord::getBatchNumber, bo.getBatchNumber()) .eq(bo.getTransferOutStoreId() != null, WmsMaterialTransferRecord::getTransferOutStoreId, bo.getTransferOutStoreId()) @@ -95,16 +97,15 @@ public class WmsMaterialTransferRecordServiceImpl implements IWmsMaterialTransfe * @return 是否新增成功 */ @Override - public Boolean insertByBo(List bo) { + public Boolean insertByBo(Long transferBillsId, List bo) { baseMapper.insert(bo); // 修改库存 bo.forEach(record -> { - // Long transferOutStoreId = record.getTransferOutStoreId(); - + record.setTransferBillsId(transferBillsId);// 调拨单ID Long inventoryDetailsId = record.getInventoryDetailsId(); // 库存ID Double transferQty = record.getTransferQty(); // 调拨数量 // 库存验证 - WmsInventoryDetails inventoryDetails = wmsInventoryDetailsMapper.selectById( inventoryDetailsId); + WmsInventoryDetails inventoryDetails = wmsInventoryDetailsMapper.selectById(inventoryDetailsId); double lossQty = inventoryDetails.getInventoryAmount() - transferQty; if (lossQty < 0) { throw new IllegalArgumentException("库存不足"); @@ -120,16 +121,13 @@ public class WmsMaterialTransferRecordServiceImpl implements IWmsMaterialTransfe // 入库库存增加 WmsInventoryDetails inDetails = new WmsInventoryDetails(); inDetails.setInventoryAmount(transferQty);// 入库数量 - inDetails.setWarehouseId(record.getTransferInStoreId()); //仓库 - inDetails.setInventoryDetailsId(null); + inDetails.setWarehouseId(record.getTransferInStoreId()); //仓库id inDetails.setMaterielId(inventoryDetails.getMaterielId()); inDetails.setUnitPrice(inventoryDetails.getUnitPrice()); - + inDetails.setBatchNumber(record.getBatchNumber()); + inDetails.setUnitName(record.getUnitName()); + // inDetails wmsInventoryDetailsMapper.insert(inDetails); - - - - }); return true; @@ -148,7 +146,6 @@ public class WmsMaterialTransferRecordServiceImpl implements IWmsMaterialTransfe } - /** * 校验并批量删除物料调拨信息 * diff --git a/ruoyi-modules/ruoyi-wms/src/main/resources/mapper/wms/WmsMaterialTransferBillsMapper.xml b/ruoyi-modules/ruoyi-wms/src/main/resources/mapper/wms/WmsMaterialTransferBillsMapper.xml new file mode 100644 index 00000000..26568332 --- /dev/null +++ b/ruoyi-modules/ruoyi-wms/src/main/resources/mapper/wms/WmsMaterialTransferBillsMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + +