Your Name лет назад: 3
Родитель
Сommit
d8d7058d62

+ 10 - 0
java110-bean/src/main/java/com/java110/po/purchase/PurchaseApplyDetailPo.java

@@ -30,6 +30,8 @@ public class PurchaseApplyDetailPo implements Serializable {
 
     private String statusCd = "0";
 
+    private String timesId;
+
     public String getApplyOrderId() {
         return applyOrderId;
     }
@@ -125,4 +127,12 @@ public class PurchaseApplyDetailPo implements Serializable {
     public void setStatusCd(String statusCd) {
         this.statusCd = statusCd;
     }
+
+    public String getTimesId() {
+        return timesId;
+    }
+
+    public void setTimesId(String timesId) {
+        this.timesId = timesId;
+    }
 }

+ 3 - 2
java110-db/src/main/resources/mapper/store/PurchaseApplyServiceDaoImplMapper.xml

@@ -63,7 +63,7 @@
     <!-- 保存采购明细表-->
     <insert id="savePurchaseApplyDetailInfo" parameterType="List">
         insert into purchase_apply_detail
-        (id,rs_id,apply_order_id,res_id,quantity,remark,b_id,operate,status_cd,price,purchase_quantity,purchase_remark,original_stock)
+        (id,rs_id,apply_order_id,res_id,quantity,remark,b_id,operate,status_cd,price,purchase_quantity,purchase_remark,original_stock,times_id)
         values
         <foreach collection="list" item="item" index="index" separator=",">
             (
@@ -79,7 +79,8 @@
             #{item.price},
             #{item.purchaseQuantity},
             #{item.purchaseRemark},
-            #{item.originalStock}
+            #{item.originalStock},
+            #{item.timesId}
             )
         </foreach>
     </insert>

+ 135 - 0
service-store/src/main/java/com/java110/store/cmd/collection/GoodsCollectionCmd.java

@@ -0,0 +1,135 @@
+package com.java110.store.cmd.collection;
+
+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.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.purchaseApply.PurchaseApplyDto;
+import com.java110.dto.resourceStoreTimes.ResourceStoreTimesDto;
+import com.java110.dto.user.UserDto;
+import com.java110.intf.common.IGoodCollectionUserInnerServiceSMO;
+import com.java110.intf.store.IPurchaseApplyInnerServiceSMO;
+import com.java110.intf.store.IResourceStoreTimesV1InnerServiceSMO;
+import com.java110.intf.user.IUserV1InnerServiceSMO;
+import com.java110.po.purchase.PurchaseApplyDetailPo;
+import com.java110.po.purchase.PurchaseApplyPo;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
+import com.java110.vo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 物品领用
+ */
+@Java110Cmd(serviceCode = "/collection/goodsCollection")
+public class GoodsCollectionCmd extends Cmd {
+
+    @Autowired
+    private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
+
+
+    @Autowired
+    private IPurchaseApplyInnerServiceSMO purchaseApplyInnerServiceSMOImpl;
+
+
+    @Autowired
+    private IGoodCollectionUserInnerServiceSMO goodCollectionUserInnerServiceSMOImpl;
+
+    @Autowired
+    private IResourceStoreTimesV1InnerServiceSMO resourceStoreTimesV1InnerServiceSMOImpl;
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+        Assert.hasKeyAndValue(reqJson, "resourceStores", "必填,请填写物品领用的物资");
+        Assert.hasKeyAndValue(reqJson, "description", "必填,请填写采购申请说明");
+
+        JSONArray resourceStores = reqJson.getJSONArray("resourceStores");
+        String storeId = context.getReqHeaders().get("store-id");
+
+        if (resourceStores == null || resourceStores.size() < 1) {
+            throw new CmdException("未包含领用物品");
+        }
+        for (int resourceStoreIndex = 0; resourceStoreIndex < resourceStores.size(); resourceStoreIndex++) {
+            JSONObject resourceStore = resourceStores.getJSONObject(resourceStoreIndex);
+            Assert.hasKeyAndValue(resourceStore, "timesId", "必填,未选择价格");
+
+            ResourceStoreTimesDto resourceStoreTimesDto = new ResourceStoreTimesDto();
+            resourceStoreTimesDto.setTimesId(resourceStore.getString("timesId"));
+            resourceStoreTimesDto.setStoreId(storeId);
+            List<ResourceStoreTimesDto> resourceStoreTimesDtos = resourceStoreTimesV1InnerServiceSMOImpl.queryResourceStoreTimess(resourceStoreTimesDto);
+
+            Assert.listOnlyOne(resourceStoreTimesDtos, "价格不存在");
+
+            resourceStore.put("resourceStoreTimesDtos",resourceStoreTimesDtos);
+        }
+
+
+    }
+
+    @Override
+    @Java110Transactional
+    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");
+        UserDto userDto = new UserDto();
+        userDto.setUserId(userId);
+        List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
+
+        Assert.listOnlyOne(userDtos, "未包含用户");
+
+        String userName = userDtos.get(0).getName();
+
+        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<>();
+        List<ResourceStoreTimesDto> resourceStoreTimesDtos = null;
+        for (int resourceStoreIndex = 0; resourceStoreIndex < resourceStores.size(); resourceStoreIndex++) {
+            JSONObject resourceStore = resourceStores.getJSONObject(resourceStoreIndex);
+            resourceStoreTimesDtos = (List<ResourceStoreTimesDto>) resourceStore.get("resourceStoreTimesDtos");
+            resourceStore.put("originalStock", resourceStore.get("stock"));
+            PurchaseApplyDetailPo purchaseApplyDetailPo = BeanConvertUtil.covertBean(resourceStore, PurchaseApplyDetailPo.class);
+            purchaseApplyDetailPo.setId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_applyOrderId));
+            purchaseApplyDetailPo.setPrice(resourceStoreTimesDtos.get(0).getPrice());
+            purchaseApplyDetailPo.setTimesId(resourceStoreTimesDtos.get(0).getTimesId());
+            purchaseApplyDetailPos.add(purchaseApplyDetailPo);
+        }
+        purchaseApplyPo.setPurchaseApplyDetailPos(purchaseApplyDetailPos);
+
+        int saveFlag = purchaseApplyInnerServiceSMOImpl.savePurchaseApply(purchaseApplyPo);
+
+        if (saveFlag < 1) {
+            throw new CmdException("物品领用申请失败");
+        }
+        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);
+        }
+        context.setResponseEntity(ResultVo.createResponseEntity(ResultVo.CODE_OK, "物品领用成功"));
+    }
+}

