Explorar el Código

优化完成 领用

java110 hace 2 años
padre
commit
844a40f605

+ 5 - 5
java110-bean/src/main/java/com/java110/dto/store/StorehouseDto.java

@@ -36,7 +36,7 @@ public class StorehouseDto extends PageDto implements Serializable {
     private String purchaseFlowId;
     private String useSwitch;
     private String useRafId;
-    private String useRafFlowId;
+    private String useFlowId;
     private String allocationSwitch;
     private String allocationRafId;
     private String allocationFlowId;
@@ -192,12 +192,12 @@ public class StorehouseDto extends PageDto implements Serializable {
         this.purchaseFlowId = purchaseFlowId;
     }
 
-    public String getUseRafFlowId() {
-        return useRafFlowId;
+    public String getUseFlowId() {
+        return useFlowId;
     }
 
-    public void setUseRafFlowId(String useRafFlowId) {
-        this.useRafFlowId = useRafFlowId;
+    public void setUseFlowId(String useFlowId) {
+        this.useFlowId = useFlowId;
     }
 
     public String getAllocationFlowId() {

+ 12 - 12
service-community/src/main/java/com/java110/community/cmd/community/SaveCommunityCmd.java

@@ -134,18 +134,18 @@ public class SaveCommunityCmd extends Cmd {
             throw new IllegalArgumentException("添加流程失败");
         }
 
-        WorkflowPo workflowPo1 = null;
-        workflowPo1 = new WorkflowPo();
-        workflowPo1.setCommunityId(reqJson.getString("communityId"));
-        workflowPo1.setFlowId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_flowId));
-        workflowPo1.setFlowName("物品领用");
-        workflowPo1.setFlowType(WorkflowDto.FLOW_TYPE_COLLECTION);
-        workflowPo1.setSkipLevel(WorkflowDto.DEFAULT_SKIP_LEVEL);
-        workflowPo1.setStoreId(reqJson.getString("storeId"));
-        flag = workflowV1InnerServiceSMOImpl.saveWorkflow(workflowPo1);
-        if (flag < 1) {
-            throw new IllegalArgumentException("添加流程失败");
-        }
+//        WorkflowPo workflowPo1 = null;
+//        workflowPo1 = new WorkflowPo();
+//        workflowPo1.setCommunityId(reqJson.getString("communityId"));
+//        workflowPo1.setFlowId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_flowId));
+//        workflowPo1.setFlowName("物品领用");
+//        workflowPo1.setFlowType(WorkflowDto.FLOW_TYPE_COLLECTION);
+//        workflowPo1.setSkipLevel(WorkflowDto.DEFAULT_SKIP_LEVEL);
+//        workflowPo1.setStoreId(reqJson.getString("storeId"));
+//        flag = workflowV1InnerServiceSMOImpl.saveWorkflow(workflowPo1);
+//        if (flag < 1) {
+//            throw new IllegalArgumentException("添加流程失败");
+//        }
 
         WorkflowPo workflowPo2 = new WorkflowPo();
         workflowPo2.setCommunityId(reqJson.getString("communityId")); //被调拨小区

+ 0 - 77
service-store/src/main/java/com/java110/store/api/CollectionApi.java

@@ -64,59 +64,7 @@ public class CollectionApi {
     private IResourceStoreTimesV1InnerServiceSMO resourceStoreTimesV1InnerServiceSMOImpl;
 
 
-    /**
-     * 物品领用 接口类
-     *
-     * @param reqJson
-     * @param userId
-     * @param storeId
-     * @return {"resourceStores":[{"resId":"852020070239060001","resName":"水性笔","resCode":"002","price":"2.00","stock":"2",
-     * "description":"黑色","quantity":"1"}],"description":"123123","endUserName":"1","endUserTel":"17797173942","file":"",
-     * "resOrderType":"20000","staffId":"","staffName":""}
-     */
-    @RequestMapping(value = "/goodsCollection", method = RequestMethod.POST)
-    public ResponseEntity<String> goodsCollection(@RequestBody JSONObject reqJson,
-                                                  @RequestHeader(value = "user-id") String userId,
-                                                  @RequestHeader(value = "store-id") String storeId) {
-
-        UserDto userDto = new UserDto();
-        userDto.setUserId(userId);
-        List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
-
-        Assert.listOnlyOne(userDtos,"未包含用户");
-
 
-        String userName  = userDtos.get(0).getName();
-
-        Assert.hasKeyAndValue(reqJson, "resourceStores", "必填,请填写物品领用的物资");
-        Assert.hasKeyAndValue(reqJson, "description", "必填,请填写采购申请说明");
-        PurchaseApplyPo purchaseApplyPo = new PurchaseApplyPo();
-        purchaseApplyPo.setApplyOrderId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_applyOrderId));
-        purchaseApplyPo.setDescription(reqJson.getString("description"));
-        purchaseApplyPo.setUserId(userId);
-        purchaseApplyPo.setUserName(userName);
-        purchaseApplyPo.setEndUserName(reqJson.getString("endUserName"));
-        purchaseApplyPo.setEndUserTel(reqJson.getString("endUserTel"));
-        purchaseApplyPo.setStoreId(storeId);
-        purchaseApplyPo.setResOrderType(PurchaseApplyDto.RES_ORDER_TYPE_OUT);
-        purchaseApplyPo.setState(PurchaseApplyDto.STATE_WAIT_DEAL);
-        purchaseApplyPo.setCreateTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
-        purchaseApplyPo.setCreateUserId(userId);
-        purchaseApplyPo.setCreateUserName(userName);
-        purchaseApplyPo.setWarehousingWay(PurchaseApplyDto.WAREHOUSING_TYPE_APPLY);
-        purchaseApplyPo.setCommunityId(reqJson.getString("communityId"));
-        JSONArray resourceStores = reqJson.getJSONArray("resourceStores");
-        List<PurchaseApplyDetailPo> purchaseApplyDetailPos = new ArrayList<>();
-        for (int resourceStoreIndex = 0; resourceStoreIndex < resourceStores.size(); resourceStoreIndex++) {
-            JSONObject resourceStore = resourceStores.getJSONObject(resourceStoreIndex);
-            resourceStore.put("originalStock", resourceStore.get("stock"));
-            PurchaseApplyDetailPo purchaseApplyDetailPo = BeanConvertUtil.covertBean(resourceStore, PurchaseApplyDetailPo.class);
-            purchaseApplyDetailPo.setId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_applyOrderId));
-            purchaseApplyDetailPos.add(purchaseApplyDetailPo);
-        }
-        purchaseApplyPo.setPurchaseApplyDetailPos(purchaseApplyDetailPos);
-        return goodsCollectionBMOImpl.collection(purchaseApplyPo,reqJson);
-    }
 
     /**
      * 查询审核单
@@ -142,31 +90,6 @@ public class CollectionApi {
         return getCollectionAuditOrderBMOImpl.auditOrder(auditUser);
     }
 
-    /**
-     * 物品发放(物品发放之后直接到个人手中)
-     * {"resourceOuts":[],"applyOrderId":"152020071665420001","taskId":"237506","resOrderType":"20000",
-     * "purchaseApplyDetailVo":[{"applyOrderId":"152020071665420001","id":"152020071690120002","price":"","quantity":"1",
-     * "resCode":"002","resId":"852020070239060001","resName":"水性笔","stock":"2","purchaseQuantity":"2","purchaseRemark":""}]}
-     */
-
-    @RequestMapping(value = "/resourceOut", method = RequestMethod.POST)
-    public ResponseEntity<String> resourceOut(@RequestBody JSONObject reqJson) {
-        Assert.hasKeyAndValue(reqJson, "applyOrderId", "订单ID为空");
-        JSONArray purchaseApplyDetails = reqJson.getJSONArray("purchaseApplyDetailVo");
-        List<PurchaseApplyDetailPo> purchaseApplyDetailPos = new ArrayList<>();
-        for (int detailIndex = 0; detailIndex < purchaseApplyDetails.size(); detailIndex++) {
-            JSONObject purchaseApplyDetail = purchaseApplyDetails.getJSONObject(detailIndex);
-            Assert.hasKeyAndValue(purchaseApplyDetail, "purchaseQuantity", "采购数量未填写");
-            Assert.hasKeyAndValue(purchaseApplyDetail, "id", "明细ID为空");
-            PurchaseApplyDetailPo purchaseApplyDetailPo = BeanConvertUtil.covertBean(purchaseApplyDetail, PurchaseApplyDetailPo.class);
-            purchaseApplyDetailPos.add(purchaseApplyDetailPo);
-        }
-        PurchaseApplyPo purchaseApplyPo = new PurchaseApplyPo();
-        purchaseApplyPo.setApplyOrderId(reqJson.getString("applyOrderId"));
-        purchaseApplyPo.setPurchaseApplyDetailPos(purchaseApplyDetailPos);
-        return resourceOutBMOImpl.out(purchaseApplyPo);
-    }
-
     /**
      * 物品领用-物品直接出库
      */

