|
|
@@ -17,6 +17,7 @@ import com.sckw.contract.model.report.TradeListExport;
|
|
|
import com.sckw.contract.model.vo.req.*;
|
|
|
import com.sckw.contract.model.vo.res.*;
|
|
|
import com.sckw.contract.repository.KwcContractTradeGoodsRepository;
|
|
|
+import com.sckw.contract.repository.KwcContractTradeRepository;
|
|
|
import com.sckw.contract.service.CommonBusinessService;
|
|
|
import com.sckw.contract.service.KwcContractTradeGoodsService;
|
|
|
import com.sckw.contract.service.KwcContractTradeTrackService;
|
|
|
@@ -91,6 +92,7 @@ public class KwcContractTradeService {
|
|
|
private CommonBusinessService commonBusinessService;
|
|
|
|
|
|
private final KwcContractTradeGoodsRepository kwcContractTradeGoodsRepository;
|
|
|
+ private final KwcContractTradeRepository kwcContractTradeRepository;
|
|
|
|
|
|
@DubboReference(version = "1.0.0", group = "design", check = false)
|
|
|
private RemoteSystemService remoteSystemService;
|
|
|
@@ -257,7 +259,7 @@ public class KwcContractTradeService {
|
|
|
}
|
|
|
|
|
|
//保存交易合同商品信息
|
|
|
- kwcContractTradeGoodsService.saveContractTradeGoods(contactId, goodsInfoList);
|
|
|
+ kwcContractTradeGoodsService.saveContractTradeGoods(contactId, goodsInfoList,baseInfo.getStartTime(),baseInfo.getEndTime());
|
|
|
|
|
|
//存单位信息
|
|
|
kwcContractTradeUnitService.saveContractTradeUnit(contactId, baseInfo);
|
|
|
@@ -720,7 +722,8 @@ public class KwcContractTradeService {
|
|
|
throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
|
|
|
}
|
|
|
}
|
|
|
- kwcContractTradeGoodsService.saveContractTradeGoods(kwcContractTrade.getId(), reqVo.getGoodsInfo());
|
|
|
+ kwcContractTradeGoodsService.saveContractTradeGoods(kwcContractTrade.getId(), reqVo.getGoodsInfo(),
|
|
|
+ baseInfo.getStartTime(), baseInfo.getEndTime());
|
|
|
|
|
|
//保存单位信息-先把以前的删除
|
|
|
List<KwcContractTradeUnit> kwcContractTradeUnits = kwcContractTradeUnitService.queryByContractId(contractId);
|
|
|
@@ -1093,31 +1096,98 @@ public class KwcContractTradeService {
|
|
|
//校验标的信息是否有重复
|
|
|
checkParams(req);
|
|
|
//保存补充合同
|
|
|
- saveTradeContract(req);
|
|
|
+ long contactId = new IdWorker(1L).nextId();
|
|
|
+ saveTradeContract(req, contactId);
|
|
|
|
|
|
//获取商品id
|
|
|
List<Long> goodsIds = req.getGoodsInfo()
|
|
|
.stream()
|
|
|
.map(SupplyContractTradeReq.TradeGoodsInfo::getGoodsId)
|
|
|
.collect(Collectors.toList());
|
|
|
+
|
|
|
+
|
|
|
+ //根据父id查询补充合同id
|
|
|
+ List<KwcContractTrade> kwcContractTrades = kwcContractTradeRepository.queryByPid(req.getPid());
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwcContractTrades)){
|
|
|
+ throw new BusinessException("没有补充合同");
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取合同id
|
|
|
+ Set<Long> contractIds = kwcContractTrades.stream()
|
|
|
+ .map(KwcContractTrade::getId)
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+ contractIds.add(req.getPid());
|
|
|
+ //查询标的信息
|
|
|
//根据商品id查询标的信息和主合同
|
|
|
List<KwcContractTradeGoods> kwcContractTradeGoods =
|
|
|
- kwcContractTradeGoodsRepository.queryByConTractIdGoodsIds(req.getPid(),goodsIds);
|
|
|
+ kwcContractTradeGoodsRepository.queryByConTractIdsGoodsIds(contractIds,goodsIds);
|
|
|
+ //商品id映射商品信息(排除主合同查看是否存在补充合同的商品信息)
|
|
|
+ Map<Long, KwcContractTradeGoods> goodsIdAndGoodsMap = kwcContractTradeGoods.stream()
|
|
|
+ .filter(x -> !Objects.equals(x.getContractId(), req.getPid()))
|
|
|
+ .collect(Collectors.toMap(KwcContractTradeGoods::getGoodsId, Function.identity(), (x, y) -> x));
|
|
|
+ //过滤主合同查看的标信息 , 合同id商品id组成唯一key映射商品信息
|
|
|
+ Map<String, KwcContractTradeGoods> contractTradeKeyAndGoodsMap =
|
|
|
+ kwcContractTradeGoods.stream().filter(x -> Objects.equals(x.getContractId(), req.getPid()))
|
|
|
+ .peek(x -> x.setContractIdGoodsIdKey(x.getContractId() + "-" + x.getGoodsId()))
|
|
|
+ .collect(Collectors.toMap(KwcContractTradeGoods::getContractIdGoodsIdKey, Function.identity(), (x, y) -> x));
|
|
|
+
|
|
|
//商品id映射交易商品信息
|
|
|
- Map<Long, KwcContractTradeGoods> goodsIdAndCtgMap = kwcContractTradeGoods.stream()
|
|
|
- .collect(Collectors.toMap(KwcContractTradeGoods::getGoodsId, Function.identity(), (a, b) -> a));
|
|
|
- List<KwcContractTradeGoods> tradeGoodsList = Lists.newArrayList();
|
|
|
- req.getGoodsInfo().forEach(x->{
|
|
|
- KwcContractTradeGoods tradeGoods = goodsIdAndCtgMap.getOrDefault(x.getGoodsId(),new KwcContractTradeGoods());
|
|
|
- // cxdf todo 补充合同的逻辑
|
|
|
-// if (tradeGoods){
|
|
|
-//
|
|
|
-// }
|
|
|
+ List<KwcContractTradeGoods> saveOrUpdateTradeGoods = Lists.newArrayList();
|
|
|
+ req.getGoodsInfo().forEach(g -> {
|
|
|
+ KwcContractTradeGoods tradeGoods = goodsIdAndGoodsMap.get(g.getGoodsId());
|
|
|
+ if (Objects.isNull(tradeGoods)){
|
|
|
+ //作为新增对象
|
|
|
+ buildTradeGoods(req, g, contractTradeKeyAndGoodsMap, saveOrUpdateTradeGoods,contactId);
|
|
|
+
|
|
|
+ }else {
|
|
|
+ //如果不为空判断时间是否重叠 存在则报错
|
|
|
+ if (g.getEffectiveStartTime().after(tradeGoods.getStartTime()) && g.getEffectiveStartTime().before(tradeGoods.getEndTime())
|
|
|
+ || (g.getEffectiveEntTime().after(tradeGoods.getStartTime()) && g.getEffectiveEntTime().before(tradeGoods.getEndTime()))){
|
|
|
+ throw new BusinessException("商品:"+g.getGoodsName() +"时间重叠,只有先结束之前的补充合同,才能进行创建;");
|
|
|
+ }
|
|
|
+ buildTradeGoods(req, g, contractTradeKeyAndGoodsMap, saveOrUpdateTradeGoods,contactId);
|
|
|
+ }
|
|
|
});
|
|
|
|
|
|
+ kwcContractTradeGoodsRepository.saveOrUpdateBatch(saveOrUpdateTradeGoods);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void buildTradeGoods(SupplyContractTradeReq req, SupplyContractTradeReq.TradeGoodsInfo g,
|
|
|
+ Map<String, KwcContractTradeGoods> contractTradeKeyAndGoodsMap,
|
|
|
+ List<KwcContractTradeGoods> saveTradeGoods,long contactId) {
|
|
|
+ Long userId = LoginUserHolder.getUserId();
|
|
|
+ Date date = new Date();
|
|
|
+ KwcContractTradeGoods saveSupplyTradeGoods = new KwcContractTradeGoods();
|
|
|
+ saveSupplyTradeGoods.setContractId(contactId);
|
|
|
+ saveSupplyTradeGoods.setGoodsId(g.getGoodsId());
|
|
|
+ saveSupplyTradeGoods.setSkuId(0L);
|
|
|
+ saveSupplyTradeGoods.setAmount(g.getAmount());
|
|
|
+ saveSupplyTradeGoods.setUnit(g.getUnit());
|
|
|
+ saveSupplyTradeGoods.setPrice(g.getPrice());
|
|
|
+ saveSupplyTradeGoods.setPerformedAmount(new BigDecimal("0"));
|
|
|
+ saveSupplyTradeGoods.setStatus(Global.NO);
|
|
|
+ saveSupplyTradeGoods.setCreateBy(userId);
|
|
|
+ saveSupplyTradeGoods.setCreateTime(date);
|
|
|
+ saveSupplyTradeGoods.setUpdateBy(userId);
|
|
|
+ saveSupplyTradeGoods.setUpdateTime(date);
|
|
|
+ saveSupplyTradeGoods.setDelFlag(Global.NO);
|
|
|
+ saveSupplyTradeGoods.setStartTime(g.getEffectiveStartTime());
|
|
|
+ saveSupplyTradeGoods.setEndTime(g.getEffectiveEntTime());
|
|
|
+ //修改主合同商品数量
|
|
|
+
|
|
|
+ KwcContractTradeGoods tradeGoodsData =
|
|
|
+ contractTradeKeyAndGoodsMap.get(req.getPid() + "-" + g.getGoodsId());
|
|
|
+ if (Objects.nonNull(tradeGoodsData)){
|
|
|
+ KwcContractTradeGoods mainTradeGoods = new KwcContractTradeGoods();
|
|
|
+ mainTradeGoods.setId(tradeGoodsData.getId());
|
|
|
+ mainTradeGoods.setPrice(g.getPrice());
|
|
|
+ mainTradeGoods.setAmount(g.getAmount());
|
|
|
+ saveTradeGoods.add(mainTradeGoods);
|
|
|
+ }
|
|
|
+ saveTradeGoods.add(saveSupplyTradeGoods);
|
|
|
}
|
|
|
|
|
|
- private void saveTradeContract(SupplyContractTradeReq req) {
|
|
|
+ private void saveTradeContract(SupplyContractTradeReq req,long contactId) {
|
|
|
SupplyContractTradeReq.TradeBaseInfo baseInfo = req.getBaseInfo();
|
|
|
List<SupplyContractTradeReq.TradeGoodsInfo> goodsInfo = req.getGoodsInfo();
|
|
|
Date date = new Date();
|
|
|
@@ -1157,7 +1227,6 @@ public class KwcContractTradeService {
|
|
|
}
|
|
|
kwcContractTrade.setAmount(amountTotal);
|
|
|
|
|
|
- long contactId = new IdWorker(1L).nextId();
|
|
|
kwcContractTrade.setId(contactId);
|
|
|
kwcContractTrade.setStatus(ContractStatusEnum.SAVE.getCode());
|
|
|
kwcContractTrade.setSigningUrl(changeFile(req.getContractFile()));
|