|
|
@@ -35,7 +35,10 @@ import com.sckw.product.api.model.GoodsDetail;
|
|
|
import com.sckw.product.api.model.KwpGoods;
|
|
|
import com.sckw.redis.constant.RedisConstant;
|
|
|
import com.sckw.redis.utils.RedissonUtils;
|
|
|
+import com.sckw.stream.enums.MessageEnum;
|
|
|
import com.sckw.stream.model.SckwBusSum;
|
|
|
+import com.sckw.stream.model.SckwMessage;
|
|
|
+import com.sckw.stream.model.UserInfo;
|
|
|
import com.sckw.system.api.RemoteSystemService;
|
|
|
import com.sckw.system.api.model.dto.res.AreaTreeFrontResDto;
|
|
|
import com.sckw.system.api.model.dto.res.EntCacheResDto;
|
|
|
@@ -45,11 +48,13 @@ import com.sckw.transport.api.dubbo.TransportDubboService;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.cloud.stream.function.StreamBridge;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
+import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -88,6 +93,12 @@ public class KwoTradeOrderService {
|
|
|
private final KwoTradeOrderContractService kwoTradeOrderContractService;
|
|
|
private final KwoTradeOrderTrackService kwoTradeOrderTrackService;
|
|
|
|
|
|
+ @Value("${valet.order.list.url}")
|
|
|
+ private String valetOrderListUrl;
|
|
|
+
|
|
|
+ @Value("${purchase.order.list.url}")
|
|
|
+ private String purchaseOrderListUrl;
|
|
|
+
|
|
|
/**
|
|
|
* @desc: 采购下单草稿
|
|
|
* @author: yzc
|
|
|
@@ -250,11 +261,11 @@ public class KwoTradeOrderService {
|
|
|
if (Objects.isNull(goodsInfo.getPriceRangeId())) {
|
|
|
throw new BusinessException("采购下单价格梯度信息不能为空!");
|
|
|
}
|
|
|
- OrderCheckDTO orderCheckDTO = BeanUtils.copyProperties(param, OrderCheckDTO.class);
|
|
|
- getTopEnt(orderCheckDTO, param.getUnitInfo());
|
|
|
- orderCheckDTO.setGoodsId(goodsInfo.getGoodsId()).setUnitPrice(goodsInfo.getUnitPrice())
|
|
|
+ OrderCheckDTO orderCheck = BeanUtils.copyProperties(param, OrderCheckDTO.class);
|
|
|
+ getTopEnt(orderCheck, param.getUnitInfo());
|
|
|
+ orderCheck.setGoodsId(goodsInfo.getGoodsId()).setUnitPrice(goodsInfo.getUnitPrice())
|
|
|
.setOrderSource(DictEnum.TORDER_SOURCE_1.getValue());
|
|
|
- orderCheck(orderCheckDTO, false);
|
|
|
+ orderCheck(orderCheck, false);
|
|
|
KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
|
|
|
order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(getOrderNo())
|
|
|
.setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_1.getValue())
|
|
|
@@ -265,21 +276,94 @@ public class KwoTradeOrderService {
|
|
|
if (!Objects.equals(HttpStatus.SUCCESS_CODE, updateResult.getCode())) {
|
|
|
throw new BusinessException(updateResult.getMsg());
|
|
|
}
|
|
|
+ //添加订单其他信息
|
|
|
addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
|
|
|
- //TODO:发送提醒消息
|
|
|
+ //发送消息提醒
|
|
|
+ submitOrderSendMsg(orderCheck, order.getTOrderNo());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc: 提交订单发送message
|
|
|
+ * @author: yzc
|
|
|
+ * @date: 2023-09-01 14:35
|
|
|
+ * @Param orderCheck:
|
|
|
+ * @Param orderNo:
|
|
|
+ * @return: void
|
|
|
+ */
|
|
|
+ private void submitOrderSendMsg(OrderCheckDTO orderCheck, String orderNo) {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("orderNo", orderNo);
|
|
|
+ //提交人信息
|
|
|
+ List<UserInfo> userInfos = new ArrayList<>();
|
|
|
+ UserInfo createUser = new UserInfo();
|
|
|
+ createUser.setUserId(LoginUserHolder.getUserId()).setEntId(LoginUserHolder.getEntId());
|
|
|
+ userInfos.add(createUser);
|
|
|
+
|
|
|
+ boolean flag = Objects.equals(orderCheck.getOrderSource(), DictEnum.TORDER_SOURCE_1.getValue());
|
|
|
+ //采购下单
|
|
|
+ if (flag) {
|
|
|
+ //给创建人发消息
|
|
|
+ map.put("firmName", orderCheck.getSupplyFireName());
|
|
|
+ SckwMessage msg = new SckwMessage();
|
|
|
+ msg.setRequestId(UUIDUtils.get32UUID())
|
|
|
+ .setMessageEnum(MessageEnum.ORDER_INITIATE_PURCHASE)
|
|
|
+ .setParams(map)
|
|
|
+ .setMsgUrl(purchaseOrderListUrl)
|
|
|
+ .setUserInfos(userInfos)
|
|
|
+ .setCreateBy(LoginUserHolder.getUserId());
|
|
|
+ log.info("发起采购下单消息:{}", JSON.toJSONString(msg));
|
|
|
+ streamBridge.send("sckw-message", JSON.toJSONString(msg));
|
|
|
+ //给供应企业联系人发消息
|
|
|
+ map.put("firmName", orderCheck.getProcureFireName());
|
|
|
+ SckwMessage contactsMsg = new SckwMessage();
|
|
|
+ contactsMsg.setRequestId(UUIDUtils.get32UUID())
|
|
|
+ .setMessageEnum(MessageEnum.ORDER_NEW_PENDING)
|
|
|
+ .setParams(map)
|
|
|
+ .setMsgUrl(valetOrderListUrl)
|
|
|
+ .setUserInfos(orderCheck.getSupplyUsers())
|
|
|
+ .setCreateBy(LoginUserHolder.getUserId());
|
|
|
+ log.info("有新的待受理订单消息:{}", JSON.toJSONString(contactsMsg));
|
|
|
+ streamBridge.send("sckw-message", JSON.toJSONString(contactsMsg));
|
|
|
+ } else {
|
|
|
+ //代客下单
|
|
|
+ //给创建人发消息
|
|
|
+ map.put("firmName", orderCheck.getProcureFireName());
|
|
|
+ SckwMessage msg = new SckwMessage();
|
|
|
+ msg.setRequestId(UUIDUtils.get32UUID())
|
|
|
+ .setMessageEnum(MessageEnum.ORDER_INITIATE_SALE)
|
|
|
+ .setParams(map)
|
|
|
+ .setMsgUrl(valetOrderListUrl)
|
|
|
+ .setUserInfos(userInfos)
|
|
|
+ .setCreateBy(LoginUserHolder.getUserId());
|
|
|
+ log.info("发起代客下单消息:{}", JSON.toJSONString(msg));
|
|
|
+ streamBridge.send("sckw-message", JSON.toJSONString(msg));
|
|
|
+ //给采购企业联系人发消息
|
|
|
+ map.put("firmName", orderCheck.getSupplyFireName());
|
|
|
+ SckwMessage contactsMsg = new SckwMessage();
|
|
|
+ contactsMsg.setRequestId(UUIDUtils.get32UUID())
|
|
|
+ .setMessageEnum(MessageEnum.ORDER_NEW_VALET_MSG)
|
|
|
+ .setParams(map)
|
|
|
+ .setMsgUrl(purchaseOrderListUrl)
|
|
|
+ .setUserInfos(orderCheck.getSupplyUsers())
|
|
|
+ .setCreateBy(LoginUserHolder.getUserId());
|
|
|
+ log.info("有新的代客下单消息:{}", JSON.toJSONString(contactsMsg));
|
|
|
+ streamBridge.send("sckw-message", JSON.toJSONString(contactsMsg));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @desc: 获取采购销售顶级企业id
|
|
|
* @author: yzc
|
|
|
* @date: 2023-07-25 10:03
|
|
|
- * @Param orderCheckDTO:
|
|
|
+ * @Param orderCheck:
|
|
|
* @Param unitInfo:
|
|
|
* @return: void
|
|
|
*/
|
|
|
- private void getTopEnt(OrderCheckDTO orderCheckDTO, List<UnitInfo> unitInfo) {
|
|
|
+ private void getTopEnt(OrderCheckDTO orderCheck, List<UnitInfo> unitInfo) {
|
|
|
List<Long> entIds = unitInfo.stream().map(UnitInfo::getEntId).toList();
|
|
|
Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntTreeByIds(entIds);
|
|
|
+ List<UserInfo> procureUsers = new ArrayList<>();
|
|
|
+ List<UserInfo> supplyUsers = new ArrayList<>();
|
|
|
unitInfo.forEach(e -> {
|
|
|
Long entId = e.getEntId();
|
|
|
EntCacheResDto ent = entMap.get(entId);
|
|
|
@@ -288,13 +372,22 @@ public class KwoTradeOrderService {
|
|
|
throw new BusinessException("一级企业信息不存在!");
|
|
|
}
|
|
|
if (Objects.equals(e.getUnitType(), DictEnum.TORDER_UNIT_TYPE_1.getValue())) {
|
|
|
- orderCheckDTO.setProcureTopEntId(ent.getId());
|
|
|
- orderCheckDTO.setProcureEntId(entId);
|
|
|
+ UserInfo procureUser = new UserInfo();
|
|
|
+ orderCheck.setProcureTopEntId(ent.getId());
|
|
|
+ orderCheck.setProcureEntId(entId);
|
|
|
+ orderCheck.setProcureFireName(e.getFirmName());
|
|
|
+ procureUser.setUserId(e.getContactsId()).setEntId(ent.getId());
|
|
|
+ procureUsers.add(procureUser);
|
|
|
} else {
|
|
|
- orderCheckDTO.setSupplyTopEntId(ent.getId());
|
|
|
- orderCheckDTO.setSupplyEntId(entId);
|
|
|
+ UserInfo supplyUser = new UserInfo();
|
|
|
+ orderCheck.setSupplyTopEntId(ent.getId());
|
|
|
+ orderCheck.setSupplyEntId(entId);
|
|
|
+ orderCheck.setSupplyFireName(e.getFirmName());
|
|
|
+ supplyUser.setUserId(e.getContactsId()).setEntId(ent.getId());
|
|
|
+ supplyUsers.add(supplyUser);
|
|
|
}
|
|
|
});
|
|
|
+ orderCheck.setProcureUsers(procureUsers).setSupplyUsers(supplyUsers);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -388,7 +481,8 @@ public class KwoTradeOrderService {
|
|
|
throw new BusinessException(updateResult.getMsg());
|
|
|
}
|
|
|
addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
|
|
|
- //TODO:发送提醒消息
|
|
|
+ //发送消息提醒
|
|
|
+ submitOrderSendMsg(orderCheck, order.getTOrderNo());
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -580,6 +674,7 @@ public class KwoTradeOrderService {
|
|
|
&& kwoTradeOrderUnitService.entMatch(param.getId(), LoginUserHolder.getEntId(), source)) {
|
|
|
throw new BusinessException("无权限修改此订单!");
|
|
|
}
|
|
|
+ OrderCheckDTO orderCheck = new OrderCheckDTO();
|
|
|
if (Objects.equals(param.getOperateType(), 1)) {
|
|
|
checkParams(param, source);
|
|
|
if (Objects.equals(source, DictEnum.TORDER_SOURCE_1.getValue())) {
|
|
|
@@ -597,7 +692,7 @@ public class KwoTradeOrderService {
|
|
|
throw new BusinessException("Invalid contract status");
|
|
|
}
|
|
|
}
|
|
|
- OrderCheckDTO orderCheck = BeanUtils.copyProperties(param, OrderCheckDTO.class);
|
|
|
+ orderCheck = BeanUtils.copyProperties(param, OrderCheckDTO.class);
|
|
|
getTopEnt(orderCheck, param.getUnitInfo());
|
|
|
orderCheck.setGoodsId(param.getGoodsInfo().getGoodsId()).setUnitPrice(param.getGoodsInfo().getUnitPrice())
|
|
|
.setOrderSource(source);
|
|
|
@@ -616,9 +711,9 @@ public class KwoTradeOrderService {
|
|
|
ValetOrderParam valetOrderParam = BeanUtils.copyProperties(param, ValetOrderParam.class);
|
|
|
|
|
|
addOtherOrderInfo(order, valetOrderParam, true);
|
|
|
- //TODO:发送提醒消息
|
|
|
+ //订单提交发送提醒消息
|
|
|
if (Objects.equals(param.getOperateType(), 1)) {
|
|
|
-
|
|
|
+ submitOrderSendMsg(orderCheck, order.getTOrderNo());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -843,7 +938,56 @@ public class KwoTradeOrderService {
|
|
|
updateParam.setTOrderId(order.getId()).setStatus(order.getStatus()).setUpdateBy(LoginUserHolder.getUserId())
|
|
|
.setUpdateByName(LoginUserHolder.getUserName()).setUpdateTime(new Date());
|
|
|
saveMongoDb(3, updateParam);
|
|
|
- //TODO:发送提醒消息
|
|
|
+ //发送提醒消息
|
|
|
+ List<KwoTradeOrderUnit> units = kwoTradeOrderUnitService.getByOrderId(order.getId());
|
|
|
+ rejectOrderSendMsg(units, order);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc: 驳回订单发送消息
|
|
|
+ * @author: yzc
|
|
|
+ * @date: 2023-09-04 16:44
|
|
|
+ * @Param units:
|
|
|
+ * @Param order:
|
|
|
+ * @return: void
|
|
|
+ */
|
|
|
+ private void rejectOrderSendMsg(List<KwoTradeOrderUnit> units, KwoTradeOrder order) {
|
|
|
+ Map<String, KwoTradeOrderUnit> unitMap = units.stream().collect
|
|
|
+ (Collectors.toMap(KwoTradeOrderUnit::getUnitType, Function.identity()));
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("orderNo", order.getTOrderNo());
|
|
|
+
|
|
|
+ //给供应企业联系人发消息
|
|
|
+ List<UserInfo> purchaseUsers = new ArrayList<>();
|
|
|
+ UserInfo purchaseUser = new UserInfo();
|
|
|
+ KwoTradeOrderUnit purchase = unitMap.get(DictEnum.TORDER_UNIT_TYPE_1.getValue());
|
|
|
+ purchaseUser.setUserId(purchase.getContactsId()).setEntId(purchase.getTopEntId());
|
|
|
+ purchaseUsers.add(purchaseUser);
|
|
|
+ SckwMessage contactsMsg = new SckwMessage();
|
|
|
+ map.put("firmName", purchase.getFirmName());
|
|
|
+ contactsMsg.setRequestId(UUIDUtils.get32UUID())
|
|
|
+ .setMessageEnum(MessageEnum.ORDER_REJECT_VALET)
|
|
|
+ .setParams(map)
|
|
|
+ .setMsgUrl(valetOrderListUrl)
|
|
|
+ .setUserInfos(purchaseUsers)
|
|
|
+ .setCreateBy(LoginUserHolder.getUserId());
|
|
|
+ log.info("驳回采购订单消息:{}", JSON.toJSONString(contactsMsg));
|
|
|
+ streamBridge.send("sckw-message", JSON.toJSONString(contactsMsg));
|
|
|
+ //给订单创建人发消息
|
|
|
+ List<UserInfo> userInfos = new ArrayList<>();
|
|
|
+ UserInfo createUser = new UserInfo();
|
|
|
+ createUser.setUserId(order.getCreateBy()).setEntId(order.getEntId());
|
|
|
+ userInfos.add(createUser);
|
|
|
+ map.put("firmName", unitMap.get(DictEnum.TORDER_UNIT_TYPE_2.getValue()).getFirmName());
|
|
|
+ SckwMessage msg = new SckwMessage();
|
|
|
+ msg.setRequestId(UUIDUtils.get32UUID())
|
|
|
+ .setMessageEnum(MessageEnum.ORDER_REJECT_PURCHASE)
|
|
|
+ .setParams(map)
|
|
|
+ .setMsgUrl(purchaseOrderListUrl)
|
|
|
+ .setUserInfos(userInfos)
|
|
|
+ .setCreateBy(LoginUserHolder.getUserId());
|
|
|
+ log.info("采购订单被驳回消息:{}", JSON.toJSONString(msg));
|
|
|
+ streamBridge.send("sckw-message", JSON.toJSONString(msg));
|
|
|
}
|
|
|
|
|
|
/**
|