| | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.java110.core.annotation.Java110Cmd; |
| | | import com.java110.core.annotation.Java110Transactional; |
| | | import com.java110.core.context.CmdContextUtils; |
| | | import com.java110.core.context.ICmdDataFlowContext; |
| | | import com.java110.core.event.cmd.Cmd; |
| | | import com.java110.core.event.cmd.CmdEvent; |
| | | import com.java110.core.factory.GenerateCodeFactory; |
| | | import com.java110.dto.allocationStorehouse.AllocationStorehouseDto; |
| | | import com.java110.dto.allocationStorehouseApply.AllocationStorehouseApplyDto; |
| | | import com.java110.dto.resourceStore.ResourceStoreDto; |
| | | import com.java110.dto.resourceStoreTimes.ResourceStoreTimesDto; |
| | | import com.java110.dto.oaWorkflow.OaWorkflowDto; |
| | | import com.java110.dto.purchase.AllocationStorehouseDto; |
| | | import com.java110.dto.purchase.AllocationStorehouseApplyDto; |
| | | import com.java110.dto.purchase.PurchaseApplyDto; |
| | | import com.java110.dto.resource.ResourceStoreDto; |
| | | import com.java110.dto.resource.ResourceStoreTimesDto; |
| | | import com.java110.dto.store.StorehouseDto; |
| | | import com.java110.dto.user.UserDto; |
| | | import com.java110.dto.userStorehouse.UserStorehouseDto; |
| | | import com.java110.dto.user.UserStorehouseDto; |
| | | import com.java110.intf.common.IAllocationStorehouseUserInnerServiceSMO; |
| | | import com.java110.intf.common.IOaWorkflowActivitiInnerServiceSMO; |
| | | import com.java110.intf.oa.IOaWorkflowInnerServiceSMO; |
| | | import com.java110.intf.store.*; |
| | | import com.java110.intf.user.IUserV1InnerServiceSMO; |
| | | import com.java110.po.allocationStorehouse.AllocationStorehousePo; |
| | | import com.java110.po.allocationStorehouseApply.AllocationStorehouseApplyPo; |
| | | import com.java110.po.purchase.PurchaseApplyDetailPo; |
| | | import com.java110.po.purchase.AllocationStorehousePo; |
| | | import com.java110.po.purchase.AllocationStorehouseApplyPo; |
| | | import com.java110.po.purchase.ResourceStorePo; |
| | | import com.java110.po.resourceStoreTimes.ResourceStoreTimesPo; |
| | | import com.java110.po.userStorehouse.UserStorehousePo; |
| | | import com.java110.po.resource.ResourceStoreTimesPo; |
| | | import com.java110.po.user.UserStorehousePo; |
| | | import com.java110.store.bmo.allocation.IAllocationBMO; |
| | | import com.java110.utils.exception.CmdException; |
| | | import com.java110.utils.lock.DistributedLock; |
| | | import com.java110.utils.util.Assert; |
| | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * |
| | | * 调拨申请 |
| | | */ |
| | | @Java110Cmd(serviceCode = "resourceStore.saveAllocationStorehouse") |
| | | public class SaveAllocationStorehouseCmd extends Cmd { |
| | |
| | | @Autowired |
| | | private IResourceStoreTimesV1InnerServiceSMO resourceStoreTimesV1InnerServiceSMOImpl; |
| | | |
| | | |
| | | @Autowired |
| | | private IStorehouseV1InnerServiceSMO storehouseV1InnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IOaWorkflowInnerServiceSMO oaWorkflowInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IOaWorkflowActivitiInnerServiceSMO oaWorkflowActivitiInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IAllocationBMO allocationBMOImpl; |
| | | |
| | | @Autowired |
| | | private IOaWorkflowActivitiInnerServiceSMO oaWorkflowUserInnerServiceSMOImpl; |
| | | |
| | | @Override |
| | | public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException { |
| | | Assert.hasKeyAndValue(reqJson, "remark", "请求报文中未包含申请信息"); |
| | |
| | | validateResoureStore(reqJson, resourceStores, applyType, resIndex); |
| | | } |
| | | reqJson.put("resourceStores", resourceStores); |
| | | |
| | | |
| | | //todo 查询仓库是否存在 |
| | | StorehouseDto storehouseDto = new StorehouseDto(); |
| | | storehouseDto.setShId(reqJson.getString("shId")); |
| | | List<StorehouseDto> storehouseDtos = storehouseV1InnerServiceSMOImpl.queryStorehouses(storehouseDto); |
| | | Assert.listOnlyOne(storehouseDtos, "仓库不存在"); |
| | | |
| | | if (!StorehouseDto.SWITCH_ON.equals(storehouseDtos.get(0).getAllocationSwitch())) { |
| | | return; |
| | | } |
| | | String storeId = CmdContextUtils.getStoreId(cmdDataFlowContext); |
| | | |
| | | OaWorkflowDto oaWorkflowDto = new OaWorkflowDto(); |
| | | oaWorkflowDto.setStoreId(storeId); |
| | | oaWorkflowDto.setFlowId(storehouseDtos.get(0).getAllocationFlowId()); |
| | | List<OaWorkflowDto> oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto); |
| | | Assert.listOnlyOne(oaWorkflowDtos, "流程不存在"); |
| | | if (!OaWorkflowDto.STATE_COMPLAINT.equals(oaWorkflowDtos.get(0).getState())) { |
| | | throw new IllegalArgumentException(oaWorkflowDtos.get(0).getFlowName() + "流程未部署"); |
| | | } |
| | | |
| | | if (StringUtil.isEmpty(oaWorkflowDtos.get(0).getProcessDefinitionKey())) { |
| | | throw new IllegalArgumentException(oaWorkflowDtos.get(0).getFlowName() + "流程未部署"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | /** |
| | | * 调拨申请-调拨申请发起 |
| | | * |
| | | * @param event 事件对象 |
| | | * @param cmdDataFlowContext |
| | | * @param reqJson 请求报文 |
| | |
| | | |
| | | //封装调拨对象 |
| | | AllocationStorehouseApplyPo allocationStorehouseApplyPo = covertAllocationStorehouseApply(reqJson); |
| | | //todo 默认写0 后面 相加 |
| | | allocationStorehouseApplyPo.setApplyCount("0"); |
| | | JSONArray resourceStores = reqJson.getJSONArray("resourceStores"); |
| | | JSONObject resObj = null; |
| | | for (int resIndex = 0; resIndex < resourceStores.size(); resIndex++) { |
| | | //处理 物品信息 |
| | | resObj = resourceStores.getJSONObject(resIndex); |
| | | doDealResourceStore(reqJson, applyType, allocationStorehouseApplyPo, resourceStores, resObj); |
| | | //todo 记录明细 |
| | | saveAllocationStorehouse(reqJson, applyType, allocationStorehouseApplyPo, resObj); |
| | | //todo 退还 时 源仓库加库存 |
| | | if (!AllocationStorehouseApplyDto.STORE_TYPE_ALLOCATION.equals(applyType)) { |
| | | addAResourceStore(reqJson, allocationStorehouseApplyPo, resObj); |
| | | } |
| | | } |
| | | flag = allocationStorehouseApplyV1InnerServiceSMOImpl.saveAllocationStorehouseApply(allocationStorehouseApplyPo); |
| | | if (flag < 1) { |
| | | throw new CmdException("保存修改物品失败"); |
| | | } |
| | | //采购的情况下走流程 |
| | | if (AllocationStorehouseApplyDto.STORE_TYPE_ALLOCATION.equals(applyType)) { |
| | | AllocationStorehouseApplyDto allocationStorehouseDto = BeanConvertUtil.covertBean(allocationStorehouseApplyPo, AllocationStorehouseApplyDto.class); |
| | | allocationStorehouseDto.setCurrentUserId(reqJson.getString("userId")); |
| | | allocationStorehouseDto.setNextUserId(reqJson.getString("staffId")); |
| | | allocationStorehouseUserInnerServiceSMOImpl.startProcess(allocationStorehouseDto); |
| | | |
| | | if (!AllocationStorehouseApplyDto.STORE_TYPE_ALLOCATION.equals(applyType)) { |
| | | return; |
| | | } |
| | | // todo 开启流程 |
| | | toStartWorkflow(allocationStorehouseApplyPo, reqJson); |
| | | |
| | | cmdDataFlowContext.setResponseEntity(ResultVo.success()); |
| | | } |
| | | |
| | | private void doDealResourceStore(JSONObject reqJson, String applyType, AllocationStorehouseApplyPo allocationStorehouseApplyPo, JSONArray resourceStores, JSONObject resObj) { |
| | | //保存调拨申请的物品调拨记录 |
| | | saveAllocationStorehouse(reqJson, applyType, allocationStorehouseApplyPo, resObj); |
| | | if (AllocationStorehouseApplyDto.STORE_TYPE_ALLOCATION.equals(applyType)) { //调拨减去库存 |
| | | //开始锁代码 |
| | | //原仓库物品减去 调拨的数量 |
| | | subAResourceStore(reqJson, allocationStorehouseApplyPo, resObj); |
| | | } else { |
| | | //退还 时 源仓库加库存 |
| | | addAResourceStore(reqJson, allocationStorehouseApplyPo, resObj); |
| | | /** |
| | | * 启动审批流程 |
| | | * |
| | | * @param allocationStorehouseApplyPo |
| | | */ |
| | | private void toStartWorkflow(AllocationStorehouseApplyPo allocationStorehouseApplyPo, JSONObject reqJson) { |
| | | |
| | | //todo 查询仓库是否存在 |
| | | StorehouseDto storehouseDto = new StorehouseDto(); |
| | | storehouseDto.setShId(reqJson.getString("shId")); |
| | | List<StorehouseDto> storehouseDtos = storehouseV1InnerServiceSMOImpl.queryStorehouses(storehouseDto); |
| | | Assert.listOnlyOne(storehouseDtos, "仓库不存在"); |
| | | |
| | | if (!StorehouseDto.SWITCH_ON.equals(storehouseDtos.get(0).getAllocationSwitch())) { |
| | | //todo 直接调拨 |
| | | toAllocationStorehouse(allocationStorehouseApplyPo, storehouseDto, reqJson); |
| | | return; |
| | | } |
| | | |
| | | OaWorkflowDto oaWorkflowDto = new OaWorkflowDto(); |
| | | oaWorkflowDto.setStoreId(allocationStorehouseApplyPo.getStoreId()); |
| | | oaWorkflowDto.setFlowId(storehouseDtos.get(0).getAllocationFlowId()); |
| | | List<OaWorkflowDto> oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto); |
| | | |
| | | //todo 提交审核 |
| | | JSONObject flowJson = new JSONObject(); |
| | | flowJson.put("processDefinitionKey", oaWorkflowDtos.get(0).getProcessDefinitionKey()); |
| | | flowJson.put("createUserId", allocationStorehouseApplyPo.getStartUserId()); |
| | | flowJson.put("flowId", oaWorkflowDtos.get(0).getFlowId()); |
| | | flowJson.put("id", allocationStorehouseApplyPo.getApplyId()); |
| | | flowJson.put("auditMessage", "提交审核"); |
| | | flowJson.put("storeId", allocationStorehouseApplyPo.getStoreId()); |
| | | reqJson.put("processDefinitionKey", oaWorkflowDtos.get(0).getProcessDefinitionKey()); |
| | | JSONObject result = oaWorkflowActivitiInnerServiceSMOImpl.startProcess(flowJson); |
| | | |
| | | JSONObject audit = reqJson.getJSONObject("audit"); |
| | | String nextUserId = "-1"; |
| | | if (audit != null) { |
| | | nextUserId = reqJson.getJSONObject("audit").getString("staffId"); |
| | | } |
| | | |
| | | //提交者提交 |
| | | flowJson = new JSONObject(); |
| | | flowJson.put("processInstanceId", result.getString("processInstanceId")); |
| | | flowJson.put("createUserId", allocationStorehouseApplyPo.getStartUserId()); |
| | | flowJson.put("nextUserId", nextUserId); |
| | | flowJson.put("storeId", allocationStorehouseApplyPo.getStoreId()); |
| | | flowJson.put("id", allocationStorehouseApplyPo.getApplyId()); |
| | | flowJson.put("flowId", oaWorkflowDtos.get(0).getFlowId()); |
| | | |
| | | oaWorkflowActivitiInnerServiceSMOImpl.autoFinishFirstTask(flowJson); |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 直接调拨 |
| | | * |
| | | * @param allocationStorehouseApplyPo |
| | | * @param storehouseDto |
| | | * @param reqJson |
| | | */ |
| | | private void toAllocationStorehouse(AllocationStorehouseApplyPo allocationStorehouseApplyPo, StorehouseDto storehouseDto, JSONObject reqJson) { |
| | | |
| | | //查询调拨记录 |
| | | AllocationStorehouseDto allocationStorehouseDto = new AllocationStorehouseDto(); |
| | | allocationStorehouseDto.setApplyId(allocationStorehouseApplyPo.getApplyId()); |
| | | List<AllocationStorehouseDto> allocationStorehouseDtos = allocationStorehouseV1InnerServiceSMOImpl.queryAllocationStorehouses(allocationStorehouseDto); |
| | | |
| | | if (allocationStorehouseDtos == null || allocationStorehouseDtos.size() < 1) { |
| | | return; |
| | | } |
| | | |
| | | for (AllocationStorehouseDto tmpAllocationStorehouseDto : allocationStorehouseDtos) { |
| | | int allocationStock = Integer.parseInt(tmpAllocationStorehouseDto.getStock()); |
| | | //todo 每条记录调拨 |
| | | allocationBMOImpl.doToAllocationStorehouse(tmpAllocationStorehouseDto, allocationStock); |
| | | } |
| | | |
| | | String applyId = allocationStorehouseApplyPo.getApplyId(); |
| | | AllocationStorehouseApplyPo tmpAllocationStorehouseApplyPo = new AllocationStorehouseApplyPo(); |
| | | tmpAllocationStorehouseApplyPo.setApplyId(applyId); |
| | | //todo 如果包含taskId 流程提交下去 |
| | | if (reqJson.containsKey("taskId")) { |
| | | reqJson.put("auditCode", "1100"); |
| | | reqJson.put("auditMessage", "入库成功"); |
| | | reqJson.put("id", reqJson.getString("applyId")); |
| | | reqJson.put("storeId", reqJson.getString("storeId")); |
| | | reqJson.put("nextUserId", reqJson.getString("staffId")); |
| | | boolean isLastTask = oaWorkflowUserInnerServiceSMOImpl.completeTask(reqJson); |
| | | if (isLastTask) { |
| | | tmpAllocationStorehouseApplyPo.setState(AllocationStorehouseApplyDto.STATE_END); |
| | | } else { |
| | | tmpAllocationStorehouseApplyPo.setState(AllocationStorehouseApplyDto.STATE_DEALING); |
| | | } |
| | | } else { |
| | | tmpAllocationStorehouseApplyPo.setState(AllocationStorehouseApplyDto.STATE_DEALING); |
| | | } |
| | | tmpAllocationStorehouseApplyPo.setStatusCd("0"); |
| | | allocationStorehouseApplyV1InnerServiceSMOImpl.updateAllocationStorehouseApply(tmpAllocationStorehouseApplyPo); |
| | | } |
| | | |
| | | /** |
| | |
| | | if (flag < 1) { |
| | | throw new CmdException("保存修改物品失败"); |
| | | } |
| | | //退还数量 |
| | | //todo 退还数量 |
| | | allocationStorehouseApplyPo.setApplyCount(resObj.getString("curStock")); |
| | | //返还的仓库物品加上库存 |
| | | //todo 返还的仓库物品加上库存 |
| | | ResourceStoreDto resourceStoreDto = new ResourceStoreDto(); |
| | | resourceStoreDto.setResCode(resObj.getString("resCode")); |
| | | resourceStoreDto.setShId(resObj.getString("shzId")); |
| | | //查询目标仓库下该物品信息(根据目标仓库和物品编码查询) |
| | | //todo 查询目标仓库下该物品信息(根据目标仓库和物品编码查询) |
| | | List<ResourceStoreDto> resourceStoreDtos = resourceStoreInnerServiceSMOImpl.queryResourceStores(resourceStoreDto); |
| | | if (resourceStoreDtos != null && resourceStoreDtos.size() > 0) { //如果目标仓库下有这个物品信息,就更新该物品库存 |
| | | for (ResourceStoreDto resourceStore : resourceStoreDtos) { |
| | |
| | | if (flag < 1) { |
| | | throw new CmdException("保存修改物品失败"); |
| | | } |
| | | |
| | | |
| | | // 保存至 物品 times表 |
| | | //todo 保存至 物品 times表 |
| | | //查询调拨批次价格 |
| | | ResourceStoreTimesDto resourceStoreTimesDto = new ResourceStoreTimesDto(); |
| | | resourceStoreTimesDto.setTimesId(resObj.getString("timesId")); |
| | |
| | | resourceStoreTimesPo.setTimesId(GenerateCodeFactory.getGeneratorId("10")); |
| | | resourceStoreTimesPo.setShId(resObj.getString("shzId")); |
| | | resourceStoreTimesV1InnerServiceSMOImpl.saveOrUpdateResourceStoreTimes(resourceStoreTimesPo); |
| | | |
| | | |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | if (flag < 1) { |
| | | throw new CmdException("保存调拨物品失败"); |
| | | } |
| | | |
| | | int applyCount = Integer.parseInt(allocationStorehouseApplyPo.getApplyCount()); |
| | | applyCount += resObj.getIntValue("curStock"); |
| | | allocationStorehouseApplyPo.setApplyCount(applyCount + ""); |
| | | } |
| | | |
| | | /** |