diff --git a/ruoyi-modules/ruoyi-wms/pom.xml b/ruoyi-modules/ruoyi-wms/pom.xml index fc33ca3c..33416f01 100644 --- a/ruoyi-modules/ruoyi-wms/pom.xml +++ b/ruoyi-modules/ruoyi-wms/pom.xml @@ -104,7 +104,10 @@ org.dromara ruoyi-api-workflow - + + org.dromara + ruoyi-common-bus + diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsInStockBillController.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsInStockBillController.java index 4e01efa9..4f5a4cef 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsInStockBillController.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsInStockBillController.java @@ -65,7 +65,7 @@ public class WmsInStockBillController extends BaseController { @SaCheckPermission("wms:inStockBill:query") @GetMapping("/{inStockBillId}") public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable("inStockBillId") Long inStockBillId) { + @PathVariable("inStockBillId") Long inStockBillId) { return R.ok(wmsInStockBillService.queryById(inStockBillId)); } @@ -115,4 +115,11 @@ public class WmsInStockBillController extends BaseController { return R.ok(list); } + + @Log(title = "物料入库", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PostMapping("/submitFlowData") + public R submitFlowData(@Validated(EditGroup.class) @RequestBody WmsInStockBillBo bo) { + return toAjax(wmsInStockBillService.submitFlowData(bo)); + } } diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsInStockDetails.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsInStockDetails.java index 0d00f1a8..4491b2ff 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsInStockDetails.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsInStockDetails.java @@ -76,9 +76,7 @@ public class WmsInStockDetails extends TenantEntity { private String delFlag; @TableField(exist = false) - /** - * SAP物料编码 - */ + /// SAP物料编码 private String materialCode; @TableField(exist = false) /** diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsInStockBillBo.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsInStockBillBo.java index 0befb576..ed0f6ca8 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsInStockBillBo.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsInStockBillBo.java @@ -1,17 +1,20 @@ package org.dromara.wms.domain.bo; -import jdk.dynalink.linker.LinkerServices; -import org.dromara.wms.domain.WmsInStockBill; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; +import cn.hutool.core.util.ObjectUtil; import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.wms.domain.WmsInStockBill; import org.dromara.wms.domain.WmsInStockDetails; +import org.dromara.workflow.api.domain.RemoteFlowInstanceBizExt; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Objects; /** * 物料入库业务对象 wms_in_stock_bill @@ -27,7 +30,7 @@ public class WmsInStockBillBo extends BaseEntity { /** * 入库单ID */ - @NotNull(message = "入库单ID不能为空", groups = { EditGroup.class }) + @NotNull(message = "入库单ID不能为空", groups = {EditGroup.class}) private Long inStockBillId; /** @@ -91,4 +94,30 @@ public class WmsInStockBillBo extends BaseEntity { private String remark; private List inStockDetailsList; + + /** + * 流程变量,前端会提交一个元素{'entity': {业务详情数据对象}} + */ + private Map variables; + + /** + * 流程业务扩展信息 + */ + private RemoteFlowInstanceBizExt bizExt; + + public Map getVariables() { + if (variables == null) { + return new HashMap<>(16); + } + variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue())); + return variables; + } + + public RemoteFlowInstanceBizExt getBizExt() { + if (ObjectUtil.isNull(bizExt)) { + bizExt = new RemoteFlowInstanceBizExt(); + } + return bizExt; + } + } diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/vo/WmsInStockDetailsVo.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/vo/WmsInStockDetailsVo.java index 3a16a7a8..40f572c6 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/vo/WmsInStockDetailsVo.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/vo/WmsInStockDetailsVo.java @@ -3,8 +3,6 @@ package org.dromara.wms.domain.vo; import org.dromara.wms.domain.WmsInStockDetails; 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; diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/mapper/WmsInStockBillMapper.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/mapper/WmsInStockBillMapper.java index e6de8089..af3abc27 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/mapper/WmsInStockBillMapper.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/mapper/WmsInStockBillMapper.java @@ -1,10 +1,5 @@ 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.WmsInStockBill; import org.dromara.wms.domain.vo.WmsInStockBillVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; @@ -16,6 +11,7 @@ import org.springframework.stereotype.Repository; * @author Yinq * @date 2025-10-28 */ +@Repository public interface WmsInStockBillMapper extends BaseMapperPlus { int selectCountNowInStore(); diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsInStockBillService.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsInStockBillService.java index 984d0dd3..5bffadec 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsInStockBillService.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsInStockBillService.java @@ -66,4 +66,6 @@ public interface IWmsInStockBillService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + boolean submitFlowData(WmsInStockBillBo 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 d618fb52..b9939909 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 @@ -4,12 +4,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.enums.FormatsType; import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.wms.domain.WmsInStockBill; import org.dromara.wms.domain.WmsInStockDetails; import org.dromara.wms.domain.bo.WmsInStockBillBo; @@ -17,10 +19,14 @@ import org.dromara.wms.domain.vo.WmsInStockBillVo; import org.dromara.wms.mapper.WmsInStockBillMapper; import org.dromara.wms.mapper.WmsInStockDetailsMapper; import org.dromara.wms.service.IWmsInStockBillService; +import org.dromara.workflow.api.RemoteWorkflowService; +import org.dromara.workflow.api.domain.RemoteStartProcess; +import org.dromara.workflow.api.event.ProcessEvent; +import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; -import java.time.LocalDate; import java.util.Collection; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,6 +42,8 @@ public class WmsInStockBillServiceImpl implements IWmsInStockBillService { private final WmsInStockBillMapper baseMapper; private final WmsInStockDetailsMapper wmsInStockDetailsMapper; + @DubboReference(timeout = 30000)//超时时间 + private RemoteWorkflowService remoteWorkflowService;//流程 /** * 查询物料入库 @@ -108,9 +116,6 @@ public class WmsInStockBillServiceImpl implements IWmsInStockBillService { } else { add.setInStockCode("RK" + dateTimeNow + "-" + "001"); } - - - add.setFlowStatus("就绪"); boolean flag = baseMapper.insert(add) > 0; if (flag) { Long inStockBillId = add.getInStockBillId(); @@ -118,8 +123,6 @@ public class WmsInStockBillServiceImpl implements IWmsInStockBillService { // 设置入库单明细的入库单ID inStockDetailsList.forEach(item -> item.setInStockBillId(inStockBillId)); wmsInStockDetailsMapper.insert(inStockDetailsList); - - } return flag; } @@ -133,16 +136,14 @@ public class WmsInStockBillServiceImpl implements IWmsInStockBillService { @Override public Boolean updateByBo(WmsInStockBillBo bo) { WmsInStockBill update = MapstructUtils.convert(bo, WmsInStockBill.class); - // validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } + boolean flag = baseMapper.updateById(update) > 0; + if (flag) { - /** - * 保存前的数据校验 - */ - /* private void validEntityBeforeSave(WmsInStockBill entity){ - //TODO 做一些数据校验,如唯一约束 - }*/ + List inStockDetailsList = bo.getInStockDetailsList(); + wmsInStockDetailsMapper.updateBatchById(inStockDetailsList); + } + return flag; + } /** * 校验并批量删除物料入库信息 @@ -158,4 +159,43 @@ public class WmsInStockBillServiceImpl implements IWmsInStockBillService { }*/ return baseMapper.deleteByIds(ids) > 0; } + + @Override + public boolean submitFlowData(WmsInStockBillBo bo) { + + + RemoteStartProcess startProcess = new RemoteStartProcess(); + startProcess.setBusinessId(bo.getInStockBillId().toString()); + startProcess.setFlowCode("wms_in"); + // startProcess.setStartUserId(loginUser.getUserId().toString()); + + // 设置流程变量 + Map variables = new HashMap<>(); + variables.put("inStockBillId", bo.getInStockBillId()); + variables.put("inStockCode", bo.getInStockCode()); + variables.put("inStockType", bo.getInStockType()); + // 可以根据需要添加更多业务变量 + startProcess.setVariables(variables); + startProcess.setBizExt(bo.getBizExt()); + // 使用正确的方法发起流程 + boolean flag = remoteWorkflowService.startCompleteTask(startProcess); + + if (flag) { + // 更新业务数据的流程状态 + WmsInStockBill update = new WmsInStockBill(); + update.setInStockBillId(bo.getInStockBillId()); + update.setFlowStatus("waiting"); // 流程进行中状态 + baseMapper.updateById(update); + } + + return flag; + } + + @EventListener(condition = "#processEvent.flowCode =='wms_in'") + public void processHandler(ProcessEvent processEvent) { + TenantHelper.dynamic(processEvent.getTenantId(), () -> { + System.out.println("当前任务执行了: " + processEvent.toString()); + + }); + } } diff --git a/ruoyi-modules/ruoyi-wms/src/main/resources/banner.txt b/ruoyi-modules/ruoyi-wms/src/main/resources/banner.txt index fbd45f53..0df3673a 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/resources/banner.txt +++ b/ruoyi-modules/ruoyi-wms/src/main/resources/banner.txt @@ -1,10 +1,10 @@ Spring Boot Version: ${spring-boot.version} Spring Application Name: ${spring.application.name} - _ _ - (_) | | - _ __ _ _ ___ _ _ _ ______ ___ _ _ ___ | |_ ___ _ __ ___ -| '__|| | | | / _ \ | | | || ||______|/ __|| | | |/ __|| __| / _ \| '_ ` _ \ -| | | |_| || (_) || |_| || | \__ \| |_| |\__ \| |_ | __/| | | | | | -|_| \__,_| \___/ \__, ||_| |___/ \__, ||___/ \__| \___||_| |_| |_| - __/ | __/ | - |___/ |___/ \ No newline at end of file + _ + (_) + _ __ _ _ ___ _ _ _ ______ +| '__|| | | | / _ \ | | | || ||______| \\\ -- /// +| | | |_| || (_) || |_| || | | \\\ ///\\\ /// +|_| \__,_| \___/ \__, ||_| | \\\ /// \\\ /// + __/ | \\\/// \\\/// + |___/ ----- -----