From 093b73aadb022895a02dbbcd64b87613e19b547b Mon Sep 17 00:00:00 2001
From: 1098226878@qq.com <1098226878@qq.com>
Date: 星期一, 10 一月 2022 18:05:21 +0800
Subject: [PATCH] Merge branch 'master' of http://git.homecommunity.cn/supervip/MicroCommunity

---
 service-api/src/main/java/com/java110/api/bmo/allocationUserStorehouse/impl/AllocationUserStorehouseBMOImpl.java |  406 +++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 274 insertions(+), 132 deletions(-)

diff --git a/service-api/src/main/java/com/java110/api/bmo/allocationUserStorehouse/impl/AllocationUserStorehouseBMOImpl.java b/service-api/src/main/java/com/java110/api/bmo/allocationUserStorehouse/impl/AllocationUserStorehouseBMOImpl.java
index 744f26e..f469884 100644
--- a/service-api/src/main/java/com/java110/api/bmo/allocationUserStorehouse/impl/AllocationUserStorehouseBMOImpl.java
+++ b/service-api/src/main/java/com/java110/api/bmo/allocationUserStorehouse/impl/AllocationUserStorehouseBMOImpl.java
@@ -2,29 +2,43 @@
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.java110.api.bmo.ApiBaseBMO;
 import com.java110.api.bmo.allocationUserStorehouse.IAllocationUserStorehouseBMO;
+import com.java110.api.listener.AbstractServiceApiPlusListener;
 import com.java110.core.context.DataFlowContext;
+import com.java110.core.event.service.api.ServiceDataFlowEvent;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.resourceStore.ResourceStoreDto;
 import com.java110.dto.userStorehouse.UserStorehouseDto;
+import com.java110.entity.center.AppService;
+import com.java110.intf.store.IResourceStoreInnerServiceSMO;
 import com.java110.intf.store.IUserStorehouseInnerServiceSMO;
 import com.java110.po.allocationUserStorehouse.AllocationUserStorehousePo;
+import com.java110.po.resourceStoreUseRecord.ResourceStoreUseRecordPo;
 import com.java110.po.userStorehouse.UserStorehousePo;
 import com.java110.utils.constant.BusinessTypeConstant;
 import com.java110.utils.util.Assert;
 import com.java110.utils.util.BeanConvertUtil;
 import com.java110.utils.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.text.ParseException;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 @Service("allocationUserStorehouseBMOImpl")
-public class AllocationUserStorehouseBMOImpl extends ApiBaseBMO implements IAllocationUserStorehouseBMO {
+public class AllocationUserStorehouseBMOImpl extends AbstractServiceApiPlusListener implements IAllocationUserStorehouseBMO {
 
     @Autowired
     private IUserStorehouseInnerServiceSMO userStorehouseInnerServiceSMOImpl;
+
+    @Autowired
+    private IResourceStoreInnerServiceSMO resourceStoreInnerServiceSMOImpl;
 
     /**
      * 娣诲姞灏忓尯淇℃伅
@@ -38,144 +52,223 @@
         JSONArray json = JSONArray.parseArray(resourceStores);
         if (json.size() > 0) {
             Object[] objects = json.toArray();
-            for (int i = 0; i < objects.length; i++) {
-                Object object = objects[i];
-                JSONObject paramIn = JSONObject.parseObject(String.valueOf(object));
-                String stock = paramIn.getString("stock");
-                //鑾峰彇鏈�灏忚閲忔�绘暟
-                String miniStock = paramIn.getString("miniStock");
-                //鑾峰彇鏈�灏忚閲忓崟浣嶆暟閲�
-                String miniUnitStock = paramIn.getString("miniUnitStock");
-                //鑾峰彇杞禒鏁伴噺
-                String giveQuantity = paramIn.getString("giveQuantity");
-                //鑾峰彇鐗╁搧id
-                String resId = paramIn.getString("resId");
-                //鑾峰彇鐗╁搧鍚嶇О
-                String resName = paramIn.getString("resName");
-                //鑾峰彇褰撳墠鐢ㄦ埛id
-                String userId = paramInJson.getString("userId");
-                //鑾峰彇鎺ュ彈杞禒鐢ㄦ埛id
-                String acceptUserId = paramInJson.getString("acceptUserId");
-                //鑾峰彇鎺ュ彈杞禒鐢ㄦ埛鍚嶇О
-                String acceptUserName = paramInJson.getString("acceptUserName");
-                //鑾峰彇鍟嗘埛id
-                String storeId = paramInJson.getString("storeId");
-                JSONObject allocationUserStorehouseJson = new JSONObject();
-                allocationUserStorehouseJson.put("ausId", "-1");
-                allocationUserStorehouseJson.put("resId", resId);
-                allocationUserStorehouseJson.put("resName", resName);
-                allocationUserStorehouseJson.put("storeId", storeId);
-                allocationUserStorehouseJson.put("stock", stock);
-                allocationUserStorehouseJson.put("giveQuantity", giveQuantity);
-                allocationUserStorehouseJson.put("startUserId", userId);
-                allocationUserStorehouseJson.put("startUserName", paramInJson.getString("userName"));
-                allocationUserStorehouseJson.put("acceptUserId", acceptUserId);
-                allocationUserStorehouseJson.put("acceptUserName", acceptUserName);
-                allocationUserStorehouseJson.put("createTime", new Date());
-                allocationUserStorehouseJson.put("remark", paramInJson.getString("description"));
-                AllocationUserStorehousePo allocationUserStorehousePo = BeanConvertUtil.covertBean(allocationUserStorehouseJson, AllocationUserStorehousePo.class);
-                super.insert(dataFlowContext, allocationUserStorehousePo, BusinessTypeConstant.BUSINESS_TYPE_SAVE_ALLOCATION_USER_STOREHOUSE);
-                UserStorehouseDto userStorehouseDto = new UserStorehouseDto();
-                userStorehouseDto.setUserId(userId);
-                userStorehouseDto.setResId(resId);
-                List<UserStorehouseDto> userStorehouseDtos = userStorehouseInnerServiceSMOImpl.queryUserStorehouses(userStorehouseDto);
-                Assert.listOnlyOne(userStorehouseDtos, "鏌ヨ涓汉鐗╁搧淇℃伅閿欒锛�");
-                //鑾峰彇涓汉鐗╁搧淇℃伅id
-                String usId = userStorehouseDtos.get(0).getUsId();
-                //鑾峰彇鐗╁搧鍗曚綅
-                if (StringUtil.isEmpty(userStorehouseDtos.get(0).getUnitCode())) {
-                    throw new IllegalArgumentException("鐗╁搧鍗曚綅涓嶈兘涓虹┖");
-                }
-                String unitCode = userStorehouseDtos.get(0).getUnitCode();
-                //鑾峰彇鐗╁搧鏈�灏忚閲忓崟浣�
-                if (StringUtil.isEmpty(userStorehouseDtos.get(0).getMiniUnitCode())) {
-                    throw new IllegalArgumentException("鐗╁搧鏈�灏忚閲忓崟浣嶄笉鑳戒负绌�");
-                }
-                String miniUnitCode = userStorehouseDtos.get(0).getMiniUnitCode();
-                UserStorehousePo userStorehousePo = new UserStorehousePo();
-                userStorehousePo.setUsId(usId);
-                //杞禒鍚庝釜浜虹墿鍝佹渶灏忚閲忔�绘暟
-                BigDecimal num1 = new BigDecimal(Double.parseDouble(miniStock));
-                BigDecimal num2 = new BigDecimal(Double.parseDouble(giveQuantity));
-                double quantity = num1.subtract(num2).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
-                if (quantity == 0.0) {
-                    userStorehousePo.setMiniStock(String.valueOf(quantity));
-                    userStorehousePo.setStock("0");
-                } else {
-                    userStorehousePo.setMiniStock(String.valueOf(quantity));
-                    BigDecimal reduceNum = num1.subtract(num2);
-                    if (unitCode.equals(miniUnitCode)) { //濡傛灉鐗╁搧鍗曚綅涓庢渶灏忚閲忓崟浣嶇浉鍚岋紝灏变笉鍚戜笂鍙栨暣
-                        //鐢ㄨ浆璧犲悗鏈�灏忚閲忔�绘暟闄や互鏈�灏忚閲忓崟浣嶆暟閲忥紝鑾峰彇杞禒鍚庣殑搴撳瓨鏁�
-                        BigDecimal num3 = new BigDecimal(Double.parseDouble(miniUnitStock));
-                        double unitStock = reduceNum.divide(num3, 2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                        userStorehousePo.setStock(String.valueOf(unitStock));
-                    } else { //濡傛灉鐗╁搧鏈�灏忚閲忓崟浣嶄笌鐗╁搧鍗曚綅涓嶅悓锛屽氨鍚戜笂鍙栨暣
-                        //鐢ㄨ浆璧犲悗鏈�灏忚閲忔�绘暟闄や互鏈�灏忚閲忓崟浣嶆暟閲忥紝骞跺悜涓婂彇鏁达紝鑾峰彇杞禒鍚庣殑搴撳瓨鏁�
-                        BigDecimal num3 = new BigDecimal(Double.parseDouble(miniUnitStock));
-                        double unitStock = reduceNum.divide(num3, 2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                        double stockNumber = Math.ceil(unitStock);
-                        userStorehousePo.setStock(String.valueOf(stockNumber));
-                    }
-                }
-                //鏇存柊褰撳墠鐢ㄦ埛搴撳瓨鏁�
-                super.update(dataFlowContext, userStorehousePo, BusinessTypeConstant.BUSINESS_TYPE_UPDATE_USER_STOREHOUSE);
-                UserStorehouseDto userStorehouse = new UserStorehouseDto();
-                userStorehouse.setUserId(acceptUserId);
-                userStorehouse.setResId(resId);
-                //鏌ヨ鎺ュ彈杞禒浜虹殑涓汉鐗╁搧淇℃伅
-                List<UserStorehouseDto> userStorehouses = userStorehouseInnerServiceSMOImpl.queryUserStorehouses(userStorehouse);
-                if (userStorehouses != null && userStorehouses.size() == 1) {
-                    UserStorehousePo userStorePo = new UserStorehousePo();
-                    //璁$畻鎺ュ彈鐢ㄦ埛鐨勬渶灏忚閲忔�绘暟
-                    BigDecimal num4 = new BigDecimal(Double.parseDouble(userStorehouses.get(0).getMiniStock()));
-                    BigDecimal num5 = new BigDecimal(Double.parseDouble(giveQuantity));
-                    BigDecimal addNum = num4.add(num5);
-                    double acceptMiniStock = num4.add(num5).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();;
-                    userStorePo.setMiniStock(String.valueOf(acceptMiniStock));
+            String flag = paramInJson.getString("flag");
+            if (!StringUtil.isEmpty(flag) && flag.equals("1")) { //鎹熻��
+                for (int i = 0; i < objects.length; i++) {
+                    Object object = objects[i];
+                    JSONObject paramIn = JSONObject.parseObject(String.valueOf(object));
+                    ResourceStoreUseRecordPo resourceStoreUseRecordPo = new ResourceStoreUseRecordPo();
+                    resourceStoreUseRecordPo.setRsurId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_rsurId));
+                    resourceStoreUseRecordPo.setRepairId("-1"); //鎶ヤ慨璁板綍
+                    resourceStoreUseRecordPo.setResId(paramIn.getString("resId")); //鐗╁搧璧勬簮id
+                    resourceStoreUseRecordPo.setCommunityId(paramInJson.getString("communityId")); //灏忓尯id
+                    resourceStoreUseRecordPo.setStoreId(paramInJson.getString("storeId")); //鍟嗘埛id
+                    resourceStoreUseRecordPo.setQuantity(paramIn.getString("giveQuantity")); //鎹熻�楁暟閲�
+                    //鏍规嵁鐗╁搧璧勬簮id鏌ヨ鐗╁搧璧勬簮淇℃伅
+                    ResourceStoreDto resourceStoreDto = new ResourceStoreDto();
+                    resourceStoreDto.setResId(paramIn.getString("resId"));
+                    List<ResourceStoreDto> resourceStoreDtos = resourceStoreInnerServiceSMOImpl.queryResourceStores(resourceStoreDto);
+                    Assert.listOnlyOne(resourceStoreDtos, "鏌ヨ鎴垮眿淇℃伅閿欒锛�");
+                    resourceStoreUseRecordPo.setUnitPrice(resourceStoreDtos.get(0).getPrice()); //鐗╁搧璧勬簮鍗曚环
+                    resourceStoreUseRecordPo.setCreateUserId(paramInJson.getString("userId")); //鍒涘缓浜篿d
+                    resourceStoreUseRecordPo.setCreateUserName(paramInJson.getString("userName")); //鍒涘缓浜哄悕绉�
+                    resourceStoreUseRecordPo.setRemark(paramIn.getString("purchaseRemark")); //澶囨敞
+                    resourceStoreUseRecordPo.setResourceStoreName(paramIn.getString("resName")); //鐗╁搧鍚嶇О
+                    resourceStoreUseRecordPo.setState(paramIn.getString("state")); //1001 鎶ュ簾鍥炴敹   2002 宸ュ崟鎹熻��   3003 鍏敤鎹熻��
+                    super.insert(dataFlowContext, resourceStoreUseRecordPo, BusinessTypeConstant.BUSINESS_TYPE_SAVE_RESOURCE_STORE_USE_RECORD);
+                    //涓汉鐗╁搧澶勭悊
+                    UserStorehouseDto userStorehouseDto = new UserStorehouseDto();
+                    userStorehouseDto.setUserId(paramInJson.getString("userId"));
+                    userStorehouseDto.setResId(paramIn.getString("resId"));
+                    //鏌ヨ涓汉鐗╁搧淇℃伅
+                    List<UserStorehouseDto> userStorehouseDtos = userStorehouseInnerServiceSMOImpl.queryUserStorehouses(userStorehouseDto);
+                    Assert.listOnlyOne(userStorehouseDtos, "鏌ヨ涓汉鐗╁搧淇℃伅閿欒锛�");
+                    //鑾峰彇涓汉鐗╁搧淇℃伅id
+                    String usId = userStorehouseDtos.get(0).getUsId();
                     //鑾峰彇鐗╁搧鍗曚綅
-                    if (StringUtil.isEmpty(userStorehouses.get(0).getUnitCode())) {
+                    if (StringUtil.isEmpty(userStorehouseDtos.get(0).getUnitCode())) {
                         throw new IllegalArgumentException("鐗╁搧鍗曚綅涓嶈兘涓虹┖");
                     }
-                    String unitCode1 = userStorehouses.get(0).getUnitCode();
+                    String unitCode = userStorehouseDtos.get(0).getUnitCode(); //鐗╁搧鍗曚綅
                     //鑾峰彇鐗╁搧鏈�灏忚閲忓崟浣�
-                    if (StringUtil.isEmpty(userStorehouses.get(0).getMiniUnitCode())) {
+                    if (StringUtil.isEmpty(userStorehouseDtos.get(0).getMiniUnitCode())) {
                         throw new IllegalArgumentException("鐗╁搧鏈�灏忚閲忓崟浣嶄笉鑳戒负绌�");
                     }
-                    String miniUnitCode1 = userStorehouses.get(0).getMiniUnitCode();
-                    //璁$畻鎺ュ彈鐢ㄦ埛鐨勫簱瀛樻暟閲�
-                    BigDecimal num6 = new BigDecimal(Double.parseDouble(miniUnitStock));
-                    double unitStock = addNum.divide(num6, 2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                    if (unitCode1.equals(miniUnitCode1)) { //濡傛灉鐗╁搧鍗曚綅涓庣墿鍝佹渶灏忚閲忓崟浣嶇浉鍚岋紝灏变笉鍚戜笂鍙栨暣
-                        userStorePo.setStock(String.valueOf(unitStock));
-                    } else { //濡傛灉鐗╁搧鍗曚綅涓庣墿鍝佹渶灏忚閲忓崟浣嶄笉鍚岋紝灏卞悜涓婂彇鏁�
-                        double stockNumber = Math.ceil(unitStock);
-                        userStorePo.setStock(String.valueOf(stockNumber));
+                    String miniUnitCode = userStorehouseDtos.get(0).getMiniUnitCode(); //鐗╁搧鏈�灏忚閲忓崟浣�
+                    UserStorehousePo userStorehousePo = new UserStorehousePo();
+                    userStorehousePo.setUsId(usId); //涓汉鐗╁搧id
+                    //鑾峰彇鏈�灏忓崟浣嶈閲忔�绘暟
+                    String miniStock = userStorehouseDtos.get(0).getMiniStock();
+                    //鑾峰彇鏈�灏忚閲忓崟浣嶆暟閲�
+                    String miniUnitStock = paramIn.getString("miniUnitStock");
+                    //鑾峰彇鎶ュ簾鏁伴噺
+                    String giveQuantity = paramIn.getString("giveQuantity");
+                    //闄ゅ幓鎶ュ簾涓汉鐗╁搧鍓╀綑鐨勬渶灏忓崟浣嶈閲忔�绘暟
+                    BigDecimal num1 = new BigDecimal(miniStock);
+                    BigDecimal num2 = new BigDecimal(giveQuantity);
+                    BigDecimal quantity = num1.subtract(num2);
+                    if (quantity.doubleValue() == 0.0) { //濡傛灉鍑忓幓鎶ュ簾鍚庡墿浣�0涓紝閭d箞鏈�灏忚閲忓崟浣嶆�绘暟鍜岀墿鍝佹暟閲忛兘鍙樹负0
+                        userStorehousePo.setMiniStock("0");
+                        userStorehousePo.setStock("0");
+                    } else {
+                        userStorehousePo.setMiniStock(String.valueOf(quantity)); //鍑忓幓鎶ュ簾鍚庡墿浣欑殑鏈�灏忚閲忓崟浣嶆�绘暟
+                        BigDecimal reduceNum = num1.subtract(num2);
+                        if (unitCode.equals(miniUnitCode)) { //濡傛灉鐗╁搧鍗曚綅涓庢渶灏忚閲忓崟浣嶇浉鍚岋紝灏变笉鍚戜笂鍙栨暣
+                            userStorehousePo.setStock(String.valueOf(reduceNum));
+                        } else { //濡傛灉鐗╁搧鏈�灏忚閲忓崟浣嶄笌鐗╁搧鍗曚綅涓嶅悓锛屽氨鍚戜笂鍙栨暣
+                            //鐢ㄨ浆璧犲悗鏈�灏忚閲忔�绘暟闄や互鏈�灏忚閲忓崟浣嶆暟閲忥紝骞跺悜涓婂彇鏁达紝鑾峰彇杞禒鍚庣殑搴撳瓨鏁�
+                            BigDecimal num3 = new BigDecimal(miniUnitStock);
+                            BigDecimal unitStock = reduceNum.divide(num3, 2, BigDecimal.ROUND_HALF_UP);
+                            Integer stockNumber = (int) Math.ceil(unitStock.doubleValue());
+                            userStorehousePo.setStock(String.valueOf(stockNumber)); //鍑忓幓鎶ュ簾鍚庡墿浣欑殑涓汉鐗╁搧鏁伴噺
+                        }
                     }
-                    userStorePo.setUsId(userStorehouses.get(0).getUsId());
-                    //鏇存柊褰撳墠鐢ㄦ埛鐨勫簱瀛樻暟閲�
-                    super.update(dataFlowContext, userStorePo, BusinessTypeConstant.BUSINESS_TYPE_UPDATE_USER_STOREHOUSE);
-                } else if (userStorehouses != null && userStorehouses.size() > 1) {
-                    throw new IllegalArgumentException("鏌ヨ涓汉鐗╁搧淇℃伅閿欒锛�");
-                } else {
-                    //璁$畻杞禒鍚庡簱瀛樻暟閲�
-                    BigDecimal num7 = new BigDecimal(Double.parseDouble(giveQuantity));
-                    BigDecimal num8 = new BigDecimal(Double.parseDouble(miniUnitStock));
-                    double unitStock = num7.divide(num8, 2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                    UserStorehousePo userStorePo = new UserStorehousePo();
-                    userStorePo.setUsId("-1");
-                    userStorePo.setResId(resId);
-                    userStorePo.setResName(resName);
-                    userStorePo.setStoreId(storeId);
-                    if (unitCode.equals(miniUnitCode)) { //濡傛灉鐗╁搧鍗曚綅涓庣墿鍝佹渶灏忚閲忓崟浣嶇浉鍚岋紝灏变笉鍚戜笂鍙栨暣
-                        userStorePo.setStock(String.valueOf(unitStock));
-                    } else { //濡傛灉鐗╁搧鍗曚綅涓庣墿鍝佹渶灏忚閲忓崟浣嶄笉鍚岋紝灏卞悜涓婂彇鏁�
-                        double stockNumber = Math.ceil(unitStock);
-                        userStorePo.setStock(String.valueOf(stockNumber));
+                    //鏇存柊褰撳墠鐢ㄦ埛涓汉鐗╁搧搴撳瓨鏁�
+                    super.update(dataFlowContext, userStorehousePo, BusinessTypeConstant.BUSINESS_TYPE_UPDATE_USER_STOREHOUSE);
+                    commit(dataFlowContext);
+                }
+            } else { //閫�杩�
+                for (int i = 0; i < objects.length; i++) {
+                    Object object = objects[i];
+                    JSONObject paramIn = JSONObject.parseObject(String.valueOf(object));
+                    String stock = paramIn.getString("stock");
+                    //鑾峰彇鏈�灏忚閲忔�绘暟
+                    String miniStock = paramIn.getString("miniStock");
+                    //鑾峰彇鏈�灏忚閲忓崟浣嶆暟閲�
+                    String miniUnitStock = paramIn.getString("miniUnitStock");
+                    //鑾峰彇杞禒鏁伴噺
+                    String giveQuantity = paramIn.getString("giveQuantity");
+                    //鑾峰彇鐗╁搧id
+                    String resId = paramIn.getString("resId");
+                    //鑾峰彇鐗╁搧id
+                    String resCode = paramIn.getString("resCode");
+                    //鑾峰彇鐗╁搧鍚嶇О
+                    String resName = paramIn.getString("resName");
+                    //鑾峰彇褰撳墠鐢ㄦ埛id
+                    String userId = paramInJson.getString("userId");
+                    //鑾峰彇鎺ュ彈杞禒鐢ㄦ埛id
+                    String acceptUserId = paramInJson.getString("acceptUserId");
+                    //鑾峰彇鎺ュ彈杞禒鐢ㄦ埛鍚嶇О
+                    String acceptUserName = paramInJson.getString("acceptUserName");
+                    //鑾峰彇鍟嗘埛id
+                    String storeId = paramInJson.getString("storeId");
+                    JSONObject allocationUserStorehouseJson = new JSONObject();
+                    allocationUserStorehouseJson.put("ausId", "-1");
+                    allocationUserStorehouseJson.put("resId", resId);
+                    allocationUserStorehouseJson.put("resCode", resCode);
+                    allocationUserStorehouseJson.put("resName", resName);
+                    allocationUserStorehouseJson.put("storeId", storeId);
+                    allocationUserStorehouseJson.put("stock", stock);
+                    allocationUserStorehouseJson.put("giveQuantity", giveQuantity);
+                    allocationUserStorehouseJson.put("startUserId", userId);
+                    allocationUserStorehouseJson.put("startUserName", paramInJson.getString("userName"));
+                    allocationUserStorehouseJson.put("acceptUserId", acceptUserId);
+                    allocationUserStorehouseJson.put("acceptUserName", acceptUserName);
+                    allocationUserStorehouseJson.put("createTime", new Date());
+                    allocationUserStorehouseJson.put("remark", paramInJson.getString("description"));
+                    AllocationUserStorehousePo allocationUserStorehousePo = BeanConvertUtil.covertBean(allocationUserStorehouseJson, AllocationUserStorehousePo.class);
+                    super.insert(dataFlowContext, allocationUserStorehousePo, BusinessTypeConstant.BUSINESS_TYPE_SAVE_ALLOCATION_USER_STOREHOUSE);
+                    UserStorehouseDto userStorehouseDto = new UserStorehouseDto();
+                    userStorehouseDto.setUserId(userId);
+                    userStorehouseDto.setResId(resId);
+                    List<UserStorehouseDto> userStorehouseDtos = userStorehouseInnerServiceSMOImpl.queryUserStorehouses(userStorehouseDto);
+                    Assert.listOnlyOne(userStorehouseDtos, "鏌ヨ涓汉鐗╁搧淇℃伅閿欒锛�");
+                    //鑾峰彇涓汉鐗╁搧淇℃伅id
+                    String usId = userStorehouseDtos.get(0).getUsId();
+                    //鑾峰彇鐗╁搧鍗曚綅
+                    if (StringUtil.isEmpty(userStorehouseDtos.get(0).getUnitCode())) {
+                        throw new IllegalArgumentException("鐗╁搧鍗曚綅涓嶈兘涓虹┖");
                     }
-                    userStorePo.setMiniStock(giveQuantity);
-                    userStorePo.setUserId(acceptUserId);
-                    //淇濆瓨鎺ュ彈杞禒鐢ㄦ埛涓汉鐗╁搧淇℃伅
-                    super.insert(dataFlowContext, userStorePo, BusinessTypeConstant.BUSINESS_TYPE_SAVE_USER_STOREHOUSE);
+                    String unitCode = userStorehouseDtos.get(0).getUnitCode();
+                    //鑾峰彇鐗╁搧鏈�灏忚閲忓崟浣�
+                    if (StringUtil.isEmpty(userStorehouseDtos.get(0).getMiniUnitCode())) {
+                        throw new IllegalArgumentException("鐗╁搧鏈�灏忚閲忓崟浣嶄笉鑳戒负绌�");
+                    }
+                    String miniUnitCode = userStorehouseDtos.get(0).getMiniUnitCode();
+                    UserStorehousePo userStorehousePo = new UserStorehousePo();
+                    userStorehousePo.setUsId(usId);
+                    //杞禒鍚庝釜浜虹墿鍝佹渶灏忚閲忔�绘暟
+                    BigDecimal num1 = new BigDecimal(miniStock);
+                    BigDecimal num2 = new BigDecimal(giveQuantity);
+                    BigDecimal quantity = num1.subtract(num2);
+                    if (quantity.doubleValue() == 0.0) {
+                        userStorehousePo.setMiniStock("0");
+                        userStorehousePo.setStock("0");
+                    } else {
+                        userStorehousePo.setMiniStock(String.valueOf(quantity));
+                        BigDecimal reduceNum = num1.subtract(num2);
+                        if (unitCode.equals(miniUnitCode)) { //濡傛灉鐗╁搧鍗曚綅涓庢渶灏忚閲忓崟浣嶇浉鍚岋紝灏变笉鍚戜笂鍙栨暣
+                            userStorehousePo.setStock(String.valueOf(reduceNum));
+                        } else { //濡傛灉鐗╁搧鏈�灏忚閲忓崟浣嶄笌鐗╁搧鍗曚綅涓嶅悓锛屽氨鍚戜笂鍙栨暣
+                            //鐢ㄨ浆璧犲悗鏈�灏忚閲忔�绘暟闄や互鏈�灏忚閲忓崟浣嶆暟閲忥紝骞跺悜涓婂彇鏁达紝鑾峰彇杞禒鍚庣殑搴撳瓨鏁�
+                            BigDecimal num3 = new BigDecimal(miniUnitStock);
+                            BigDecimal unitStock = reduceNum.divide(num3, 2, BigDecimal.ROUND_HALF_UP);
+                            Integer stockNumber = (int) Math.ceil(unitStock.doubleValue());
+                            userStorehousePo.setStock(String.valueOf(stockNumber));
+                        }
+                    }
+                    //鏇存柊褰撳墠鐢ㄦ埛搴撳瓨鏁�
+                    super.update(dataFlowContext, userStorehousePo, BusinessTypeConstant.BUSINESS_TYPE_UPDATE_USER_STOREHOUSE);
+                    UserStorehouseDto userStorehouse = new UserStorehouseDto();
+                    userStorehouse.setUserId(acceptUserId);
+                    userStorehouse.setResCode(resCode);
+                    //鏌ヨ鎺ュ彈杞禒浜虹殑涓汉鐗╁搧淇℃伅
+                    List<UserStorehouseDto> userStorehouses = userStorehouseInnerServiceSMOImpl.queryUserStorehouses(userStorehouse);
+                    if (userStorehouses != null && userStorehouses.size() == 1) {
+                        UserStorehousePo userStorePo = new UserStorehousePo();
+                        //璁$畻鎺ュ彈鐢ㄦ埛鐨勬渶灏忚閲忔�绘暟
+                        BigDecimal num4 = new BigDecimal(userStorehouses.get(0).getMiniStock());
+                        BigDecimal num5 = new BigDecimal(giveQuantity);
+                        BigDecimal addNum = num4.add(num5);
+                        BigDecimal acceptMiniStock = num4.add(num5);
+                        userStorePo.setMiniStock(String.valueOf(acceptMiniStock));
+                        //鑾峰彇鐗╁搧鍗曚綅
+                        if (StringUtil.isEmpty(userStorehouses.get(0).getUnitCode())) {
+                            throw new IllegalArgumentException("鐗╁搧鍗曚綅涓嶈兘涓虹┖");
+                        }
+                        String unitCode1 = userStorehouses.get(0).getUnitCode();
+                        //鑾峰彇鐗╁搧鏈�灏忚閲忓崟浣�
+                        if (StringUtil.isEmpty(userStorehouses.get(0).getMiniUnitCode())) {
+                            throw new IllegalArgumentException("鐗╁搧鏈�灏忚閲忓崟浣嶄笉鑳戒负绌�");
+                        }
+                        String miniUnitCode1 = userStorehouses.get(0).getMiniUnitCode();
+                        //璁$畻鎺ュ彈鐢ㄦ埛鐨勫簱瀛樻暟閲�
+                        BigDecimal num6 = new BigDecimal(miniUnitStock);
+                        BigDecimal unitStock = addNum.divide(num6, 2, BigDecimal.ROUND_HALF_UP);
+                        if (unitCode1.equals(miniUnitCode1)) { //濡傛灉鐗╁搧鍗曚綅涓庣墿鍝佹渶灏忚閲忓崟浣嶇浉鍚岋紝灏变笉鍚戜笂鍙栨暣
+                            //濡傛灉鐗╁搧鍗曚綅涓庢渶灏忚閲忓崟浣嶇浉鍚岋紝鐗╁搧搴撳瓨灏辩瓑浜庢渶灏忚閲忔�绘暟
+                            userStorePo.setStock(String.valueOf(acceptMiniStock));
+                        } else { //濡傛灉鐗╁搧鍗曚綅涓庣墿鍝佹渶灏忚閲忓崟浣嶄笉鍚岋紝灏卞悜涓婂彇鏁�
+                            Integer stockNumber = (int) Math.ceil(unitStock.doubleValue());
+                            userStorePo.setStock(String.valueOf(stockNumber));
+                        }
+                        userStorePo.setUsId(userStorehouses.get(0).getUsId());
+                        //鏇存柊褰撳墠鐢ㄦ埛鐨勫簱瀛樻暟閲�
+                        super.update(dataFlowContext, userStorePo, BusinessTypeConstant.BUSINESS_TYPE_UPDATE_USER_STOREHOUSE);
+                    } else if (userStorehouses != null && userStorehouses.size() > 1) {
+                        throw new IllegalArgumentException("鏌ヨ涓汉鐗╁搧淇℃伅閿欒锛�");
+                    } else {
+                        //璁$畻杞禒鍚庡簱瀛樻暟閲�
+                        BigDecimal num7 = new BigDecimal(giveQuantity);
+                        BigDecimal num8 = new BigDecimal(miniUnitStock);
+                        BigDecimal unitStock = num7.divide(num8, 2, BigDecimal.ROUND_HALF_UP);
+                        UserStorehousePo userStorePo = new UserStorehousePo();
+                        userStorePo.setUsId("-1");
+                        userStorePo.setResId(resId);
+                        userStorePo.setResName(resName);
+                        userStorePo.setStoreId(storeId);
+                        userStorePo.setResCode(resCode);
+                        if (unitCode.equals(miniUnitCode)) { //濡傛灉鐗╁搧鍗曚綅涓庣墿鍝佹渶灏忚閲忓崟浣嶇浉鍚岋紝灏变笉鍚戜笂鍙栨暣
+                            userStorePo.setStock(String.valueOf(num7));
+                        } else { //濡傛灉鐗╁搧鍗曚綅涓庣墿鍝佹渶灏忚閲忓崟浣嶄笉鍚岋紝灏卞悜涓婂彇鏁�
+                            Integer stockNumber = (int) Math.ceil(unitStock.doubleValue());
+                            userStorePo.setStock(String.valueOf(stockNumber));
+                        }
+                        userStorePo.setMiniStock(giveQuantity);
+                        userStorePo.setUserId(acceptUserId);
+                        //淇濆瓨鎺ュ彈杞禒鐢ㄦ埛涓汉鐗╁搧淇℃伅
+                        super.insert(dataFlowContext, userStorePo, BusinessTypeConstant.BUSINESS_TYPE_SAVE_USER_STOREHOUSE);
+                    }
                 }
             }
         }
@@ -208,4 +301,53 @@
         super.update(dataFlowContext, allocationUserStorehousePo, BusinessTypeConstant.BUSINESS_TYPE_DELETE_ALLOCATION_USER_STOREHOUSE);
     }
 
+    @Override
+    public String getServiceCode() {
+        return null;
+    }
+
+    @Override
+    public HttpMethod getHttpMethod() {
+        return null;
+    }
+
+    @Override
+    public ResponseEntity<String> callService(ServiceDataFlowEvent event) {
+        return null;
+    }
+
+    @Override
+    public ResponseEntity<String> callService(DataFlowContext context, String serviceCode, JSONArray businesses) {
+        return null;
+    }
+
+    @Override
+    public ResponseEntity<String> callService(DataFlowContext context, String serviceCode, JSONObject businesses) {
+        return null;
+    }
+
+    @Override
+    public ResponseEntity<String> callService(DataFlowContext context, AppService appService, Map paramIn) {
+        return null;
+    }
+
+    @Override
+    public JSONObject restToCenterProtocol(JSONObject businesses, Map<String, String> headers) {
+        return null;
+    }
+
+    @Override
+    public void freshHttpHeader(HttpHeaders httpHeaders, Map<String, String> headers) {
+
+    }
+
+    @Override
+    protected void validate(ServiceDataFlowEvent event, JSONObject reqJson) throws ParseException {
+
+    }
+
+    @Override
+    protected void doSoService(ServiceDataFlowEvent event, DataFlowContext context, JSONObject reqJson) throws ParseException {
+
+    }
 }

--
Gitblit v1.8.0