|
@@ -8,29 +8,22 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.bsentity.domin.ComCustomerDo;
|
|
|
import com.bsentity.domin.ComMetalFinanceItemDo;
|
|
|
import com.bsentity.domin.ComMetalFinanceRecheckItemDo;
|
|
|
+import com.bsentity.dto.MetalConfigDto;
|
|
|
import com.bsentity.dto.MetalProductDto;
|
|
|
-import com.bsentity.vo.CopyFinanceRequest;
|
|
|
-import com.bsentity.vo.CopyFinanceVo;
|
|
|
-import com.bsentity.vo.GetFinalWeightRequest;
|
|
|
-import com.bsentity.vo.GetFinalWeightVo;
|
|
|
+import com.bsentity.vo.*;
|
|
|
import com.rongwei.bscommon.sys.dao.ComMetalFinanceItemDao;
|
|
|
import com.rongwei.bscommon.sys.dao.ComMetalFinanceRecheckItemDao;
|
|
|
-import com.rongwei.bscommon.sys.service.ComCustomerService;
|
|
|
-import com.rongwei.bscommon.sys.service.ComMetalFinanceItemService;
|
|
|
-import com.rongwei.bscommon.sys.service.ComMetalFinanceRecheckItemService;
|
|
|
-import com.rongwei.bscommon.sys.service.ComMetalProductService;
|
|
|
+import com.rongwei.bscommon.sys.service.*;
|
|
|
import com.rongwei.rwcommon.base.R;
|
|
|
import com.rongwei.rwcommon.base.exception.CustomException;
|
|
|
import lombok.extern.log4j.Log4j2;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.Optional;
|
|
|
+import java.util.*;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -54,6 +47,8 @@ public class ComMetalFinanceItemServiceImpl extends ServiceImpl<ComMetalFinanceI
|
|
|
ComCustomerService customerService;
|
|
|
@Autowired
|
|
|
ComMetalProductService comMetalProductService;
|
|
|
+ @Autowired
|
|
|
+ ComMetalConfigService comMetalConfigService;
|
|
|
|
|
|
@Override
|
|
|
public R copyFinance(CopyFinanceRequest request) {
|
|
@@ -146,6 +141,112 @@ public class ComMetalFinanceItemServiceImpl extends ServiceImpl<ComMetalFinanceI
|
|
|
return R.ok();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据重置的金属价格,重新计算 计算合计(人民币), 计算合计(美元), 单kg损失金额
|
|
|
+ * @param financeItemVos
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public R resetFinance(List<FinanceItemVo> financeItemVos) {
|
|
|
+ log.info("重置计算 参数 -> {}" , financeItemVos);
|
|
|
+ // 变更数据
|
|
|
+ List<String> financeItemIds = financeItemVos.stream().map(FinanceItemVo::getId).collect(Collectors.toList());
|
|
|
+ List<ComMetalFinanceItemDo> comMetalFinanceItemDos = baseMapper.selectBatchIds(financeItemIds);
|
|
|
+ if (comMetalFinanceItemDos.isEmpty()){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ // 变更
|
|
|
+ return updateFinanceItem(comMetalFinanceItemDos , financeItemVos);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 变更计算数据 , 同时变更 表单合计数据
|
|
|
+ * @param comMetalFinanceItemDos
|
|
|
+ * @param financeItemVos
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R updateFinanceItem(List<ComMetalFinanceItemDo> comMetalFinanceItemDos, List<FinanceItemVo> financeItemVos) {
|
|
|
+ log.info("重置财务预估,变更处理...");
|
|
|
+ // 计算处理
|
|
|
+ Set<String> metalConfigIds = comMetalFinanceItemDos.stream().map(ComMetalFinanceItemDo::getMetalconfigid).collect(Collectors.toSet());
|
|
|
+
|
|
|
+ List<MetalConfigDto> metalConfigDtoList = comMetalConfigService.getMetalById(metalConfigIds);
|
|
|
+ MetalConfigDto metalConfigDto = metalConfigDtoList.get(0);
|
|
|
+
|
|
|
+ for (FinanceItemVo financeItemVo : financeItemVos) {
|
|
|
+ financeItemVo.setMetalPrice(metalConfigDto.getMetalPrice());
|
|
|
+ financeItemVo.setLossRate(metalConfigDto.getLossRate());
|
|
|
+ financeItemVo.setMetalConfigId(metalConfigDtoList.get(0).getId());
|
|
|
+
|
|
|
+ financeItemVo.calculate();
|
|
|
+ }
|
|
|
+ Map<String, FinanceItemVo> itemVoMap = financeItemVos.stream()
|
|
|
+ .collect(Collectors.toMap(FinanceItemVo::getId, Function.identity()));
|
|
|
+
|
|
|
+
|
|
|
+ for (ComMetalFinanceItemDo itemDo : comMetalFinanceItemDos) {
|
|
|
+ FinanceItemVo financeItemVo = itemVoMap.get(itemDo.getId());
|
|
|
+ itemDo.setProcessunitprice(financeItemVo.getProcessUnitPrice());
|
|
|
+ itemDo.setCostunitprice(financeItemVo.getCostUnitPrice());
|
|
|
+ itemDo.setMetalpriceloss(financeItemVo.getMetalPriceLoss());
|
|
|
+ itemDo.setFreightunitprice(financeItemVo.getFreightUnitPrice());
|
|
|
+ itemDo.setFreightloss(financeItemVo.getFreightLoss());
|
|
|
+ itemDo.setTotalcostrmb(financeItemVo.getTotalcostrmb());
|
|
|
+ itemDo.setExchangerate(financeItemVo.getExchangeRate());
|
|
|
+ itemDo.setPricetotalusd(financeItemVo.getPricetotalusd());
|
|
|
+ itemDo.setOthercostrmb(financeItemVo.getOtherCostRMB());
|
|
|
+ itemDo.setOthercostusd(financeItemVo.getOthercostusd());
|
|
|
+ itemDo.setUnitkgpricelossusd(financeItemVo.getUnitkgpricelossusd());
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 计算合计(人民币) = 所有计算合计数据总和
|
|
|
+ BigDecimal itemTotalcostrmb = comMetalFinanceItemDos.stream()
|
|
|
+ .map(ComMetalFinanceItemDo::getTotalcostrmb)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ // 计算合计(美元) = 所有计算合计(美元)总和
|
|
|
+ BigDecimal itemPricetotalusd = comMetalFinanceItemDos.stream()
|
|
|
+ .map(ComMetalFinanceItemDo::getPricetotalusd)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ // 其他费用(人民币)
|
|
|
+ BigDecimal itemOthercostrmb = comMetalFinanceItemDos.stream()
|
|
|
+ .map(ComMetalFinanceItemDo::getOthercostrmb)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+
|
|
|
+ // 其他费用 (美元)
|
|
|
+ BigDecimal itemOthercostusd = comMetalFinanceItemDos.stream()
|
|
|
+ .map(ComMetalFinanceItemDo::getOthercostusd)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+
|
|
|
+ // 金额总计 (人民币) = 计算合计(人民币) + 其他费用(人民币)
|
|
|
+ BigDecimal costRmb = itemTotalcostrmb.add(itemOthercostrmb);
|
|
|
+
|
|
|
+ // 金额总计 (美元) = 计算合计(美元) + 其他费用(美元)
|
|
|
+ BigDecimal pricetotalusd = itemPricetotalusd.add(itemOthercostusd);
|
|
|
+
|
|
|
+
|
|
|
+ ComCustomerDo comCustomerDo = customerService.getById(comMetalFinanceItemDos.get(0).getCustomerid());
|
|
|
+ if (ObjectUtil.isNotEmpty(comCustomerDo)){
|
|
|
+ comCustomerDo.setComputecostrmb(itemTotalcostrmb);
|
|
|
+ comCustomerDo.setComputecostusd(itemPricetotalusd);
|
|
|
+ comCustomerDo.setOthercostrmb(itemOthercostrmb);
|
|
|
+ comCustomerDo.setOthercostusd(itemOthercostusd);
|
|
|
+ comCustomerDo.setTotalcostrmb(costRmb);
|
|
|
+ comCustomerDo.setPricetotalusd(pricetotalusd);
|
|
|
+ }
|
|
|
+
|
|
|
+ saveOrUpdateBatch(comMetalFinanceItemDos);
|
|
|
+ customerService.saveOrUpdate(comCustomerDo);
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 计算财务复核合计数据
|