+ 28 - 26
service-store/src/main/java/com/java110/store/cmd/collection/ResourceOutCmd.java

@@ -3,6 +3,7 @@ package com.java110.store.cmd.collection;
 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.ICmdDataFlowContext;
 import com.java110.core.event.cmd.Cmd;
 import com.java110.core.event.cmd.CmdEvent;
@@ -47,10 +48,10 @@ 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 = "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 = "id", type = "String", length = 30, remark = "采购明细ID"),
+        @Java110ParamDoc(parentNodeName = "purchaseApplyDetailVo", name = "resId", type = "String", length = 30, remark = "物品ID"),
 })
 
 @Java110ResponseDoc(
@@ -61,8 +62,8 @@ import java.util.List;
 )
 
 @Java110ExampleDoc(
-        reqBody="{'applyOrderId':'123123','purchaseApplyDetailVo':[{'purchaseQuantity':'10','id':'123123','resId':'343434'}]}",
-        resBody="{'code':0,'msg':'成功'}"
+        reqBody = "{'applyOrderId':'123123','purchaseApplyDetailVo':[{'purchaseQuantity':'10','id':'123123','resId':'343434'}]}",
+        resBody = "{'code':0,'msg':'成功'}"
 )
 
 /**
@@ -100,6 +101,7 @@ public class ResourceOutCmd extends Cmd {
     }
 
     @Override
+    @Java110Transactional
     public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
 
         JSONArray purchaseApplyDetails = reqJson.getJSONArray("purchaseApplyDetailVo");
@@ -151,7 +153,7 @@ public class ResourceOutCmd extends Cmd {
             resourceStoreInnerServiceSMOImpl.updateResourceStore(resourceStorePo);
 
             //加入 从库存中扣减
-            subResourceStoreTimesStock(resourceStores.get(0).getResCode(), purchaseApplyDetailPo.getPurchaseQuantity());
+            subResourceStoreTimesStock(resourceStores.get(0).getResCode(), purchaseApplyDetailPo);
 
             ResourceStoreDto resourceStoreDto = new ResourceStoreDto();
             resourceStoreDto.setResId(purchaseApplyDetailPo.getResId());
@@ -220,7 +222,10 @@ public class ResourceOutCmd extends Cmd {
                 }
                 userStorehouseInnerServiceSMOImpl.updateUserStorehouses(userStorehousePo);
             }
+
         }
+
+        //
         //获取订单号
         String applyOrderId = purchaseApplyPo.getApplyOrderId();
         PurchaseApplyPo purchaseApply = new PurchaseApplyPo();
@@ -233,14 +238,16 @@ public class ResourceOutCmd extends Cmd {
 
     /**
      * 从times中扣减
+     *
      * @param resCode
-     * @param applyQuantity
+     * @param purchaseApplyDetailPo
      */