+ 153 - 0
service-store/src/main/java/com/java110/store/cmd/collection/GetCollectionAuditOrderCmd.java

@@ -0,0 +1,153 @@
+package com.java110.store.cmd.collection;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Cmd;
+import com.java110.core.context.ICmdDataFlowContext;
+import com.java110.core.event.cmd.Cmd;
+import com.java110.core.event.cmd.CmdEvent;
+import com.java110.dto.audit.AuditUser;
+import com.java110.dto.oaWorkflow.OaWorkflowDto;
+import com.java110.dto.oaWorkflow.WorkflowDto;
+import com.java110.dto.purchase.PurchaseApplyDto;
+import com.java110.intf.common.IOaWorkflowActivitiInnerServiceSMO;
+import com.java110.intf.common.IResourceEntryStoreInnerServiceSMO;
+import com.java110.intf.oa.IOaWorkflowInnerServiceSMO;
+import com.java110.intf.store.IPurchaseApplyInnerServiceSMO;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.vo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Java110Cmd(serviceCode = "/collection/getCollectionAuditOrder")
+public class GetCollectionAuditOrderCmd extends Cmd {
+
+    @Autowired
+    private IResourceEntryStoreInnerServiceSMO resourceEntryStoreInnerServiceSMOImpl;
+
+    @Autowired
+    private IOaWorkflowActivitiInnerServiceSMO oaWorkflowUserInnerServiceSMOImpl;
+
+    @Autowired
+    private IOaWorkflowInnerServiceSMO oaWorkflowInnerServiceSMOImpl;
+
+    @Autowired
+    private IPurchaseApplyInnerServiceSMO purchaseApplyInnerServiceSMOImpl;
+
+    @Autowired
+    private IOaWorkflowActivitiInnerServiceSMO oaWorkflowActivitiInnerServiceSMOImpl;
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+        Assert.hasKeyAndValue(reqJson, "row", "必填,请填写每页显示数");
+        Assert.hasKeyAndValue(reqJson, "page", "必填,请填写页数");
+
+        super.validatePageInfo(reqJson);
+    }
+
+    @Override
+    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+        String userId = context.getReqHeaders().get("user-id");
+        String storeId = context.getReqHeaders().get("store-id");
+
+        OaWorkflowDto oaWorkflowDto = new OaWorkflowDto();
+        oaWorkflowDto.setState(OaWorkflowDto.STATE_COMPLAINT);
+        oaWorkflowDto.setFlowType(OaWorkflowDto.FLOW_TYPE_RESOURCE_OUT);
+        List<OaWorkflowDto> oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto);
+
+        if (oaWorkflowDtos == null || oaWorkflowDtos.size() < 1) {
+            return;
+        }
+        List<String> flowIds = new ArrayList<>();
+        for (OaWorkflowDto tmpOaWorkflowDto : oaWorkflowDtos) {
+            flowIds.add(WorkflowDto.DEFAULT_PROCESS + tmpOaWorkflowDto.getFlowId());
+        }
+
+        AuditUser auditUser = new AuditUser();
+        auditUser.setProcessDefinitionKeys(flowIds);
+        auditUser.setUserId(userId);
+        auditUser.setStoreId(storeId);
+        auditUser.setPage(reqJson.getInteger("page"));
+        auditUser.setRow(reqJson.getInteger("row"));
+
+        long count = oaWorkflowUserInnerServiceSMOImpl.getDefinitionKeysUserTaskCount(auditUser);
+
+        List<JSONObject> datas = null;
+
+        if (count > 0) {
+            datas = oaWorkflowUserInnerServiceSMOImpl.getDefinitionKeysUserTasks(auditUser);
+            //刷新 表单数据
+            refreshFormData(datas, reqJson, storeId);
+        } else {
+            datas = new ArrayList<>();
+        }
+
+        ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) reqJson.getInteger("row")), count, datas);
+
+        ResponseEntity<String> responseEntity = new ResponseEntity<String>(resultVo.toString(), HttpStatus.OK);
+        context.setResponseEntity(responseEntity);
+    }
+
+    private void refreshFormData(List<JSONObject> datas, JSONObject paramIn, String storeId) {
+
+        List<String> ids = new ArrayList<>();
+        for (JSONObject data : datas) {
+            ids.add(data.getString("id"));
+        }
+        if (ids.size() < 1) {
+            return;
+        }
+
+        //todo 查询 领用
+        PurchaseApplyDto purchaseApplyDto = new PurchaseApplyDto();
+        purchaseApplyDto.setStoreId(storeId);
+        purchaseApplyDto.setApplyOrderIds(ids.toArray(new String[ids.size()]));
+        List<PurchaseApplyDto> tmpPurchaseApplyDtos = purchaseApplyInnerServiceSMOImpl.queryPurchaseApplyAndDetails(purchaseApplyDto);
+
+        if (tmpPurchaseApplyDtos == null || tmpPurchaseApplyDtos.size() < 1) {
+            return;
+        }
+
+        for (PurchaseApplyDto tmpPurchaseApplyDto : tmpPurchaseApplyDtos) {
+            switch (tmpPurchaseApplyDto.getState()) {
+                case "1000":
+                    tmpPurchaseApplyDto.setStateName("待审核");
+                    break;
+                case "1001":
+                    tmpPurchaseApplyDto.setStateName("审核中");
+                    break;
+                case "1002":
+                    tmpPurchaseApplyDto.setStateName("已审核");
+                    break;
+            }
+            if (tmpPurchaseApplyDto.getResOrderType().equals("10000")) {
+                tmpPurchaseApplyDto.setResOrderTypeName("采购申请");
+            } else {
+                tmpPurchaseApplyDto.setResOrderTypeName("出库申请");
+            }
+
+
+        }
+        JSONObject curTaskNode = null;
+        for (JSONObject data : datas) {
+
+            //todo 计算 当前节点名称
+            curTaskNode = new JSONObject();
+            curTaskNode.put("taskId", data.getString("taskId"));
+            curTaskNode = oaWorkflowActivitiInnerServiceSMOImpl.getCurrentNodeTask(curTaskNode);
+            data.put("curTaskName", curTaskNode.getString("curTaskName"));
+
+            for (PurchaseApplyDto form : tmpPurchaseApplyDtos) {
+                if (data.getString("id").equals(form.getApplyOrderId())) {
+                    data.putAll(BeanConvertUtil.beanCovertJson(form));
+                }
+            }
+        }
+    }
+}

+ 281 - 13
service-store/src/main/java/com/java110/store/cmd/collection/GoodsCollectionCmd.java

@@ -4,19 +4,29 @@ import com.alibaba.fastjson.JSONArray;
 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.oaWorkflow.OaWorkflowDto;
+import com.java110.dto.purchase.PurchaseApplyDetailDto;
 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.user.UserStorehouseDto;
 import com.java110.intf.common.IGoodCollectionUserInnerServiceSMO;
-import com.java110.intf.store.IPurchaseApplyInnerServiceSMO;
-import com.java110.intf.store.IResourceStoreTimesV1InnerServiceSMO;
+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.purchase.PurchaseApplyDetailPo;
 import com.java110.po.purchase.PurchaseApplyPo;
+import com.java110.po.purchase.ResourceStorePo;
+import com.java110.po.resource.ResourceStoreTimesPo;
+import com.java110.po.user.UserStorehousePo;
 import com.java110.utils.exception.CmdException;
 import com.java110.utils.util.Assert;
 import com.java110.utils.util.BeanConvertUtil;
@@ -25,6 +35,7 @@ import com.java110.utils.util.StringUtil;
 import com.java110.vo.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.math.BigDecimal;
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.List;
@@ -42,24 +53,45 @@ public class GoodsCollectionCmd extends Cmd {
     @Autowired
     private IPurchaseApplyInnerServiceSMO purchaseApplyInnerServiceSMOImpl;
 
+    @Autowired
+    private IStorehouseV1InnerServiceSMO storehouseV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IOaWorkflowInnerServiceSMO oaWorkflowInnerServiceSMOImpl;
+
+    @Autowired
+    private IOaWorkflowActivitiInnerServiceSMO oaWorkflowActivitiInnerServiceSMOImpl;
 
     @Autowired
     private IGoodCollectionUserInnerServiceSMO goodCollectionUserInnerServiceSMOImpl;
+    @Autowired
+    private IResourceStoreInnerServiceSMO resourceStoreInnerServiceSMOImpl;
+    @Autowired
+    private IPurchaseApplyDetailInnerServiceSMO purchaseApplyDetailInnerServiceSMOImpl;
 
     @Autowired
     private IResourceStoreTimesV1InnerServiceSMO resourceStoreTimesV1InnerServiceSMOImpl;
 
+    @Autowired
+    private IUserStorehouseInnerServiceSMO userStorehouseInnerServiceSMOImpl;
+
     @Override
     public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
         Assert.hasKeyAndValue(reqJson, "resourceStores", "必填,请填写物品领用的物资");
         Assert.hasKeyAndValue(reqJson, "description", "必填,请填写采购申请说明");
+        Assert.hasKeyAndValue(reqJson, "shId", "必填,请填写采购申请说明");
+        Assert.hasKeyAndValue(reqJson, "endUserName", "必填,请填写采购联系人");
+        Assert.hasKeyAndValue(reqJson, "endUserTel", "必填,请填写采购联系电话");
+        Assert.hasKeyAndValue(reqJson, "communityId", "必填,请填写小区信息");
 
         JSONArray resourceStores = reqJson.getJSONArray("resourceStores");
-        String storeId = context.getReqHeaders().get("store-id");
+        String storeId = CmdContextUtils.getStoreId(context);
 
         if (resourceStores == null || resourceStores.size() < 1) {
             throw new CmdException("未包含领用物品");
         }
+        int quanitity = 0;
+        int stock = 0;
         for (int resourceStoreIndex = 0; resourceStoreIndex < resourceStores.size(); resourceStoreIndex++) {
             JSONObject resourceStore = resourceStores.getJSONObject(resourceStoreIndex);
             Assert.hasKeyAndValue(resourceStore, "timesId", "必填,未选择价格");
@@ -71,7 +103,41 @@ public class GoodsCollectionCmd extends Cmd {
 
             Assert.listOnlyOne(resourceStoreTimesDtos, "价格不存在");
 
-            resourceStore.put("resourceStoreTimesDtos",resourceStoreTimesDtos);
+            quanitity = resourceStore.getIntValue("quantity");
+
+            if (quanitity < 1) {
+                throw new CmdException("申请数量不正确");
+            }
+            stock = Integer.parseInt(resourceStoreTimesDtos.get(0).getStock());
+
+            if (quanitity > stock) {
+                throw new CmdException(resourceStoreTimesDtos.get(0).getResCode() + "出库不足,库存为=" + stock + ",申请数为=" + quanitity);
+            }
+
+            resourceStore.put("resourceStoreTimesDtos", resourceStoreTimesDtos);
+        }
+
+        //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).getUseSwitch())) {
+            return;
+        }
+
+        OaWorkflowDto oaWorkflowDto = new OaWorkflowDto();
+        oaWorkflowDto.setStoreId(storeId);
+        oaWorkflowDto.setFlowId(storehouseDtos.get(0).getUseFlowId());
+        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() + "流程未部署");
         }
 
 
