|
|
@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.github.pagehelper.PageInfo;
|
|
|
+import com.google.common.collect.Lists;
|
|
|
import com.sckw.contract.dao.KwcContractTradeMapper;
|
|
|
import com.sckw.contract.model.dto.req.QueryListReqDto;
|
|
|
import com.sckw.contract.model.dto.res.QueryListResDto;
|
|
|
@@ -15,12 +16,14 @@ import com.sckw.contract.model.entity.KwcContractTradeUnit;
|
|
|
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.service.CommonBusinessService;
|
|
|
import com.sckw.contract.service.KwcContractTradeGoodsService;
|
|
|
import com.sckw.contract.service.KwcContractTradeTrackService;
|
|
|
import com.sckw.contract.service.KwcContractTradeUnitService;
|
|
|
import com.sckw.core.common.enums.enums.DictEnum;
|
|
|
import com.sckw.core.common.enums.enums.DictTypeEnum;
|
|
|
+import com.sckw.core.exception.BusinessException;
|
|
|
import com.sckw.core.exception.SystemException;
|
|
|
import com.sckw.core.model.constant.Global;
|
|
|
import com.sckw.core.model.enums.ContractStatusEnum;
|
|
|
@@ -32,6 +35,7 @@ import com.sckw.core.model.page.PageResult;
|
|
|
import com.sckw.core.utils.*;
|
|
|
import com.sckw.core.web.constant.HttpStatus;
|
|
|
import com.sckw.core.web.context.LoginUserHolder;
|
|
|
+import com.sckw.core.web.response.result.PageDataResult;
|
|
|
import com.sckw.excel.utils.ExcelUtil;
|
|
|
import com.sckw.order.api.dubbo.TradeOrderInfoService;
|
|
|
import com.sckw.order.api.model.ContractSignCompletedParam;
|
|
|
@@ -46,6 +50,8 @@ import com.sckw.system.api.model.dto.res.KwsUserResDto;
|
|
|
import com.sckw.system.api.model.dto.res.SysDictResDto;
|
|
|
import com.sckw.system.api.model.dto.res.UserCacheResDto;
|
|
|
import jakarta.servlet.http.HttpServletResponse;
|
|
|
+import jakarta.validation.Valid;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -65,6 +71,7 @@ import java.util.stream.Collectors;
|
|
|
*/
|
|
|
@Service
|
|
|
@Slf4j
|
|
|
+@RequiredArgsConstructor
|
|
|
public class KwcContractTradeService {
|
|
|
|
|
|
|
|
|
@@ -83,6 +90,8 @@ public class KwcContractTradeService {
|
|
|
@Autowired
|
|
|
private CommonBusinessService commonBusinessService;
|
|
|
|
|
|
+ private final KwcContractTradeGoodsRepository kwcContractTradeGoodsRepository;
|
|
|
+
|
|
|
@DubboReference(version = "1.0.0", group = "design", check = false)
|
|
|
private RemoteSystemService remoteSystemService;
|
|
|
|
|
|
@@ -195,6 +204,11 @@ public class KwcContractTradeService {
|
|
|
queryListResVo.setProvideEntName(queryListResDto.getUnitType().compareTo(EntTypeEnum.SUPPLIER.getCode()) == 0 ? queryListResDto.getEntName() : queryListResDto.getTargetEntName());
|
|
|
queryListResVo.setPurchaseEntName(queryListResDto.getUnitType().compareTo(EntTypeEnum.SUPPLIER.getCode()) == 0 ? queryListResDto.getTargetEntName() : queryListResDto.getEntName());
|
|
|
}
|
|
|
+ if(Objects.equals(queryListResDto.getUnitType(),EntTypeEnum.SUPPLIER.getCode())){
|
|
|
+ queryListResVo.setProvideEntId(String.valueOf(queryListResDto.getProvideEntId()));
|
|
|
+ }else if(Objects.equals(queryListResDto.getUnitType(),EntTypeEnum.PURCHASER.getCode())){
|
|
|
+ queryListResVo.setPurchaseEntId(String.valueOf(queryListResDto.getPurchaseEntId()));
|
|
|
+ }
|
|
|
|
|
|
UserCacheResDto userCacheResDto = longUserCacheResDtoMap.get(queryListResDto.getInitiateBy());
|
|
|
if (Objects.nonNull(userCacheResDto)) {
|
|
|
@@ -204,7 +218,9 @@ public class KwcContractTradeService {
|
|
|
queryListResVo.setTradingName(DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), String.valueOf(queryListResDto.getTrading())));
|
|
|
queryListResVo.setStatusName(Objects.requireNonNull(ContractStatusEnum.getName(queryListResDto.getStatus())).getName());
|
|
|
queryListResVo.setSigningWayName(DictEnum.getLabel(DictTypeEnum.SIGNING_TYPE.getType(), queryListResDto.getSigningWay()));
|
|
|
- queryListResVo.setSigningWay(queryListResDto.getSigningWay());
|
|
|
+ queryListResVo.setSigningWay(String.valueOf(queryListResDto.getSigningWay()));
|
|
|
+ queryListResVo.setUnloadWay(String.valueOf(queryListResDto.getUnloadWay()));
|
|
|
+ queryListResVo.setUnloadWayName(DictEnum.getLabel(String.valueOf(queryListResDto.getUnloadWay())));
|
|
|
queryListResVo.setAmount(queryListResDto.getAmount());
|
|
|
queryListResVo.setPerformedAmount(queryListResDto.getPerformedAmount());
|
|
|
|
|
|
@@ -274,6 +290,11 @@ public class KwcContractTradeService {
|
|
|
}
|
|
|
|
|
|
if (CollectionUtils.isNotEmpty(goodsInfo)) {
|
|
|
+
|
|
|
+ boolean b = hasDuplicateGoodsId(goodsInfo);
|
|
|
+ if (b) {
|
|
|
+ throw new SystemException("商品不能重复!");
|
|
|
+ }
|
|
|
for (TradeGoodsInfoReqVo goodsInfoReqVo : goodsInfo) {
|
|
|
if (Objects.nonNull(goodsInfoReqVo.getPrice()) && !RegularUtils.matchNumberWithFix(goodsInfoReqVo.getPrice().toString(), 10, 2)) {
|
|
|
throw new SystemException("单价超长!");
|
|
|
@@ -286,6 +307,21 @@ public class KwcContractTradeService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private static boolean hasDuplicateGoodsId(List<TradeGoodsInfoReqVo> goodsInfo) {
|
|
|
+ if (goodsInfo == null || goodsInfo.isEmpty()) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ Set<Long> goodsIdSet = new HashSet<>();
|
|
|
+ for (TradeGoodsInfoReqVo info : goodsInfo) {
|
|
|
+ if (info.getGoodsId() != null) {
|
|
|
+ if (!goodsIdSet.add(info.getGoodsId())) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* @param baseInfo 贸易基本信息 remark备注 pid父id
|
|
|
@@ -315,6 +351,13 @@ public class KwcContractTradeService {
|
|
|
kwcContractTrade.setUpdateTime(date);
|
|
|
kwcContractTrade.setDelFlag(Global.NO);
|
|
|
|
|
|
+ kwcContractTrade.setSettlement(baseInfo.getSettlement());
|
|
|
+ kwcContractTrade.setConsignment(baseInfo.getConsignment());
|
|
|
+ kwcContractTrade.setUnloadWay(baseInfo.getUnloadWay());
|
|
|
+ kwcContractTrade.setSalesmanId(baseInfo.getSalesmanId());
|
|
|
+ kwcContractTrade.setSalesmanPhone(baseInfo.getSalesmanPhone());
|
|
|
+
|
|
|
+
|
|
|
BigDecimal amountTotal = new BigDecimal(Global.NUMERICAL_ZERO);
|
|
|
if (CollectionUtils.isNotEmpty(goodsInfo)) {
|
|
|
for (TradeGoodsInfoReqVo tradeGoodsInfoReqVo : goodsInfo) {
|
|
|
@@ -640,6 +683,11 @@ public class KwcContractTradeService {
|
|
|
kwcContractTrade.setContractPid(reqVo.getPid());
|
|
|
kwcContractTrade.setRemark(reqVo.getRemark());
|
|
|
|
|
|
+ kwcContractTrade.setSettlement(baseInfo.getSettlement());
|
|
|
+ kwcContractTrade.setConsignment(baseInfo.getConsignment());
|
|
|
+ kwcContractTrade.setUnloadWay(baseInfo.getUnloadWay());
|
|
|
+ kwcContractTrade.setSalesmanId(baseInfo.getSalesmanId());
|
|
|
+ kwcContractTrade.setSalesmanPhone(baseInfo.getSalesmanPhone());
|
|
|
List<TradeGoodsInfoReqVo> goodsInfo = reqVo.getGoodsInfo();
|
|
|
BigDecimal amountTotal = new BigDecimal(Global.NUMERICAL_ZERO);
|
|
|
if (CollectionUtils.isNotEmpty(goodsInfo)) {
|
|
|
@@ -1035,4 +1083,127 @@ public class KwcContractTradeService {
|
|
|
ExcelUtil.downData(response, TradeListExport.class, dataList);
|
|
|
}
|
|
|
|
|
|
+ public PageDataResult<QueryTradeContractResp> queryTradeContractByPage(QueryTradeContractReq req) {
|
|
|
+ return PageDataResult.empty(req.getPageNum(), req.getPageSize());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void addSupplyTradeContract(@Valid SupplyContractTradeReq req) {
|
|
|
+ log.info("补充合同请求参数,req:{}", JSON.toJSONString(req));
|
|
|
+ //校验标的信息是否有重复
|
|
|
+ checkParams(req);
|
|
|
+ //保存补充合同
|
|
|
+ saveTradeContract(req);
|
|
|
+
|
|
|
+ //获取商品id
|
|
|
+ List<Long> goodsIds = req.getGoodsInfo()
|
|
|
+ .stream()
|
|
|
+ .map(SupplyContractTradeReq.TradeGoodsInfo::getGoodsId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ //根据商品id查询标的信息和主合同
|
|
|
+ List<KwcContractTradeGoods> kwcContractTradeGoods =
|
|
|
+ kwcContractTradeGoodsRepository.queryByConTractIdGoodsIds(req.getPid(),goodsIds);
|
|
|
+ //商品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){
|
|
|
+//
|
|
|
+// }
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void saveTradeContract(SupplyContractTradeReq req) {
|
|
|
+ SupplyContractTradeReq.TradeBaseInfo baseInfo = req.getBaseInfo();
|
|
|
+ List<SupplyContractTradeReq.TradeGoodsInfo> goodsInfo = req.getGoodsInfo();
|
|
|
+ Date date = new Date();
|
|
|
+ KwcContractTrade kwcContractTrade = new KwcContractTrade();
|
|
|
+ kwcContractTrade.setEntId(LoginUserHolder.getEntId());
|
|
|
+ kwcContractTrade.setContractNo(baseInfo.getContractCode());
|
|
|
+ kwcContractTrade.setName(baseInfo.getContractName());
|
|
|
+ kwcContractTrade.setSigningWay(baseInfo.getSigningWay());
|
|
|
+ kwcContractTrade.setTrading(baseInfo.getTrading());
|
|
|
+ kwcContractTrade.setStartTime(baseInfo.getStartTime());
|
|
|
+ if (Objects.nonNull(baseInfo.getEndTime())) {
|
|
|
+ kwcContractTrade.setEndTime(DateUtils.getEndOfDay(baseInfo.getEndTime()));
|
|
|
+ }
|
|
|
+ kwcContractTrade.setPerformedAmount(new BigDecimal("0"));
|
|
|
+ kwcContractTrade.setContractPid(req.getPid());
|
|
|
+ kwcContractTrade.setRemark(req.getRemark());
|
|
|
+ kwcContractTrade.setCreateBy(LoginUserHolder.getUserId());
|
|
|
+ kwcContractTrade.setCreateTime(date);
|
|
|
+ kwcContractTrade.setUpdateBy(LoginUserHolder.getUserId());
|
|
|
+ kwcContractTrade.setUpdateTime(date);
|
|
|
+ kwcContractTrade.setDelFlag(Global.NO);
|
|
|
+
|
|
|
+ kwcContractTrade.setSettlement(baseInfo.getSettlement());
|
|
|
+ kwcContractTrade.setConsignment(baseInfo.getConsignment());
|
|
|
+ kwcContractTrade.setUnloadWay(baseInfo.getUnloadWay());
|
|
|
+ kwcContractTrade.setSalesmanId(baseInfo.getSalesmanId());
|
|
|
+ kwcContractTrade.setSalesmanPhone(baseInfo.getSalesmanPhone());
|
|
|
+
|
|
|
+
|
|
|
+ BigDecimal amountTotal = new BigDecimal(Global.NUMERICAL_ZERO);
|
|
|
+ if (CollectionUtils.isNotEmpty(goodsInfo)) {
|
|
|
+ for (SupplyContractTradeReq.TradeGoodsInfo tradeGoodsInfoReqVo : goodsInfo) {
|
|
|
+ if (Objects.nonNull(tradeGoodsInfoReqVo.getAmount())) {
|
|
|
+ amountTotal = amountTotal.add(tradeGoodsInfoReqVo.getAmount());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ kwcContractTrade.setAmount(amountTotal);
|
|
|
+
|
|
|
+ long contactId = new IdWorker(1L).nextId();
|
|
|
+ kwcContractTrade.setId(contactId);
|
|
|
+ kwcContractTrade.setStatus(ContractStatusEnum.SAVE.getCode());
|
|
|
+ kwcContractTrade.setSigningUrl(changeFile(req.getContractFile()));
|
|
|
+ if (kwcContractTradeMapper.insert(kwcContractTrade) <= 0) {
|
|
|
+ throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void checkParams(SupplyContractTradeReq req) {
|
|
|
+ if (hasDuplicateGoodsIds(req.getGoodsInfo())){
|
|
|
+ throw new BusinessException( "标信息有重复");
|
|
|
+ }
|
|
|
+ //判断时间大小
|
|
|
+ boolean startTimeBefore = req.getGoodsInfo().stream()
|
|
|
+ .filter(t -> Objects.nonNull(t.getEffectiveStartTime()) && Objects.nonNull(req.getBaseInfo().getStartTime()))
|
|
|
+ .anyMatch(t -> t.getEffectiveStartTime().before(req.getBaseInfo().getStartTime()));
|
|
|
+ if (startTimeBefore) {
|
|
|
+ throw new BusinessException( "标信息开始时间不能早于合同开始时间");
|
|
|
+ }
|
|
|
+ boolean endTimeAfter = req.getGoodsInfo().stream()
|
|
|
+ .filter(t -> Objects.nonNull(t.getEffectiveEntTime()) && Objects.nonNull(req.getBaseInfo().getEndTime()))
|
|
|
+ .anyMatch(t -> t.getEffectiveEntTime().after(req.getBaseInfo().getEndTime()));
|
|
|
+ if (endTimeAfter){
|
|
|
+ throw new BusinessException( "标信息结束时间不能晚于合同结束时间");
|
|
|
+ }
|
|
|
+ boolean b = req.getGoodsInfo().stream()
|
|
|
+ .filter(t -> Objects.nonNull(t.getEffectiveEntTime()) && Objects.nonNull(t.getEffectiveStartTime()))
|
|
|
+ .anyMatch(t -> t.getEffectiveEntTime().before(t.getEffectiveStartTime()));
|
|
|
+ if (b){
|
|
|
+ throw new BusinessException( "标信息结束时间不能早于开始时间");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static boolean hasDuplicateGoodsIds(List<SupplyContractTradeReq.TradeGoodsInfo> goodsInfo) {
|
|
|
+ if (goodsInfo == null || goodsInfo.isEmpty()) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ Set<Long> goodsIdSet = new HashSet<>();
|
|
|
+ for (SupplyContractTradeReq.TradeGoodsInfo info : goodsInfo) {
|
|
|
+ if (info.getGoodsId() != null) {
|
|
|
+ if (!goodsIdSet.add(info.getGoodsId())) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|