-    private void subResourceStoreTimesStock(String resCode, String applyQuantity) {
-
+    private void subResourceStoreTimesStock(String resCode, PurchaseApplyDetailPo purchaseApplyDetailPo) {
+        String applyQuantity = purchaseApplyDetailPo.getPurchaseQuantity();
         ResourceStoreTimesDto resourceStoreTimesDto = new ResourceStoreTimesDto();
         resourceStoreTimesDto.setResCode(resCode);
-        resourceStoreTimesDto.setHasStock("Y");
+        resourceStoreTimesDto.setTimesId(purchaseApplyDetailPo.getTimesId());
+        //resourceStoreTimesDto.setHasStock("Y");
         List<ResourceStoreTimesDto> resourceStoreTimesDtos = resourceStoreTimesV1InnerServiceSMOImpl.queryResourceStoreTimess(resourceStoreTimesDto);
 
         if (resourceStoreTimesDtos == null || resourceStoreTimesDtos.size() < 1) {
@@ -249,21 +256,16 @@ public class ResourceOutCmd extends Cmd {
         int stock = 0;
         int quantity = Integer.parseInt(applyQuantity);
         ResourceStoreTimesPo resourceStoreTimesPo = null;
-        for (ResourceStoreTimesDto resourceStoreTimesDto1 : resourceStoreTimesDtos) {
-            stock = Integer.parseInt(resourceStoreTimesDto1.getStock());
-            if (stock > quantity) {
-                stock = stock - quantity;
-                resourceStoreTimesPo = new ResourceStoreTimesPo();
-                resourceStoreTimesPo.setTimesId(resourceStoreTimesDto1.getTimesId());
-                resourceStoreTimesPo.setStock(stock + "");
-                resourceStoreTimesV1InnerServiceSMOImpl.updateResourceStoreTimes(resourceStoreTimesPo);
-                break;
-            }
-            quantity = quantity - stock;
-            resourceStoreTimesPo = new ResourceStoreTimesPo();
-            resourceStoreTimesPo.setTimesId(resourceStoreTimesDto1.getTimesId());
-            resourceStoreTimesPo.setStock("0");
-            resourceStoreTimesV1InnerServiceSMOImpl.updateResourceStoreTimes(resourceStoreTimesPo);
+
+        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() + ",库存不足");
         }
+
+        stock = stock - quantity;
+        resourceStoreTimesPo = new ResourceStoreTimesPo();
+        resourceStoreTimesPo.setTimesId(resourceStoreTimesDtos.get(0).getTimesId());
+        resourceStoreTimesPo.setStock((stock - quantity) + "");
+        resourceStoreTimesV1InnerServiceSMOImpl.updateResourceStoreTimes(resourceStoreTimesPo);
     }
 }

+ 2 - 0
service-store/src/main/java/com/java110/store/cmd/purchase/PurchaseStorageCmd.java

@@ -3,6 +3,7 @@ package com.java110.store.cmd.purchase;
 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.ICmdDataFlowContext;
 import com.java110.core.event.cmd.Cmd;
 import com.java110.core.event.cmd.CmdEvent;
@@ -64,6 +65,7 @@ public class PurchaseStorageCmd extends Cmd {
     }
 
     @Override
+    @Java110Transactional
     public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
 
         String storeId = context.getReqHeaders().get("store-id");