| | |
| | | package com.java110.api.bmo.allocationUserStorehouse.impl; |
| | | |
| | | 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.core.context.DataFlowContext; |
| | | import com.java110.dto.userStorehouse.UserStorehouseDto; |
| | | import com.java110.intf.store.IAllocationUserStorehouseInnerServiceSMO; |
| | | import com.java110.intf.store.IUserStorehouseInnerServiceSMO; |
| | | import com.java110.po.allocationUserStorehouse.AllocationUserStorehousePo; |
| | | 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.stereotype.Service; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | @Service("allocationUserStorehouseBMOImpl") |
| | | public class AllocationUserStorehouseBMOImpl extends ApiBaseBMO implements IAllocationUserStorehouseBMO { |
| | | |
| | | @Autowired |
| | | private IAllocationUserStorehouseInnerServiceSMO allocationUserStorehouseInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IUserStorehouseInnerServiceSMO userStorehouseInnerServiceSMOImpl; |
| | |
| | | * @return 订单服务能够接受的报文 |
| | | */ |
| | | public void addAllocationUserStorehouse(JSONObject paramInJson, DataFlowContext dataFlowContext) { |
| | | //获取库存数量 |
| | | String stock = paramInJson.getString("stock"); |
| | | //获取转增数量 |
| | | String giveQuantity = paramInJson.getString("giveQuantity"); |
| | | //获取当前用户id |
| | | String userId = paramInJson.getString("userId"); |
| | | //获取接受转增用户id |
| | | String acceptUserId = paramInJson.getString("acceptUserId"); |
| | | //获取物品id |
| | | String resId = paramInJson.getString("resId"); |
| | | paramInJson.put("ausId", "-1"); |
| | | paramInJson.put("createTime", new Date()); |
| | | paramInJson.put("startUserId", userId); |
| | | paramInJson.put("startUserName", paramInJson.getString("userName")); |
| | | paramInJson.put("remark", paramInJson.getString("description")); |
| | | AllocationUserStorehousePo allocationUserStorehousePo = BeanConvertUtil.covertBean(paramInJson, 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(); |
| | | UserStorehousePo userStorehousePo = new UserStorehousePo(); |
| | | userStorehousePo.setUsId(usId); |
| | | //获取转增后的库存数量 |
| | | int newStock = Integer.parseInt(stock) - Integer.parseInt(giveQuantity); |
| | | userStorehousePo.setStock(String.valueOf(newStock)); |
| | | //更新当前用户库存数 |
| | | 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) { |
| | | //获取接受用户库存数 |
| | | String userStock = userStorehouses.get(0).getStock(); |
| | | //获取转增后的库存数量 |
| | | int myStock = Integer.parseInt(userStock) + Integer.parseInt(giveQuantity); |
| | | UserStorehousePo userStorePo = new UserStorehousePo(); |
| | | userStorePo.setUsId(userStorehouses.get(0).getUsId()); |
| | | userStorePo.setStock(String.valueOf(myStock)); |
| | | //更新当前用户的库存数量 |
| | | super.update(dataFlowContext, userStorePo, BusinessTypeConstant.BUSINESS_TYPE_UPDATE_USER_STOREHOUSE); |
| | | } else if (userStorehouses != null && userStorehouses.size() > 1) { |
| | | throw new IllegalArgumentException("查询个人物品信息错误!"); |
| | | } else { |
| | | UserStorehousePo userStorePo = new UserStorehousePo(); |
| | | userStorePo.setUsId("-1"); |
| | | userStorePo.setResId(resId); |
| | | userStorePo.setResName(paramInJson.getString("resName")); |
| | | userStorePo.setStoreId(paramInJson.getString("storeId")); |
| | | userStorePo.setStock(giveQuantity); |
| | | userStorePo.setUserId(acceptUserId); |
| | | //保存接受转增用户个人物品信息 |
| | | super.insert(dataFlowContext, userStorePo, BusinessTypeConstant.BUSINESS_TYPE_SAVE_USER_STOREHOUSE); |
| | | String resourceStores = paramInJson.getString("resourceStores"); |
| | | 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)); |
| | | //获取物品单位 |
| | | 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(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)); |
| | | } |
| | | 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)); |
| | | } |
| | | userStorePo.setMiniStock(giveQuantity); |
| | | userStorePo.setUserId(acceptUserId); |
| | | //保存接受转赠用户个人物品信息 |
| | | super.insert(dataFlowContext, userStorePo, BusinessTypeConstant.BUSINESS_TYPE_SAVE_USER_STOREHOUSE); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |