package com.java110.store.cmd.resourceStore; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.java110.core.annotation.Java110Cmd; 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.dto.purchase.AllocationStorehouseApplyDto; import com.java110.dto.purchase.AllocationStorehouseDto; import com.java110.dto.resource.ResourceStoreTimesDto; import com.java110.intf.common.IOaWorkflowActivitiInnerServiceSMO; import com.java110.intf.store.*; import com.java110.po.purchase.AllocationStorehouseApplyPo; import com.java110.po.purchase.AllocationStorehousePo; import com.java110.store.bmo.allocation.IAllocationBMO; import com.java110.utils.exception.CmdException; import com.java110.utils.util.Assert; import com.java110.vo.ResultVo; import org.springframework.beans.factory.annotation.Autowired; import java.text.ParseException; import java.util.List; /** * 调拨入库 */ @Java110Cmd(serviceCode = "resourceStore.allocationStoreEnter") public class AllocationStoreEnterCmd extends Cmd { @Autowired private IAllocationStorehouseApplyInnerServiceSMO allocationStorehouseApplyInnerServiceSMOImpl; @Autowired private IResourceStoreTimesV1InnerServiceSMO resourceStoreTimesV1InnerServiceSMOImpl; @Autowired private IAllocationStorehouseApplyV1InnerServiceSMO allocationStorehouseApplyV1InnerServiceSMOImpl; @Autowired private IAllocationStorehouseV1InnerServiceSMO allocationStorehouseV1InnerServiceSMOImpl; @Autowired private IAllocationBMO allocationBMOImpl; @Autowired private IOaWorkflowActivitiInnerServiceSMO oaWorkflowUserInnerServiceSMOImpl; @Override public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException { Assert.hasKeyAndValue(reqJson, "applyId", "订单ID为空"); AllocationStorehouseApplyDto allocationStorehouseApplyDto = new AllocationStorehouseApplyDto(); allocationStorehouseApplyDto.setApplyId(reqJson.getString("applyId")); List allocationStorehouseDtos = allocationStorehouseApplyInnerServiceSMOImpl.queryAllocationStorehouseApplys(allocationStorehouseApplyDto); Assert.listOnlyOne(allocationStorehouseDtos, "调拨申请单存在多条"); if (!reqJson.containsKey("resourceStores")) { throw new CmdException("未包含物品"); } JSONArray resourceStores = reqJson.getJSONArray("resourceStores"); if (resourceStores == null || resourceStores.size() < 1) { throw new CmdException("未包含物品"); } JSONObject resourceStore = null; ResourceStoreTimesDto resourceStoreTimesDto = null; List resourceStoreTimesDtos = null; double originStock = 0; for (int detailIndex = 0; detailIndex < resourceStores.size(); detailIndex++) { resourceStore = resourceStores.getJSONObject(detailIndex); Assert.hasKeyAndValue(resourceStore, "quantity", "调拨数量未包含"); Assert.hasKeyAndValue(resourceStore, "shIda", "原仓库不存在"); Assert.hasKeyAndValue(resourceStore, "shIdz", "目标仓库不存在"); Assert.hasKeyAndValue(resourceStore, "timesId", "单价未填写"); Assert.hasKeyAndValue(resourceStore, "resCode", "物品编码未填写"); Assert.hasKeyAndValue(resourceStore, "asId", "调拨明细未填写"); resourceStoreTimesDto = new ResourceStoreTimesDto(); resourceStoreTimesDto.setTimesId(resourceStore.getString("timesId")); resourceStoreTimesDto.setShId(resourceStore.getString("shIda")); resourceStoreTimesDtos = resourceStoreTimesV1InnerServiceSMOImpl.queryResourceStoreTimess(resourceStoreTimesDto); Assert.listOnlyOne(resourceStoreTimesDtos, "物品不存在"); originStock = Double.parseDouble(resourceStoreTimesDtos.get(0).getStock()); double quantity = Double.parseDouble(resourceStore.getString("quantity")); if (originStock < quantity) { throw new CmdException(reqJson.getString("resCode") + "库存不足"); } } } @Override public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException { JSONArray resourceStores = reqJson.getJSONArray("resourceStores"); JSONObject resourceStore = null; double quantity = 0; for (int detailIndex = 0; detailIndex < resourceStores.size(); detailIndex++) { resourceStore = resourceStores.getJSONObject(detailIndex); //todo 查询调拨记录 AllocationStorehouseDto allocationStorehouseDto = new AllocationStorehouseDto(); allocationStorehouseDto.setApplyId(reqJson.getString("applyId")); allocationStorehouseDto.setAsId(resourceStore.getString("asId")); List allocationStorehouseDtos = allocationStorehouseV1InnerServiceSMOImpl.queryAllocationStorehouses(allocationStorehouseDto); quantity = Double.parseDouble(resourceStore.getString("quantity")); //todo 每条记录调拨 allocationBMOImpl.doToAllocationStorehouse(allocationStorehouseDtos.get(0), quantity); //把调拨申请库存更新为实际调拨库存 AllocationStorehousePo allocationStorehousePo = new AllocationStorehousePo(); allocationStorehousePo.setAsId(resourceStore.getString("asId")); allocationStorehousePo.setStock(resourceStore.getString("quantity")); allocationStorehouseV1InnerServiceSMOImpl.updateAllocationStorehouse(allocationStorehousePo); } String applyId = reqJson.getString("applyId"); AllocationStorehouseApplyPo allocationStorehouseApplyPo = new AllocationStorehouseApplyPo(); allocationStorehouseApplyPo.setApplyId(applyId); //todo 如果包含taskId 流程提交下去 if (reqJson.containsKey("taskId")) { reqJson.put("auditCode", "1100"); reqJson.put("auditMessage", "入库成功"); reqJson.put("id", reqJson.getString("applyId")); reqJson.put("storeId", CmdContextUtils.getStoreId(context)); reqJson.put("nextUserId", reqJson.getString("staffId")); boolean isLastTask = oaWorkflowUserInnerServiceSMOImpl.completeTask(reqJson); if (isLastTask) { allocationStorehouseApplyPo.setState(AllocationStorehouseApplyDto.STATE_END); } else { allocationStorehouseApplyPo.setState(AllocationStorehouseApplyDto.STATE_DEALING); } } else { allocationStorehouseApplyPo.setState(AllocationStorehouseApplyDto.STATE_DEALING); } allocationStorehouseApplyPo.setStatusCd("0"); allocationStorehouseApplyV1InnerServiceSMOImpl.updateAllocationStorehouseApply(allocationStorehouseApplyPo); context.setResponseEntity(ResultVo.createResponseEntity(ResultVo.CODE_OK, "采购申请成功")); } }