|
|
@@ -18,6 +18,10 @@ import com.sckw.core.utils.NumberUtils;
|
|
|
import com.sckw.core.utils.StringUtils;
|
|
|
import com.sckw.core.web.context.LoginUserHolder;
|
|
|
import com.sckw.excel.utils.DateUtil;
|
|
|
+import com.sckw.payment.api.dubbo.PayCenterDubboService;
|
|
|
+import com.sckw.payment.api.model.constant.ChannelEnum;
|
|
|
+import com.sckw.payment.api.model.dto.WalletDto;
|
|
|
+import com.sckw.payment.api.model.dto.common.R;
|
|
|
import com.sckw.product.dao.KwpGoodsMapper;
|
|
|
import com.sckw.product.enums.GoodsStatusEnum;
|
|
|
import com.sckw.product.model.*;
|
|
|
@@ -34,6 +38,7 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -50,6 +55,9 @@ public class KwpGoodsService {
|
|
|
@DubboReference(version = "2.0.0", group = "design", check = false)
|
|
|
private RemoteSystemService remoteSystemService;
|
|
|
|
|
|
+ @DubboReference(version = "2.0.0", group = "design", check = false)
|
|
|
+ private PayCenterDubboService payCenterDubboService;
|
|
|
+
|
|
|
private final KwpGoodsMapper kwpGoodsMapper;
|
|
|
private final KwpGoodsAddressService kwpGoodsAddressService;
|
|
|
private final KwpGoodsAttributeService kwpGoodsAttributeService;
|
|
|
@@ -814,4 +822,51 @@ public class KwpGoodsService {
|
|
|
public void updateById(KwpGoods goods) {
|
|
|
kwpGoodsMapper.updateById(goods);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc: 获取商品预计最大可购数量
|
|
|
+ * @author: yzc
|
|
|
+ * @date: 2023-07-31 17:41
|
|
|
+ * @Param param:
|
|
|
+ * @return: java.math.BigDecimal
|
|
|
+ */
|
|
|
+ public BigDecimal maxPurchaseNum(MaxPurchaseNumParam param) {
|
|
|
+ LambdaQueryWrapper<KwpGoods> wrapper = new LambdaQueryWrapper<>();
|
|
|
+ LambdaQueryWrapper<KwpGoods> last = wrapper.eq(KwpGoods::getId, param.getGoodsId()).eq(KwpGoods::getDelFlag, Global.NO)
|
|
|
+ .eq(KwpGoods::getStatus, GoodsStatusEnum.PUT_ON_SHELVES.getCode()).last("LIMIT 1");
|
|
|
+ KwpGoods goods = kwpGoodsMapper.selectOne(last);
|
|
|
+ if (Objects.isNull(goods)) {
|
|
|
+ throw new BusinessException("商品不存在或已下架!");
|
|
|
+ }
|
|
|
+ BigDecimal amount = goods.getAmount();
|
|
|
+ if (!goods.getTrading().startsWith("0")) {
|
|
|
+ return amount;
|
|
|
+ }
|
|
|
+ if (Objects.isNull(param.getProcureEntId()) || Objects.isNull(param.getSupplyEntId())) {
|
|
|
+ throw new BusinessException("采购或供应单位信息不能为空!");
|
|
|
+ }
|
|
|
+ List<Long> entIds = Arrays.asList(param.getProcureEntId(), param.getSupplyEntId());
|
|
|
+ Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntTreeByIds(entIds);
|
|
|
+ EntCacheResDto procure = entMap.get(param.getProcureEntId());
|
|
|
+ if (Objects.isNull(procure) || Objects.isNull(procure.getId())) {
|
|
|
+ log.error("采购单位:{}找不到对应一级企业信息", param.getProcureEntId());
|
|
|
+ throw new BusinessException("采购单位一级企业信息不存在!");
|
|
|
+ }
|
|
|
+ EntCacheResDto supply = entMap.get(param.getSupplyEntId());
|
|
|
+ if (Objects.isNull(supply) || Objects.isNull(supply.getId())) {
|
|
|
+ log.error("供应单位:{}找不到对应一级企业信息", param.getSupplyEntId());
|
|
|
+ throw new BusinessException("供应单位一级企业信息不存在!");
|
|
|
+ }
|
|
|
+ R<List<WalletDto>> wallet = payCenterDubboService.wallet(procure.getId(), ChannelEnum.getByCode(goods.getTrading()), supply.getId());
|
|
|
+ if (Objects.isNull(wallet) || Objects.equals(wallet.getCode(), 0)) {
|
|
|
+ throw new BusinessException("校验预付钱包异常,请联系管理员!");
|
|
|
+ }
|
|
|
+ List<WalletDto> data = wallet.getData();
|
|
|
+ if (CollectionUtils.isEmpty(data)) {
|
|
|
+ throw new BusinessException("检测尚未创建对应预付款清单,请先创建!");
|
|
|
+ }
|
|
|
+ long money = data.get(0).getMoney();
|
|
|
+ BigDecimal divide = new BigDecimal(money).divide(param.getUtilPrice().multiply(new BigDecimal("100")), 2, RoundingMode.HALF_UP);
|
|
|
+ return amount.compareTo(divide) < 0 ? amount : divide;
|
|
|
+ }
|
|
|
}
|