@@ -79,9 +145,10 @@ public class GoodsCollectionCmd extends Cmd {
 
     /**
      * 物品领用申请-发起
-     * @param event              事件对象
+     *
+     * @param event   事件对象
      * @param context 数据上文对象
-     * @param reqJson            请求报文
+     * @param reqJson 请求报文
      * @throws CmdException
      * @throws ParseException
      */
@@ -90,6 +157,13 @@ public class GoodsCollectionCmd extends Cmd {
     public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
         String storeId = context.getReqHeaders().get("store-id");
         String userId = context.getReqHeaders().get("user-id");
+
+        //todo 查询仓库是否存在
+        StorehouseDto storehouseDto = new StorehouseDto();
+        storehouseDto.setShId(reqJson.getString("shId"));
+        List<StorehouseDto> storehouseDtos = storehouseV1InnerServiceSMOImpl.queryStorehouses(storehouseDto);
+        Assert.listOnlyOne(storehouseDtos, "仓库不存在");
+
         UserDto userDto = new UserDto();
         userDto.setUserId(userId);
         List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
@@ -113,6 +187,7 @@ public class GoodsCollectionCmd extends Cmd {
         purchaseApplyPo.setCreateUserName(userName);
         purchaseApplyPo.setWarehousingWay(PurchaseApplyDto.WAREHOUSING_TYPE_APPLY);
         purchaseApplyPo.setCommunityId(reqJson.getString("communityId"));
+        //todo 封装物品
         JSONArray resourceStores = reqJson.getJSONArray("resourceStores");
         List<PurchaseApplyDetailPo> purchaseApplyDetailPos = new ArrayList<>();
         List<ResourceStoreTimesDto> resourceStoreTimesDtos = null;
@@ -125,14 +200,16 @@ public class GoodsCollectionCmd extends Cmd {
             purchaseApplyDetailPo.setPrice(resourceStoreTimesDtos.get(0).getPrice());
             purchaseApplyDetailPo.setTimesId(resourceStoreTimesDtos.get(0).getTimesId());
             purchaseApplyDetailPo.setOriginalStock(resourceStoreTimesDtos.get(0).getStock());
-            //获取批次采购参考价格
+            purchaseApplyDetailPo.setPurchaseQuantity(resourceStore.getString("quantity"));
+
+            //todo 获取批次采购参考价格
             String consultPrice = null;
             JSONArray timeList = resourceStore.getJSONArray("times");
-            if(resourceStore.containsKey("timesId") && !StringUtil.isEmpty(resourceStore.getString("timesId"))){
+            if (resourceStore.containsKey("timesId") && !StringUtil.isEmpty(resourceStore.getString("timesId"))) {
                 for (int timesIndex = 0; timesIndex < timeList.size(); timesIndex++) {
                     JSONObject times = timeList.getJSONObject(timesIndex);
-                    if(times.getString("timesId").toString().equals(resourceStore.getString("timesId").toString())){
-                        consultPrice=times.getString("price");
+                    if (times.getString("timesId").toString().equals(resourceStore.getString("timesId").toString())) {
+                        consultPrice = times.getString("price");
                     }
                 }
             }
@@ -149,9 +226,200 @@ public class GoodsCollectionCmd extends Cmd {
         PurchaseApplyDto purchaseApplyDto = BeanConvertUtil.covertBean(purchaseApplyPo, PurchaseApplyDto.class);
         purchaseApplyDto.setCurrentUserId(purchaseApplyPo.getUserId());
         purchaseApplyDto.setNextStaffId(reqJson.getString("staffId"));
-        if (!PurchaseApplyDto.WAREHOUSING_TYPE_DIRECT.equals(purchaseApplyPo.getWarehousingWay())) {
-            goodCollectionUserInnerServiceSMOImpl.startProcess(purchaseApplyDto);
-        }
+        //todo 启动审核流程
+        toStartWorkflow(purchaseApplyDto, storehouseDtos.get(0), reqJson);
+
         context.setResponseEntity(ResultVo.createResponseEntity(ResultVo.CODE_OK, "物品领用成功"));
     }
+
+    /**
+     * 启动审批流程
+     *
+     * @param purchaseApplyDto
+     */
+    private void toStartWorkflow(PurchaseApplyDto purchaseApplyDto, StorehouseDto storehouseDto, JSONObject reqJson) {
+
+        if (!StorehouseDto.SWITCH_ON.equals(storehouseDto.getUseSwitch())) {
+            //todo 直接入库
+            toPurchaseOutStorehouse(purchaseApplyDto, storehouseDto, reqJson);
+            return;
+        }
+
+        OaWorkflowDto oaWorkflowDto = new OaWorkflowDto();
+        oaWorkflowDto.setStoreId(purchaseApplyDto.getStoreId());
+        oaWorkflowDto.setFlowId(storehouseDto.getUseFlowId());
+        List<OaWorkflowDto> oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto);
+
+        //todo 提交审核
+        JSONObject flowJson = new JSONObject();
+        flowJson.put("processDefinitionKey", oaWorkflowDtos.get(0).getProcessDefinitionKey());
+        flowJson.put("createUserId", purchaseApplyDto.getCurrentUserId());
+        flowJson.put("flowId", oaWorkflowDtos.get(0).getFlowId());
+        flowJson.put("id", purchaseApplyDto.getApplyOrderId());
+        flowJson.put("auditMessage", "提交审核");
+        flowJson.put("storeId", purchaseApplyDto.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", purchaseApplyDto.getCurrentUserId());
+        flowJson.put("nextUserId", nextUserId);
+        flowJson.put("storeId", purchaseApplyDto.getStoreId());
+        flowJson.put("id", purchaseApplyDto.getApplyOrderId());
+        flowJson.put("flowId", oaWorkflowDtos.get(0).getFlowId());
+
+        oaWorkflowActivitiInnerServiceSMOImpl.autoFinishFirstTask(flowJson);
+    }
+
+    /**
+     * 入库
+     *
+     * @param purchaseApplyDto
+     * @param storehouseDto
+     * @param reqJson
+     */
+    private void toPurchaseOutStorehouse(PurchaseApplyDto purchaseApplyDto, StorehouseDto storehouseDto, JSONObject reqJson) {
+
+        PurchaseApplyDetailDto purchaseApplyDetailDto = new PurchaseApplyDetailDto();
+        purchaseApplyDetailDto.setApplyOrderId(purchaseApplyDto.getApplyOrderId());
+        purchaseApplyDetailDto.setStoreId(purchaseApplyDto.getStoreId());
+        List<PurchaseApplyDetailDto> purchaseApplyDetailDtos = purchaseApplyDetailInnerServiceSMOImpl.queryPurchaseApplyDetails(purchaseApplyDetailDto);
+
+        if (purchaseApplyDetailDtos == null || purchaseApplyDetailDtos.size() < 1) {
+            return;
+        }
+
+        int stock = 0;
+        for (PurchaseApplyDetailDto tmpPurchaseApplyDetailDto : purchaseApplyDetailDtos) {
+            ResourceStorePo resourceStorePo = new ResourceStorePo();
+            resourceStorePo.setResId(tmpPurchaseApplyDetailDto.getResId());
+            resourceStorePo.setPurchasePrice(tmpPurchaseApplyDetailDto.getPrice());
+            resourceStorePo.setStock("-" + tmpPurchaseApplyDetailDto.getPurchaseQuantity());
+            resourceStorePo.setResOrderType(PurchaseApplyDto.RES_ORDER_TYPE_OUT);
+            //查询物品资源信息
+            ResourceStoreDto resourceStoreDto = new ResourceStoreDto();
+            resourceStoreDto.setResId(tmpPurchaseApplyDetailDto.getResId());
+            resourceStoreDto.setShId(tmpPurchaseApplyDetailDto.getShId());
+            List<ResourceStoreDto> resourceStoreDtos = resourceStoreInnerServiceSMOImpl.queryResourceStores(resourceStoreDto);
+            Assert.listOnlyOne(resourceStoreDtos, "查询物品资源信息错误!");
+            if (StringUtil.isEmpty(resourceStoreDtos.get(0).getMiniUnitStock())) {
+                throw new IllegalArgumentException("最小计量单位数量不能为空!");
+            }
+            //获取最小计量单位数量
+            BigDecimal miniUnitStock = new BigDecimal(resourceStoreDtos.get(0).getMiniUnitStock());
+            if (StringUtil.isEmpty(resourceStoreDtos.get(0).getMiniStock())) {
+                throw new IllegalArgumentException("最小计量总数不能为空!");
+            }
+            //获取采购前物品最小计量总数
+//            BigDecimal miniStock = new BigDecimal(resourceStoreDtos.get(0).getMiniStock());
+//            //计算采购的物品最小计量总数
+//            BigDecimal purchaseQuantity = new BigDecimal(tmpPurchaseApplyDetailDto.getPurchaseQuantity());
+//            BigDecimal purchaseMiniStock = purchaseQuantity.multiply(miniUnitStock);
+//            //计算采购后物品最小计量总数
+//            BigDecimal nowMiniStock = miniStock.subtract(purchaseMiniStock);
+//            if (nowMiniStock.compareTo(BigDecimal.ZERO) == -1) {
+//                throw new IllegalArgumentException("物品库存已经不足,请确认物品库存!");
+//            }
+//            resourceStorePo.setMiniStock(String.valueOf(nowMiniStock));
+            resourceStoreInnerServiceSMOImpl.updateResourceStore(resourceStorePo);
+
+            // 保存至 物品 times表
+            ResourceStoreTimesPo resourceStoreTimesPo = new ResourceStoreTimesPo();
+            resourceStoreTimesPo.setApplyOrderId(tmpPurchaseApplyDetailDto.getApplyOrderId());
+            resourceStoreTimesPo.setPrice(tmpPurchaseApplyDetailDto.getPrice());
+            resourceStoreTimesPo.setStock("-" + tmpPurchaseApplyDetailDto.getPurchaseQuantity());
+            resourceStoreTimesPo.setResCode(resourceStoreDtos.get(0).getResCode());
+            resourceStoreTimesPo.setStoreId(resourceStoreDtos.get(0).getStoreId());
+            resourceStoreTimesPo.setTimesId(GenerateCodeFactory.getGeneratorId("10"));
+            resourceStoreTimesPo.setShId(tmpPurchaseApplyDetailDto.getShId());
+            resourceStoreTimesV1InnerServiceSMOImpl.saveOrUpdateResourceStoreTimes(resourceStoreTimesPo);
+            //todo 个人仓库中添加
+            addPersonStorehouse(purchaseApplyDto, resourceStoreDtos, tmpPurchaseApplyDetailDto);
+        }
+        //获取订单号
+        PurchaseApplyPo purchaseApplyPo = null;
+        purchaseApplyPo = new PurchaseApplyPo();
+        purchaseApplyPo.setApplyOrderId(purchaseApplyDto.getApplyOrderId());
+        purchaseApplyPo.setState(PurchaseApplyDto.STATE_END);
+        purchaseApplyPo.setStatusCd("0");
+        purchaseApplyInnerServiceSMOImpl.updatePurchaseApply(purchaseApplyPo);
+    }
+
+    /**
+     * 向个人仓库中添加数据
+     *
+     * @param resourceStoreDtos
+     */
+    private void addPersonStorehouse(PurchaseApplyDto purchaseApplyDto, List<ResourceStoreDto> resourceStoreDtos, PurchaseApplyDetailDto purchaseApplyDetailDto) {
+
+        //获取物品单位
+        String unitCode = resourceStoreDtos.get(0).getUnitCode();
+        //获取物品最小计量单位
+        String miniUnitCode = resourceStoreDtos.get(0).getMiniUnitCode();
+        //获取物品最小计量单位数量
+        String miniUnitStock = resourceStoreDtos.get(0).getMiniUnitStock();
+        //入库到个人仓库中
+        UserStorehousePo userStorehousePo = new UserStorehousePo();
+        userStorehousePo.setUsId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_usId));
+        userStorehousePo.setResId(resourceStoreDtos.get(0).getResId());
+        userStorehousePo.setResCode(resourceStoreDtos.get(0).getResCode());
+        userStorehousePo.setResName(resourceStoreDtos.get(0).getResName());
+        userStorehousePo.setStoreId(resourceStoreDtos.get(0).getStoreId());
+        userStorehousePo.setUserId(purchaseApplyDto.getUserId());
+        userStorehousePo.setTimesId(purchaseApplyDetailDto.getTimesId());
+        //查询物品 是否已经存在
+        UserStorehouseDto userStorehouseDto = new UserStorehouseDto();
+        userStorehouseDto.setResCode(resourceStoreDtos.get(0).getResCode());
+        userStorehouseDto.setUserId(purchaseApplyDto.getUserId());
+        userStorehouseDto.setStoreId(resourceStoreDtos.get(0).getStoreId());
+        List<UserStorehouseDto> userStorehouseDtos = userStorehouseInnerServiceSMOImpl.queryUserStorehouses(userStorehouseDto);
+        if (userStorehouseDtos == null || userStorehouseDtos.size() < 1) {
+            userStorehousePo.setStock(purchaseApplyDetailDto.getPurchaseQuantity());
+            if (!StringUtil.isEmpty(unitCode) && !StringUtil.isEmpty(miniUnitCode) && !StringUtil.isEmpty(miniUnitStock) && !unitCode.equals(miniUnitCode)) {
+                //获取领取数量
+                BigDecimal purchaseQuantity2 = new BigDecimal(purchaseApplyDetailDto.getPurchaseQuantity());
+                BigDecimal miniUnitStock2 = new BigDecimal(miniUnitStock);
+                //计算个人物品最小计量总数
+                BigDecimal quantity = purchaseQuantity2.multiply(miniUnitStock2);
+                userStorehousePo.setMiniStock(String.valueOf(quantity));
+            } else {
+                userStorehousePo.setMiniStock(purchaseApplyDetailDto.getPurchaseQuantity());
+            }
+            userStorehouseInnerServiceSMOImpl.saveUserStorehouses(userStorehousePo);
+        } else {
+            //获取个人物品领用后的库存
+            BigDecimal purchaseQuantity3 = new BigDecimal(purchaseApplyDetailDto.getPurchaseQuantity());
+            BigDecimal stock3 = new BigDecimal(userStorehouseDtos.get(0).getStock());
+            BigDecimal total = purchaseQuantity3.add(stock3);
+            userStorehousePo.setStock(total.toString());
+            userStorehousePo.setUsId(userStorehouseDtos.get(0).getUsId());
+            if (!StringUtil.isEmpty(unitCode) && !StringUtil.isEmpty(miniUnitCode) && !StringUtil.isEmpty(miniUnitStock) && !unitCode.equals(miniUnitCode)) {
+                //获取本次领取数量
+                BigDecimal miniUnitStock3 = new BigDecimal(miniUnitStock);
+                //计算本次领取的个人物品最小计量总数
+                BigDecimal quantity = purchaseQuantity3.multiply(miniUnitStock3);
+                BigDecimal miniStock = new BigDecimal(0);
+                //获取个人物品原先的最小计量总数
+                if (StringUtil.isEmpty(userStorehouseDtos.get(0).getMiniStock())) {
+                    throw new IllegalArgumentException("信息错误,个人物品最小计量总数不能为空!");
+                } else {
+                    miniStock = new BigDecimal(userStorehouseDtos.get(0).getMiniStock());
+                }
+                //计算领用后个人物品总的最小计量总数
+                BigDecimal miniQuantity = quantity.add(miniStock);
+                userStorehousePo.setMiniStock(String.valueOf(miniQuantity));
+            } else {
+                userStorehousePo.setMiniStock(String.valueOf(total));
+            }
+            userStorehouseInnerServiceSMOImpl.updateUserStorehouses(userStorehousePo);
+        }
+    }
 }

+ 156 - 130
service-store/src/main/java/com/java110/store/cmd/collection/ResourceOutCmd.java

@@ -4,15 +4,18 @@ import com.alibaba.fastjson.JSONArray;
 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.doc.annotation.*;
+import com.java110.dto.purchase.PurchaseApplyDetailDto;
 import com.java110.dto.purchase.PurchaseApplyDto;
 import com.java110.dto.resource.ResourceStoreDto;
 import com.java110.dto.resource.ResourceStoreTimesDto;
 import com.java110.dto.user.UserStorehouseDto;
+import com.java110.intf.common.IOaWorkflowActivitiInnerServiceSMO;
 import com.java110.intf.store.*;
 import com.java110.po.purchase.PurchaseApplyDetailPo;
 import com.java110.po.purchase.PurchaseApplyPo;
@@ -87,16 +90,44 @@ public class ResourceOutCmd extends Cmd {
     @Autowired
     private IResourceStoreTimesV1InnerServiceSMO resourceStoreTimesV1InnerServiceSMOImpl;
 
+    @Autowired
+    private IOaWorkflowActivitiInnerServiceSMO oaWorkflowUserInnerServiceSMOImpl;
+
     @Override
     public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
         Assert.hasKeyAndValue(reqJson, "applyOrderId", "订单ID为空");
         JSONArray purchaseApplyDetails = reqJson.getJSONArray("purchaseApplyDetailVo");
-        List<PurchaseApplyDetailPo> purchaseApplyDetailPos = new ArrayList<>();
+
+
+        if (purchaseApplyDetails == null || purchaseApplyDetails.size() < 1) {
+            throw new CmdException("未包含领用物品");
+        }
+
+        String storeId = CmdContextUtils.getStoreId(context);
+        int quanitity = 0;
+        int stock = 0;
         for (int detailIndex = 0; detailIndex < purchaseApplyDetails.size(); detailIndex++) {
             JSONObject purchaseApplyDetail = purchaseApplyDetails.getJSONObject(detailIndex);
             Assert.hasKeyAndValue(purchaseApplyDetail, "purchaseQuantity", "采购数量未填写");
             Assert.hasKeyAndValue(purchaseApplyDetail, "id", "明细ID为空");
+            Assert.hasKeyAndValue(purchaseApplyDetail, "timesId", "价格为空");
+            quanitity = purchaseApplyDetail.getIntValue("quantity");
+
+            ResourceStoreTimesDto resourceStoreTimesDto = new ResourceStoreTimesDto();
+            resourceStoreTimesDto.setTimesId(purchaseApplyDetail.getString("timesId"));
+            resourceStoreTimesDto.setStoreId(storeId);
+            List<ResourceStoreTimesDto> resourceStoreTimesDtos = resourceStoreTimesV1InnerServiceSMOImpl.queryResourceStoreTimess(resourceStoreTimesDto);
+
+            Assert.listOnlyOne(resourceStoreTimesDtos, "价格不存在");
 
+            if (quanitity < 1) {
+                throw new CmdException("申请数量不正确");
+            }
+            stock = Integer.parseInt(resourceStoreTimesDtos.get(0).getStock());
+
+            if (quanitity > stock) {
+                throw new CmdException(resourceStoreTimesDtos.get(0).getResCode() + "出库不足,库存为=" + stock + ",申请数为=" + quanitity);
+            }
         }
     }
 
@@ -113,125 +144,66 @@ public class ResourceOutCmd extends Cmd {
     public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
 
         JSONArray purchaseApplyDetails = reqJson.getJSONArray("purchaseApplyDetailVo");
-        List<PurchaseApplyDetailPo> purchaseApplyDetailPos = new ArrayList<>();
+        List<PurchaseApplyDetailDto> purchaseApplyDetailPos = new ArrayList<>();
         for (int detailIndex = 0; detailIndex < purchaseApplyDetails.size(); detailIndex++) {
             JSONObject purchaseApplyDetail = purchaseApplyDetails.getJSONObject(detailIndex);
-            PurchaseApplyDetailPo purchaseApplyDetailPo = BeanConvertUtil.covertBean(purchaseApplyDetail, PurchaseApplyDetailPo.class);
-            purchaseApplyDetailPos.add(purchaseApplyDetailPo);
+            PurchaseApplyDetailDto purchaseApplyDetailDto = BeanConvertUtil.covertBean(purchaseApplyDetail, PurchaseApplyDetailDto.class);
+            purchaseApplyDetailPos.add(purchaseApplyDetailDto);
         }
         PurchaseApplyPo purchaseApplyPo = new PurchaseApplyPo();
         purchaseApplyPo.setApplyOrderId(reqJson.getString("applyOrderId"));
-        purchaseApplyPo.setPurchaseApplyDetailPos(purchaseApplyDetailPos);
+       // purchaseApplyPo.setPurchaseApplyDetailPos(purchaseApplyDetailPos);
 
         PurchaseApplyDto purchaseApplyDto = new PurchaseApplyDto();
         purchaseApplyDto.setApplyOrderId(purchaseApplyPo.getApplyOrderId());
         List<PurchaseApplyDto> purchaseApplyDtos = purchaseApplyInnerServiceSMOImpl.queryPurchaseApplys(purchaseApplyDto);
         Assert.listOnlyOne(purchaseApplyDtos, "出库单不存在");
-        purchaseApplyDetailPos = purchaseApplyPo.getPurchaseApplyDetailPos();
-        for (PurchaseApplyDetailPo purchaseApplyDetailPo : purchaseApplyDetailPos) {
-            purchaseApplyDetailInnerServiceSMOImpl.updatePurchaseApplyDetail(purchaseApplyDetailPo);
-            //查询物品资源信息
-            ResourceStoreDto resourceStore = new ResourceStoreDto();
-            resourceStore.setResId(purchaseApplyDetailPo.getResId());
-            List<ResourceStoreDto> resourceStores = resourceStoreInnerServiceSMOImpl.queryResourceStores(resourceStore);
-            Assert.listOnlyOne(resourceStores, "查询物品资源信息错误!");
+
+        for (PurchaseApplyDetailDto tmpPurchaseApplyDetailDto : purchaseApplyDetailPos) {
             ResourceStorePo resourceStorePo = new ResourceStorePo();
-            resourceStorePo.setResId(purchaseApplyDetailPo.getResId());
-            resourceStorePo.setStock("-" + purchaseApplyDetailPo.getPurchaseQuantity());
+            resourceStorePo.setResId(tmpPurchaseApplyDetailDto.getResId());
+            resourceStorePo.setPurchasePrice(tmpPurchaseApplyDetailDto.getPrice());
+            resourceStorePo.setStock("-" + tmpPurchaseApplyDetailDto.getPurchaseQuantity());
             resourceStorePo.setResOrderType(PurchaseApplyDto.RES_ORDER_TYPE_OUT);
-            //获取原物品最小计量总数
-            if (StringUtil.isEmpty(resourceStores.get(0).getMiniStock())) {
-                throw new IllegalArgumentException("最小计量总数不能为空!");
-            }
-            BigDecimal miniStock1 = new BigDecimal(resourceStores.get(0).getMiniStock());
-            BigDecimal purchaseQuantity = new BigDecimal(purchaseApplyDetailPo.getPurchaseQuantity());
-            if (StringUtil.isEmpty(resourceStores.get(0).getMiniUnitStock())) {
-                throw new IllegalArgumentException("最小计量单位数量不能为空!");
-            }
-            //获取物品最小计量单位数量
-            BigDecimal miniUnitStock1 = new BigDecimal(resourceStores.get(0).getMiniUnitStock());
-            //计算领用物品的最小计量总数
-            BigDecimal applyQuantity = purchaseQuantity.multiply(miniUnitStock1);
-            //计算物品领用后剩余的最小计量总数
-            BigDecimal newMiniStock = miniStock1.subtract(applyQuantity);
-            if (newMiniStock.compareTo(BigDecimal.ZERO) == -1) {
-                throw new IllegalArgumentException("物品库存已经不足,请确认物品库存!");
-            }
-            resourceStorePo.setMiniStock(String.valueOf(newMiniStock));
-            resourceStoreInnerServiceSMOImpl.updateResourceStore(resourceStorePo);
-
-            //加入 从库存中扣减
-            subResourceStoreTimesStock(resourceStores.get(0).getResCode(), purchaseApplyDetailPo);
-
+            //查询物品资源信息
             ResourceStoreDto resourceStoreDto = new ResourceStoreDto();
-            resourceStoreDto.setResId(purchaseApplyDetailPo.getResId());
-            //查询物品资源
+            resourceStoreDto.setResId(tmpPurchaseApplyDetailDto.getResId());
+            resourceStoreDto.setShId(tmpPurchaseApplyDetailDto.getShId());
             List<ResourceStoreDto> resourceStoreDtos = resourceStoreInnerServiceSMOImpl.queryResourceStores(resourceStoreDto);
-            if (resourceStoreDtos == null || resourceStoreDtos.size() < 1) {
-                continue;
+            Assert.listOnlyOne(resourceStoreDtos, "查询物品资源信息错误!");
+            if (StringUtil.isEmpty(resourceStoreDtos.get(0).getMiniUnitStock())) {
+                throw new IllegalArgumentException("最小计量单位数量不能为空!");
             }
-            //获取物品单位
-            String unitCode = resourceStoreDtos.get(0).getUnitCode();
-            //获取物品最小计量单位
-            String miniUnitCode = resourceStoreDtos.get(0).getMiniUnitCode();
-            //获取物品最小计量单位数量
-            String miniUnitStock = resourceStoreDtos.get(0).getMiniUnitStock();
-            //入库到个人仓库中
-            UserStorehousePo userStorehousePo = new UserStorehousePo();
-            userStorehousePo.setUsId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_usId));
-            userStorehousePo.setResId(resourceStoreDtos.get(0).getResId());
-            userStorehousePo.setResCode(resourceStoreDtos.get(0).getResCode());
-            userStorehousePo.setResName(resourceStoreDtos.get(0).getResName());
-            userStorehousePo.setStoreId(resourceStoreDtos.get(0).getStoreId());
-            userStorehousePo.setUserId(purchaseApplyDtos.get(0).getUserId());
-            userStorehousePo.setTimesId(purchaseApplyDetailPo.getTimesId());
-            //查询物品 是否已经存在
-            UserStorehouseDto userStorehouseDto = new UserStorehouseDto();
-            userStorehouseDto.setResCode(resourceStoreDtos.get(0).getResCode());
-            userStorehouseDto.setUserId(purchaseApplyDtos.get(0).getUserId());
-            userStorehouseDto.setStoreId(resourceStoreDtos.get(0).getStoreId());
-            List<UserStorehouseDto> userStorehouseDtos = userStorehouseInnerServiceSMOImpl.queryUserStorehouses(userStorehouseDto);
-            if (userStorehouseDtos == null || userStorehouseDtos.size() < 1) {
-                userStorehousePo.setStock(purchaseApplyDetailPo.getPurchaseQuantity());
-                if (!StringUtil.isEmpty(unitCode) && !StringUtil.isEmpty(miniUnitCode) && !StringUtil.isEmpty(miniUnitStock) && !unitCode.equals(miniUnitCode)) {
-                    //获取领取数量
-                    BigDecimal purchaseQuantity2 = new BigDecimal(purchaseApplyDetailPo.getPurchaseQuantity());
-                    BigDecimal miniUnitStock2 = new BigDecimal(miniUnitStock);
-                    //计算个人物品最小计量总数
-                    BigDecimal quantity = purchaseQuantity2.multiply(miniUnitStock2);
-                    userStorehousePo.setMiniStock(String.valueOf(quantity));
-                } else {
-                    userStorehousePo.setMiniStock(purchaseApplyDetailPo.getPurchaseQuantity());
-                }
-                userStorehouseInnerServiceSMOImpl.saveUserStorehouses(userStorehousePo);
-            } else {
-                //获取个人物品领用后的库存
-                BigDecimal purchaseQuantity3 = new BigDecimal(purchaseApplyDetailPo.getPurchaseQuantity());
-                BigDecimal stock3 = new BigDecimal(userStorehouseDtos.get(0).getStock());
-                BigDecimal total = purchaseQuantity3.add(stock3);
-                userStorehousePo.setStock(total.toString());
-                userStorehousePo.setUsId(userStorehouseDtos.get(0).getUsId());
-                if (!StringUtil.isEmpty(unitCode) && !StringUtil.isEmpty(miniUnitCode) && !StringUtil.isEmpty(miniUnitStock) && !unitCode.equals(miniUnitCode)) {
-                    //获取本次领取数量
-                    BigDecimal miniUnitStock3 = new BigDecimal(miniUnitStock);
-                    //计算本次领取的个人物品最小计量总数
-                    BigDecimal quantity = purchaseQuantity3.multiply(miniUnitStock3);
-                    BigDecimal miniStock = new BigDecimal(0);
-                    //获取个人物品原先的最小计量总数
-                    if (StringUtil.isEmpty(userStorehouseDtos.get(0).getMiniStock())) {
-                        throw new IllegalArgumentException("信息错误,个人物品最小计量总数不能为空!");
-                    } else {
-                        miniStock = new BigDecimal(userStorehouseDtos.get(0).getMiniStock());
-                    }
-                    //计算领用后个人物品总的最小计量总数
-                    BigDecimal miniQuantity = quantity.add(miniStock);
-                    userStorehousePo.setMiniStock(String.valueOf(miniQuantity));
-                } else {
-                    userStorehousePo.setMiniStock(String.valueOf(total));
-                }
-                userStorehouseInnerServiceSMOImpl.updateUserStorehouses(userStorehousePo);
+            //获取最小计量单位数量
+            BigDecimal miniUnitStock = new BigDecimal(resourceStoreDtos.get(0).getMiniUnitStock());
+            if (StringUtil.isEmpty(resourceStoreDtos.get(0).getMiniStock())) {
+                throw new IllegalArgumentException("最小计量总数不能为空!");
             }
+//            //获取采购前物品最小计量总数
+//            BigDecimal miniStock = new BigDecimal(resourceStoreDtos.get(0).getMiniStock());
+//            //计算采购的物品最小计量总数
+//            BigDecimal purchaseQuantity = new BigDecimal(tmpPurchaseApplyDetailDto.getPurchaseQuantity());
+//            BigDecimal purchaseMiniStock = purchaseQuantity.multiply(miniUnitStock);
+//            //计算采购后物品最小计量总数
+//            BigDecimal nowMiniStock = miniStock.subtract(purchaseMiniStock);
+//            if (nowMiniStock.compareTo(BigDecimal.ZERO) == -1) {
+//                throw new IllegalArgumentException("物品库存已经不足,请确认物品库存!");
+//            }
+ //           resourceStorePo.setMiniStock(String.valueOf(nowMiniStock));
+            resourceStoreInnerServiceSMOImpl.updateResourceStore(resourceStorePo);
 
+            // 保存至 物品 times表
+            ResourceStoreTimesPo resourceStoreTimesPo = new ResourceStoreTimesPo();
+            resourceStoreTimesPo.setApplyOrderId(tmpPurchaseApplyDetailDto.getApplyOrderId());
+            resourceStoreTimesPo.setPrice(tmpPurchaseApplyDetailDto.getPrice());
+            resourceStoreTimesPo.setStock("-" + tmpPurchaseApplyDetailDto.getPurchaseQuantity());
+            resourceStoreTimesPo.setResCode(resourceStoreDtos.get(0).getResCode());
+            resourceStoreTimesPo.setStoreId(resourceStoreDtos.get(0).getStoreId());
+            resourceStoreTimesPo.setTimesId(GenerateCodeFactory.getGeneratorId("10"));
+            resourceStoreTimesPo.setShId(tmpPurchaseApplyDetailDto.getShId());
+            resourceStoreTimesV1InnerServiceSMOImpl.saveOrUpdateResourceStoreTimes(resourceStoreTimesPo);
+            //todo 个人仓库中添加
+            addPersonStorehouse(purchaseApplyDtos.get(0), resourceStoreDtos, tmpPurchaseApplyDetailDto);
         }
 
         //
@@ -239,42 +211,96 @@ public class ResourceOutCmd extends Cmd {
         String applyOrderId = purchaseApplyPo.getApplyOrderId();
         PurchaseApplyPo purchaseApply = new PurchaseApplyPo();
         purchaseApply.setApplyOrderId(applyOrderId);
-        purchaseApply.setState(PurchaseApplyDto.STATE_AUDITED);
+
+        if(reqJson.containsKey("taskId")) {
+            reqJson.put("auditCode", "1100");
+            reqJson.put("auditMessage", "入库成功");
+            reqJson.put("id", reqJson.getString("applyOrderId"));
+            reqJson.put("storeId", CmdContextUtils.getStoreId(context));
+            reqJson.put("nextUserId", reqJson.getString("staffId"));
+            boolean isLastTask = oaWorkflowUserInnerServiceSMOImpl.completeTask(reqJson);
+
+            if (isLastTask) {
+                purchaseApply.setState(PurchaseApplyDto.STATE_END);
+            } else {
+                purchaseApply.setState(PurchaseApplyDto.STATE_DEALING);
+            }
+        }else{
+            purchaseApply.setState(PurchaseApplyDto.STATE_AUDITED);
+        }
+
         purchaseApply.setStatusCd("0");
         purchaseApplyInnerServiceSMOImpl.updatePurchaseApply(purchaseApply);
         context.setResponseEntity(ResultVo.createResponseEntity(ResultVo.CODE_OK, "出库成功"));
     }
 
     /**
-     * 从times中扣减
+     * 向个人仓库中添加数据
      *
-     * @param resCode
-     * @param purchaseApplyDetailPo
+     * @param resourceStoreDtos
      */
-    private void subResourceStoreTimesStock(String resCode, PurchaseApplyDetailPo purchaseApplyDetailPo) {
-        String applyQuantity = purchaseApplyDetailPo.getPurchaseQuantity();
-        ResourceStoreTimesDto resourceStoreTimesDto = new ResourceStoreTimesDto();
-        resourceStoreTimesDto.setResCode(resCode);
-        resourceStoreTimesDto.setTimesId(purchaseApplyDetailPo.getTimesId());
-        //resourceStoreTimesDto.setHasStock("Y");
-        List<ResourceStoreTimesDto> resourceStoreTimesDtos = resourceStoreTimesV1InnerServiceSMOImpl.queryResourceStoreTimess(resourceStoreTimesDto);
-
-        if (resourceStoreTimesDtos == null || resourceStoreTimesDtos.size() < 1) {
-            return;
-        }
-        int stock = 0;
-        int quantity = Integer.parseInt(applyQuantity);
-        ResourceStoreTimesPo resourceStoreTimesPo = null;
+    private void addPersonStorehouse(PurchaseApplyDto purchaseApplyDto, List<ResourceStoreDto> resourceStoreDtos, PurchaseApplyDetailDto purchaseApplyDetailDto) {
 
-        stock = Integer.parseInt(resourceStoreTimesDtos.get(0).getStock());
-        if (stock < quantity) {
-            throw new CmdException(resourceStoreTimesDtos.get(0).getResCode() + "价格为:" + resourceStoreTimesDtos.get(0).getPrice() + "的库存" + resourceStoreTimesDtos.get(0).getStock() + ",库存不足");
+        //获取物品单位
+        String unitCode = resourceStoreDtos.get(0).getUnitCode();
+        //获取物品最小计量单位
+        String miniUnitCode = resourceStoreDtos.get(0).getMiniUnitCode();
+        //获取物品最小计量单位数量
+        String miniUnitStock = resourceStoreDtos.get(0).getMiniUnitStock();
+        //入库到个人仓库中
+        UserStorehousePo userStorehousePo = new UserStorehousePo();
+        userStorehousePo.setUsId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_usId));
+        userStorehousePo.setResId(resourceStoreDtos.get(0).getResId());
+        userStorehousePo.setResCode(resourceStoreDtos.get(0).getResCode());
+        userStorehousePo.setResName(resourceStoreDtos.get(0).getResName());
+        userStorehousePo.setStoreId(resourceStoreDtos.get(0).getStoreId());
+        userStorehousePo.setUserId(purchaseApplyDto.getUserId());
+        userStorehousePo.setTimesId(purchaseApplyDetailDto.getTimesId());
+        //查询物品 是否已经存在
+        UserStorehouseDto userStorehouseDto = new UserStorehouseDto();
+        userStorehouseDto.setResCode(resourceStoreDtos.get(0).getResCode());
+        userStorehouseDto.setUserId(purchaseApplyDto.getUserId());
+        userStorehouseDto.setStoreId(resourceStoreDtos.get(0).getStoreId());
+        List<UserStorehouseDto> userStorehouseDtos = userStorehouseInnerServiceSMOImpl.queryUserStorehouses(userStorehouseDto);
+        if (userStorehouseDtos == null || userStorehouseDtos.size() < 1) {
+            userStorehousePo.setStock(purchaseApplyDetailDto.getPurchaseQuantity());
+            if (!StringUtil.isEmpty(unitCode) && !StringUtil.isEmpty(miniUnitCode) && !StringUtil.isEmpty(miniUnitStock) && !unitCode.equals(miniUnitCode)) {
+                //获取领取数量
+                BigDecimal purchaseQuantity2 = new BigDecimal(purchaseApplyDetailDto.getPurchaseQuantity());
+                BigDecimal miniUnitStock2 = new BigDecimal(miniUnitStock);
+                //计算个人物品最小计量总数
+                BigDecimal quantity = purchaseQuantity2.multiply(miniUnitStock2);
+                userStorehousePo.setMiniStock(String.valueOf(quantity));
+            } else {
+                userStorehousePo.setMiniStock(purchaseApplyDetailDto.getPurchaseQuantity());
+            }
+            userStorehouseInnerServiceSMOImpl.saveUserStorehouses(userStorehousePo);
+        } else {
+            //获取个人物品领用后的库存
+            BigDecimal purchaseQuantity3 = new BigDecimal(purchaseApplyDetailDto.getPurchaseQuantity());
+            BigDecimal stock3 = new BigDecimal(userStorehouseDtos.get(0).getStock());
+            BigDecimal total = purchaseQuantity3.add(stock3);
+            userStorehousePo.setStock(total.toString());
+            userStorehousePo.setUsId(userStorehouseDtos.get(0).getUsId());
+            if (!StringUtil.isEmpty(unitCode) && !StringUtil.isEmpty(miniUnitCode) && !StringUtil.isEmpty(miniUnitStock) && !unitCode.equals(miniUnitCode)) {
+                //获取本次领取数量
+                BigDecimal miniUnitStock3 = new BigDecimal(miniUnitStock);
+                //计算本次领取的个人物品最小计量总数
+                BigDecimal quantity = purchaseQuantity3.multiply(miniUnitStock3);
+                BigDecimal miniStock = new BigDecimal(0);
+                //获取个人物品原先的最小计量总数
+                if (StringUtil.isEmpty(userStorehouseDtos.get(0).getMiniStock())) {
+                    throw new IllegalArgumentException("信息错误,个人物品最小计量总数不能为空!");
+                } else {
+                    miniStock = new BigDecimal(userStorehouseDtos.get(0).getMiniStock());
+                }
+                //计算领用后个人物品总的最小计量总数
+                BigDecimal miniQuantity = quantity.add(miniStock);
+                userStorehousePo.setMiniStock(String.valueOf(miniQuantity));
+            } else {
+                userStorehousePo.setMiniStock(String.valueOf(total));
+            }
+            userStorehouseInnerServiceSMOImpl.updateUserStorehouses(userStorehousePo);
         }
-
-        stock = stock - quantity;
-        resourceStoreTimesPo = new ResourceStoreTimesPo();
-        resourceStoreTimesPo.setTimesId(resourceStoreTimesDtos.get(0).getTimesId());
-        resourceStoreTimesPo.setStock(stock + "");
-        resourceStoreTimesV1InnerServiceSMOImpl.updateResourceStoreTimes(resourceStoreTimesPo);
     }
 }

+ 26 - 22
service-store/src/main/java/com/java110/store/cmd/purchase/ResourceEnterCmd.java

@@ -49,11 +49,11 @@ import java.util.List;
 
 @Java110ParamsDoc(params = {
         @Java110ParamDoc(name = "applyOrderId", length = 30, remark = "采购申请单订单ID"),
-        @Java110ParamDoc(name = "purchaseApplyDetailVo", type = "Array",length = 30, remark = "采购物品信息"),
-        @Java110ParamDoc(parentNodeName = "purchaseApplyDetailVo", name = "purchaseQuantity", type = "Int",length = 30, remark = "数量"),
-        @Java110ParamDoc(parentNodeName = "purchaseApplyDetailVo", name = "price", type = "String",length = 30, remark = "价格"),
-        @Java110ParamDoc(parentNodeName = "purchaseApplyDetailVo", name = "id", type = "String",length = 30, remark = "采购明细ID"),
-        @Java110ParamDoc(parentNodeName = "purchaseApplyDetailVo", name = "resId", type = "String",length = 30, remark = "物品ID"),
+        @Java110ParamDoc(name = "purchaseApplyDetailVo", type = "Array", length = 30, remark = "采购物品信息"),
+        @Java110ParamDoc(parentNodeName = "purchaseApplyDetailVo", name = "purchaseQuantity", type = "Int", length = 30, remark = "数量"),
+        @Java110ParamDoc(parentNodeName = "purchaseApplyDetailVo", name = "price", type = "String", length = 30, remark = "价格"),
+        @Java110ParamDoc(parentNodeName = "purchaseApplyDetailVo", name = "id", type = "String", length = 30, remark = "采购明细ID"),
+        @Java110ParamDoc(parentNodeName = "purchaseApplyDetailVo", name = "resId", type = "String", length = 30, remark = "物品ID"),
 })
 
 @Java110ResponseDoc(
@@ -64,15 +64,15 @@ import java.util.List;
 )
 
 @Java110ExampleDoc(
-        reqBody="{'applyOrderId':'123123','purchaseApplyDetailVo':[{'purchaseQuantity':'10','price':'1.3','id':'123123','resId':'343434'}]}",
-        resBody="{'code':0,'msg':'成功'}"
+        reqBody = "{'applyOrderId':'123123','purchaseApplyDetailVo':[{'purchaseQuantity':'10','price':'1.3','id':'123123','resId':'343434'}]}",
+        resBody = "{'code':0,'msg':'成功'}"
 )
 
 /**
  * 采购人员采购入库功能
  */
 @Java110Cmd(serviceCode = "/purchase/resourceEnter")
-public class ResourceEnterCmd extends Cmd{
+public class ResourceEnterCmd extends Cmd {
 
     @Autowired
     private IPurchaseApplyInnerServiceSMO purchaseApplyInnerServiceSMOImpl;
@@ -96,7 +96,7 @@ public class ResourceEnterCmd extends Cmd{
         purchaseApplyDto.setApplyOrderId(reqJson.getString("applyOrderId"));
         purchaseApplyDto.setStatusCd("0");
         List<PurchaseApplyDto> purchaseApplyDtoList = purchaseApplyInnerServiceSMOImpl.queryPurchaseApplys(purchaseApplyDto);
-        if(purchaseApplyDtoList!=null && PurchaseApplyDto.STATE_AUDITED.equals(purchaseApplyDtoList.get(0).getState())){
+        if (purchaseApplyDtoList != null && PurchaseApplyDto.STATE_AUDITED.equals(purchaseApplyDtoList.get(0).getState())) {
             throw new IllegalArgumentException("该订单已经处理,请刷新确认订单状态!");
         }
         JSONArray purchaseApplyDetails = reqJson.getJSONArray("purchaseApplyDetailVo");
@@ -110,9 +110,10 @@ public class ResourceEnterCmd extends Cmd{
 
     /**
      * 采采购申请-采购审核确认入库
-     * @param event              事件对象
+     *
+     * @param event   事件对象
      * @param context 数据上文对象
-     * @param reqJson            请求报文
+     * @param reqJson 请求报文
      * @throws CmdException
      * @throws ParseException
      */
@@ -177,22 +178,25 @@ public class ResourceEnterCmd extends Cmd{
         String applyOrderId = purchaseApplyPo.getApplyOrderId();
         PurchaseApplyPo purchaseApply = new PurchaseApplyPo();
         purchaseApply.setApplyOrderId(applyOrderId);
-
-        reqJson.put("auditCode","1100");
-        reqJson.put("auditMessage","入库成功");
-        reqJson.put("storeId", CmdContextUtils.getStoreId(context));
-        reqJson.put("nextUserId", reqJson.getString("staffId"));
-        boolean isLastTask = oaWorkflowUserInnerServiceSMOImpl.completeTask(reqJson);
-
-        if (isLastTask) {
-            purchaseApply.setState(PurchaseApplyDto.STATE_END);
+        //todo 如果包含taskId 流程提交下去
+        if (reqJson.containsKey("taskId")) {
+            reqJson.put("auditCode", "1100");
+            reqJson.put("auditMessage", "入库成功");
+            reqJson.put("id", reqJson.getString("applyOrderId"));
+            reqJson.put("storeId", CmdContextUtils.getStoreId(context));
+            reqJson.put("nextUserId", reqJson.getString("staffId"));
+            boolean isLastTask = oaWorkflowUserInnerServiceSMOImpl.completeTask(reqJson);
+            if (isLastTask) {
+                purchaseApply.setState(PurchaseApplyDto.STATE_END);
+            } else {
+                purchaseApply.setState(PurchaseApplyDto.STATE_DEALING);
+            }
         } else {
-            purchaseApply.setState(PurchaseApplyDto.STATE_DEALING);
+            purchaseApply.setState(PurchaseApplyDto.STATE_AUDITED);
         }
         purchaseApply.setStatusCd("0");
         purchaseApplyInnerServiceSMOImpl.updatePurchaseApply(purchaseApply);
 
-        //todo 如果包含taskId 流程提交下去
 
 
         context.setResponseEntity(ResultVo.createResponseEntity(ResultVo.CODE_OK, "采购申请成功"));

+ 1 - 1
service-store/src/main/java/com/java110/store/cmd/store/SaveStoreInfoCmd.java

@@ -98,7 +98,7 @@ public class SaveStoreInfoCmd extends Cmd {
         addOrg(reqJson);
         //公司总部
         addStaffOrg(reqJson);
-        addPurchase(reqJson);
+        //addPurchase(reqJson);
         //businesses.add(storeBMOImpl.addCollection(paramObj)); //物品领用 各个小区设置各自的流程  废弃次操作
         contractApply(reqJson);
         contractChange(reqJson);