|
|
@@ -18,6 +18,7 @@ import com.jzg.commons.core.base.BaseController;
|
|
|
import com.jzg.commons.core.base.StateResult;
|
|
|
import com.jzg.commons.core.page.HttpResult;
|
|
|
import com.jzg.commons.entity.dto.LotteryCounDTO;
|
|
|
+import com.jzg.commons.entity.dto.MessageAddParam;
|
|
|
import com.jzg.commons.entity.dto.UnifiedUserCenterDTO;
|
|
|
import com.jzg.commons.entity.enums.MessageCodeEnum;
|
|
|
import com.jzg.commons.entity.enums.YesNoEnum;
|
|
|
@@ -170,6 +171,8 @@ public class UnifyOrderManager {
|
|
|
@Value("${lottery.activity.scene:3}")
|
|
|
private Integer lotteryScene;
|
|
|
|
|
|
+
|
|
|
+
|
|
|
//本地生活在一账通的固定平台ID
|
|
|
private static final String CLIENT_ID = "bdsh-X9yZ1wV3uT5sR7qP9o";
|
|
|
|
|
|
@@ -286,7 +289,6 @@ public class UnifyOrderManager {
|
|
|
if (CollUtil.isNotEmpty(quoteVo.getKindInfoVo())) {
|
|
|
QuoteInfoConverter.converterKindInfoVo(quoteVo.getKindInfoVo(), quoteKindMappingMap.get(QuoteRuleCategory.KIND.getCode()), quoteVo.getCarInfoVo());
|
|
|
}
|
|
|
- log.info("报价后数据");
|
|
|
log.info("调用保险公司的api进行报价:报价参数: quoteVO=[{}]", JSONUtil.toJsonStr(quoteVo));
|
|
|
quoteResultsVo = quoteService.quote(quoteVo);
|
|
|
log.info("调用保险公司的api进行报价:报价结果: quoteResultsVo=[{}]", JSONUtil.toJsonStr(quoteResultsVo));
|
|
|
@@ -305,86 +307,8 @@ public class UnifyOrderManager {
|
|
|
insOrdersService.orderAfterUpdateQuote(ordersNo, quoteResultsVo);
|
|
|
log.info("报价返回:{}", JSON.toJSONString(quoteResultsVo));
|
|
|
|
|
|
- //////////////////////////////////////////新增营销抽奖活动////////////////////////////////////////////////
|
|
|
- //远程调用活动列表
|
|
|
- //匹配规则 每报价()次,可得()次抽奖机会,每日最多()次抽奖
|
|
|
-// HttpResult<List<LotteryActivityVO>> result = localLivingClient.queryActivityRules(lotteryScene);
|
|
|
-// if (result == null || result.getCode() != 200 || result.getData() == null) {
|
|
|
-// log.error("统一报价,查询本地生活的活动列表异常");
|
|
|
-// } else {
|
|
|
-// for (LotteryActivityVO activity : result.getData()) {
|
|
|
-// // 检查活动是否有效
|
|
|
-// if (!LocalDate.now().isBefore(activity.getActivityStartTime())
|
|
|
-// && !LocalDate.now().isAfter(activity.getActivityEndTime())) {
|
|
|
-// continue;
|
|
|
-// }
|
|
|
-//
|
|
|
-// if (activity.getLocalActivityTables() == null) {
|
|
|
-// continue;
|
|
|
-// }
|
|
|
-// // 遍历所有本地活动表
|
|
|
-// for (LocalActivityTableVO table : activity.getLocalActivityTables()) {
|
|
|
-// // 只处理 type=6 的报价规则
|
|
|
-// if (!"6".equals(table.getType())) {
|
|
|
-// continue;
|
|
|
-// }
|
|
|
-//
|
|
|
-// // 只处理本租户的报价规则
|
|
|
-// if (!baseController.getUserSystemCode().equals(table.getTenantId())) {
|
|
|
-// continue;
|
|
|
-// }
|
|
|
-// // 查询是否在一账通绑定
|
|
|
-// UnifiedUserCenterDTO unifiedUserCenterDTO = new UnifiedUserCenterDTO();
|
|
|
-// unifiedUserCenterDTO.setUserId(quoteVo.getOrder().getRealQuoteUserId());
|
|
|
-// unifiedUserCenterDTO.setClientId(CLIENT_ID);
|
|
|
-// unifiedUserCenterDTO.setTenantId(baseController.getUserSystemCode());
|
|
|
-// HttpResult<UnifiedUserClientVO> unifiedUserClientVOHttpResult = null;
|
|
|
-// try {
|
|
|
-// unifiedUserClientVOHttpResult = localLivingClient.queryBind(unifiedUserCenterDTO);
|
|
|
-// } catch (Exception e) {
|
|
|
-// log.info("业务员报价,查询用户绑定一账通接口异常,userId:{},clientId:{},tenantId:{}", quoteVo.getOrder().getRealQuoteUserId(), CLIENT_ID, baseController.getUserSystemCode());
|
|
|
-// log.error("业务员报价,查询用户绑定一账通接口异常", e);
|
|
|
-// }
|
|
|
-// if (unifiedUserClientVOHttpResult == null || unifiedUserClientVOHttpResult.getCode() != 200 || unifiedUserClientVOHttpResult.getData() == null) {
|
|
|
-// // 判断是否满足条件
|
|
|
-// // 业务员报价次数是否大于等于本活动规定时间范围内的报价次数
|
|
|
-// // 统计业务员的报价次数
|
|
|
-// int count = insOrdersService.countQuoteNum(baseController.getUserSystemCode(), quoteVo.getOrder().getRealQuoteUserId(), activity.getActivityStartTime(), activity.getActivityEndTime());
|
|
|
-// if (count >= Integer.parseInt(table.getQutNum()) && count <= Integer.parseInt(table.getQutLotteryMax())) {
|
|
|
-// // 存本地记录 等绑定后更新本地记录的同步状态字段即可
|
|
|
-// completeRule(baseController.getUserSystemCode(), quoteVo.getOrder().getRealQuoteUserId(), null, activity.getId(),
|
|
|
-// table.getId(), table.getQutNum() ,table.getQutLotteryNum() ,table.getQutLotteryMax() ,YesNoEnum.NO.getCode(), 6);
|
|
|
-// log.info("业务员报价,满足条件插入记录,userId:{},clientId:{},tenantId:{}", quoteVo.getOrder().getRealQuoteUserId(), CLIENT_ID, baseController.getUserSystemCode());
|
|
|
-// }
|
|
|
-// }else {
|
|
|
-// Map<String, List<UnifiedUserClientVO>> userClientGroupMap = unifiedUserClientVOHttpResult.getData().getUserClients()
|
|
|
-// .stream()
|
|
|
-// .collect(Collectors.groupingBy(UnifiedUserClientVO::getClientId));
|
|
|
-// // 首先查业务员是否在一账通绑定过本地生活 【已绑定过 远程调抽奖次数增加接口 标记已同步
|
|
|
-// if (userClientGroupMap.containsKey(CLIENT_ID)) {
|
|
|
-// LotteryCounDTO lotteryCounDTO = new LotteryCounDTO();
|
|
|
-// lotteryCounDTO.setAppUserId(quoteVo.getOrder().getRealQuoteUserId());
|
|
|
-// lotteryCounDTO.setActivityId(activity.getId());
|
|
|
-// lotteryCounDTO.setCount(Integer.parseInt(table.getQutLotteryNum()));
|
|
|
-// HttpResult<LotteryCountVO> lotteryCountVOHttpResult = null;
|
|
|
-// try {
|
|
|
-// lotteryCountVOHttpResult = localLivingClient.addLotteryCount(lotteryCounDTO);
|
|
|
-// } catch (Exception e) {
|
|
|
-// log.info("业务员报价,远程调用本地生活抽奖次数增加接口异常,userId:{},count:{},tenantId:{}", quoteVo.getOrder().getRealQuoteUserId(), table.getQutLotteryNum(), baseController.getUserSystemCode());
|
|
|
-// log.error("业务员报价,远程调用本地生活抽奖次数增加异常", e);
|
|
|
-// }
|
|
|
-// if (lotteryCountVOHttpResult != null && lotteryCountVOHttpResult.getData().getSuccess()) {
|
|
|
-// // 记录规则完成 标记已同步
|
|
|
-// completeRule(baseController.getUserSystemCode(), quoteVo.getOrder().getRealQuoteUserId(), null, activity.getId(),
|
|
|
-// table.getId(), table.getQutNum(), table.getQutLotteryNum(), table.getQutLotteryMax(), YesNoEnum.YES.getCode(), 6);
|
|
|
-//
|
|
|
-// log.info("业务员报价,满足条件插入记录并远程同步,userId:{},clientId:{},tenantId:{}", quoteVo.getOrder().getRealQuoteUserId(), CLIENT_ID, baseController.getUserSystemCode());
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
+ // 处理营销抽奖活动(报价规则 type=6),异常不影响主报价流程
|
|
|
+ handleQuoteLotteryActivity(quoteVo);
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
@@ -450,6 +374,164 @@ public class UnifyOrderManager {
|
|
|
tenantId, userId, activityId, qutNum, qutLotteryNum, qutLotteryMax);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 处理报价后的营销抽奖活动(type=6 报价规则)
|
|
|
+ * <p>
|
|
|
+ * 匹配规则:每报价N次,可得M次抽奖机会
|
|
|
+ * 1. 查询本地生活活动列表,筛选有效活动 + 本租户的 type=6 报价规则
|
|
|
+ * 2. 查询用户是否在一账通绑定过本地生活
|
|
|
+ * - 未绑定:统计报价次数,满足条件则存本地记录,等绑定后同步
|
|
|
+ * - 已绑定:远程调用抽奖次数增加接口,成功后标记已同步
|
|
|
+ * <p>
|
|
|
+ * 该方法异常不影响主报价流程,所有异常均在内部捕获。
|
|
|
+ *
|
|
|
+ * @param quoteVo 报价请求参数
|
|
|
+ */
|
|
|
+ private void handleQuoteLotteryActivity(QuoteVo quoteVo) {
|
|
|
+ try {
|
|
|
+ // 远程调用活动列表
|
|
|
+ HttpResult<List<LotteryActivityVO>> result = localLivingClient.queryActivityRules(lotteryScene);
|
|
|
+ if (result == null || result.getCode() != 200 || result.getData() == null) {
|
|
|
+ log.error("统一报价,查询本地生活的活动列表异常");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ String tenantId = baseController.getUserSystemCode();
|
|
|
+ String userId = quoteVo.getOrder().getRealQuoteUserId();
|
|
|
+
|
|
|
+ for (LotteryActivityVO activity : result.getData()) {
|
|
|
+ // 检查活动是否有效(当前时间需在活动时间范围内)
|
|
|
+ if (LocalDate.now().isBefore(activity.getActivityStartTime())
|
|
|
+ || LocalDate.now().isAfter(activity.getActivityEndTime())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (activity.getLocalActivityTables() == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (LocalActivityTableVO table : activity.getLocalActivityTables()) {
|
|
|
+ // 只处理 type=6 的报价规则
|
|
|
+ if (!"6".equals(table.getType())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // 只处理本租户的报价规则
|
|
|
+ if (!tenantId.equals(table.getTenantId())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询用户是否在一账通绑定过本地生活
|
|
|
+ HttpResult<UnifiedUserClientVO> bindResult = queryUserBind(userId, tenantId);
|
|
|
+ if (bindResult == null || bindResult.getCode() != 200 || bindResult.getData() == null) {
|
|
|
+ // 未绑定:统计报价次数,满足条件则存本地记录
|
|
|
+ handleUnboundQuoteRule(tenantId, userId, activity, table);
|
|
|
+ } else {
|
|
|
+ // 已绑定:检查是否绑定了本地生活客户端,若绑定了则远程同步抽奖次数
|
|
|
+ handleBoundQuoteRule(tenantId, userId, activity, table, bindResult.getData());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("处理报价抽奖活动异常,不影响主报价流程", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询用户在一账通的绑定状态
|
|
|
+ */
|
|
|
+ private HttpResult<UnifiedUserClientVO> queryUserBind(String userId, String tenantId) {
|
|
|
+ UnifiedUserCenterDTO dto = new UnifiedUserCenterDTO();
|
|
|
+ dto.setUserId(userId);
|
|
|
+ dto.setClientId(CLIENT_ID);
|
|
|
+ dto.setTenantId(tenantId);
|
|
|
+ try {
|
|
|
+ return localLivingClient.queryBind(dto);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.info("业务员报价,查询用户绑定一账通接口异常,userId:{},clientId:{},tenantId:{}", userId, CLIENT_ID, tenantId);
|
|
|
+ log.error("业务员报价,查询用户绑定一账通接口异常", e);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理未绑定用户的报价规则:统计报价次数,满足条件则存本地记录
|
|
|
+ */
|
|
|
+ private void handleUnboundQuoteRule(String tenantId, String userId,
|
|
|
+ LotteryActivityVO activity, LocalActivityTableVO table) {
|
|
|
+ int count = insOrdersService.countQuoteNum(tenantId, userId,
|
|
|
+ activity.getActivityStartTime(), activity.getActivityEndTime());
|
|
|
+ if (count >= Integer.parseInt(table.getQutNum())
|
|
|
+ && count <= Integer.parseInt(table.getQutLotteryMax())) {
|
|
|
+ completeRule(tenantId, userId, null, activity.getId(),
|
|
|
+ table.getId(), table.getQutNum(), table.getQutLotteryNum(),
|
|
|
+ table.getQutLotteryMax(), YesNoEnum.NO.getCode(), 6);
|
|
|
+ log.info("业务员报价,满足条件插入记录,userId:{},clientId:{},tenantId:{}",
|
|
|
+ userId, CLIENT_ID, tenantId);
|
|
|
+ // 发送抽奖次数下发通知消息
|
|
|
+ HttpResult<SysUserJzgInfo> sysUser = orgClient.queryUserByUserId(userId,tenantId);
|
|
|
+
|
|
|
+ MessageAddParam param = new MessageAddParam();
|
|
|
+ param.setTitle("抽奖次数下发通知消息");
|
|
|
+ param.setContent("{\"eventId\":\"" + activity.getId() + "\",\"localActivityTableId\":\"" + table.getId() + "\",\"message\":\"抽奖次数奖励下发\"}");
|
|
|
+ param.setTplCode("template_13");
|
|
|
+ param.setReceive(List.of(sysUser.getData().getMobile()));
|
|
|
+ orgClient.messageAdd(param);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理已绑定用户的报价规则:先判断是否满足规则条件,满足后再远程同步抽奖次数并标记已同步
|
|
|
+ */
|
|
|
+ private void handleBoundQuoteRule(String tenantId, String userId,
|
|
|
+ LotteryActivityVO activity, LocalActivityTableVO table,
|
|
|
+ UnifiedUserClientVO bindData) {
|
|
|
+ Map<String, List<UnifiedUserClientVO>> clientGroupMap = bindData.getUserClients()
|
|
|
+ .stream()
|
|
|
+ .collect(Collectors.groupingBy(UnifiedUserClientVO::getClientId));
|
|
|
+ if (!clientGroupMap.containsKey(CLIENT_ID)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 先判断是否满足规则条件
|
|
|
+ int qutLotteryNum = Integer.parseInt(table.getQutLotteryNum());
|
|
|
+ int count = insOrdersService.countQuoteNum(tenantId, userId,
|
|
|
+ activity.getActivityStartTime(), activity.getActivityEndTime());
|
|
|
+ if (count < Integer.parseInt(table.getQutNum()) || count > Integer.parseInt(table.getQutLotteryMax())) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ HttpResult<SysUserJzgInfo> sysUser = orgClient.queryUserByUserId(userId,tenantId);
|
|
|
+
|
|
|
+ // 满足条件,远程调用抽奖次数增加接口
|
|
|
+ LotteryCounDTO lotteryCounDTO = new LotteryCounDTO();
|
|
|
+ lotteryCounDTO.setAppUserId(userId);
|
|
|
+ lotteryCounDTO.setActivityId(activity.getId());
|
|
|
+ lotteryCounDTO.setCount(qutLotteryNum);
|
|
|
+
|
|
|
+ HttpResult<LotteryCountVO> lotteryResult = null;
|
|
|
+ try {
|
|
|
+ lotteryResult = localLivingClient.addLotteryCount(lotteryCounDTO);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.info("业务员报价,远程调用本地生活抽奖次数增加接口异常,userId:{},count:{},tenantId:{}",
|
|
|
+ userId, table.getQutLotteryNum(), tenantId);
|
|
|
+ log.error("业务员报价,远程调用本地生活抽奖次数增加异常", e);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (lotteryResult != null && lotteryResult.getData().getSuccess()) {
|
|
|
+ completeRule(tenantId, userId, null, activity.getId(),
|
|
|
+ table.getId(), table.getQutNum(), table.getQutLotteryNum(),
|
|
|
+ table.getQutLotteryMax(), YesNoEnum.YES.getCode(), 6);
|
|
|
+ log.info("业务员报价,满足条件插入记录并远程同步,userId:{},clientId:{},tenantId:{}",
|
|
|
+ userId, CLIENT_ID, tenantId);
|
|
|
+
|
|
|
+ // 发送抽奖次数下发通知消息
|
|
|
+ MessageAddParam param = new MessageAddParam();
|
|
|
+ param.setTitle("抽奖次数下发通知消息");
|
|
|
+ param.setContent("{\"eventId\":\"" + activity.getId() + "\",\"localActivityTableId\":\"" + table.getId() + "\",\"message\":\"抽奖次数奖励下发\"}");
|
|
|
+ param.setTplCode("template_13");
|
|
|
+ param.setReceive(List.of(sysUser.getData().getMobile()));
|
|
|
+ orgClient.messageAdd(param);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
@OrderOperationLog(
|
|
|
module = "车险订单",
|
|
|
@@ -751,7 +833,7 @@ public class UnifyOrderManager {
|
|
|
// 承保(客户)、出单(业务员)
|
|
|
if (orderStatusResultVo.getOrderStatus() == InsOrderStatusEnum.UNDERWRITED) {
|
|
|
// TODO: 本地生活逻辑未调试通畅,暂时先注掉
|
|
|
- //doSomethingAfterUnderwited(insOrders);
|
|
|
+ doSomethingAfterUnderwited(insOrders);
|
|
|
}
|
|
|
return HttpResult.ok("状态刷新成功");
|
|
|
}
|
|
|
@@ -817,106 +899,162 @@ public class UnifyOrderManager {
|
|
|
* @author lipf
|
|
|
* @date 2026/5/19 11:59
|
|
|
*/
|
|
|
+ /**
|
|
|
+ * 订单承保后处理营销抽奖活动(type=8 出单规则 + type=9 承保规则)
|
|
|
+ * <p>
|
|
|
+ * 该方法异常不影响主承保流程,所有异常均在内部捕获。
|
|
|
+ *
|
|
|
+ * @param insOrders 承保订单
|
|
|
+ */
|
|
|
private void doSomethingAfterUnderwited(InsOrders insOrders) {
|
|
|
- // 远程调用活动列表
|
|
|
- // 匹配规则
|
|
|
- // 规则一:累计出单()次,可得()次抽奖机会
|
|
|
- // 规则二:累计出单()次,可得()次抽奖机会
|
|
|
- // 下一个规则的出单次数不能不上一个规则出单次数小
|
|
|
- HttpResult<List<LotteryActivityVO>> result = localLivingClient.queryActivityRules(lotteryScene);
|
|
|
- if (result == null || result.getCode() != 200 || result.getData() == null) {
|
|
|
- log.error("活动列表异常");
|
|
|
- } else {
|
|
|
+ try {
|
|
|
+ HttpResult<List<LotteryActivityVO>> result = localLivingClient.queryActivityRules(lotteryScene);
|
|
|
+ if (result == null || result.getCode() != 200 || result.getData() == null) {
|
|
|
+ log.error("活动列表异常");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ String tenantId = baseController.getUserSystemCode();
|
|
|
+ String userId = insOrders.getRealQuoteUserId();
|
|
|
+
|
|
|
for (LotteryActivityVO activity : result.getData()) {
|
|
|
- // 检查活动是否有效
|
|
|
- if (!LocalDate.now().isBefore(activity.getActivityStartTime())
|
|
|
- && !LocalDate.now().isAfter(activity.getActivityEndTime())) {
|
|
|
+ // 检查活动是否有效(当前时间需在活动时间范围内)
|
|
|
+ if (LocalDate.now().isBefore(activity.getActivityStartTime())
|
|
|
+ || LocalDate.now().isAfter(activity.getActivityEndTime())) {
|
|
|
continue;
|
|
|
}
|
|
|
-
|
|
|
if (activity.getLocalActivityTables() == null) {
|
|
|
continue;
|
|
|
}
|
|
|
- // 遍历所有本地活动表
|
|
|
+
|
|
|
for (LocalActivityTableVO table : activity.getLocalActivityTables()) {
|
|
|
- // 处理 type=9 的承保规则
|
|
|
if ("9".equals(table.getType())) {
|
|
|
- Double totalFee = insOrdersService.queryTotalFee(insOrders.getInsOrderNo());
|
|
|
- String userPhone = insOrdersService.queryCustomerPhone(insOrders.getInsOrderNo());
|
|
|
- for (UnderwritingRuleVO underwritingRuleVO : table.getUnderwritingRules()) {
|
|
|
- if (new BigDecimal(totalFee).compareTo(underwritingRuleVO.getUwMinPremium()) >= 0 && new BigDecimal(totalFee).compareTo(underwritingRuleVO.getUwMaxPremium()) <= 0) {
|
|
|
- // 存本地记录 等绑定后更新本地记录的同步状态字段即可
|
|
|
- completeRule(null, null, userPhone, activity.getId(),
|
|
|
- table.getId(), underwritingRuleVO.getUwMinPremium() + "-" + underwritingRuleVO.getUwMaxPremium(), underwritingRuleVO.getUwLotteryNum(), null, YesNoEnum.NO.getCode(), 9);
|
|
|
- log.info("客户承保,满足条件插入记录,userId:{},clientId:{},tenantId:{}", insOrders.getRealQuoteUserId(), CLIENT_ID, baseController.getUserSystemCode());
|
|
|
- }
|
|
|
- }
|
|
|
+ handleUnderwritingRule(insOrders, activity, table);
|
|
|
}
|
|
|
- // 处理 type=8 的出单规则
|
|
|
if ("8".equals(table.getType())) {
|
|
|
- // 只处理本租户的出单规则
|
|
|
- if (!baseController.getUserSystemCode().equals(table.getTenantId())) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- // 查询是否在一账通绑定
|
|
|
- UnifiedUserCenterDTO unifiedUserCenterDTO = new UnifiedUserCenterDTO();
|
|
|
- unifiedUserCenterDTO.setUserId(insOrders.getRealQuoteUserId());
|
|
|
- unifiedUserCenterDTO.setClientId(CLIENT_ID);
|
|
|
- unifiedUserCenterDTO.setTenantId(baseController.getUserSystemCode());
|
|
|
- HttpResult<UnifiedUserClientVO> unifiedUserClientVOHttpResult = null;
|
|
|
- try {
|
|
|
- unifiedUserClientVOHttpResult = localLivingClient.queryBind(unifiedUserCenterDTO);
|
|
|
- } catch (Exception e) {
|
|
|
- log.info("业务员出单,查询用户绑定一账通接口异常,userId:{},clientId:{},tenantId:{}", insOrders.getRealQuoteUserId(), CLIENT_ID, baseController.getUserSystemCode());
|
|
|
- log.error("业务员出单,查询用户绑定一账通接口异常", e);
|
|
|
- }
|
|
|
- if (unifiedUserClientVOHttpResult == null || unifiedUserClientVOHttpResult.getCode() != 200 || unifiedUserClientVOHttpResult.getData() == null) {
|
|
|
- // 判断是否满足条件
|
|
|
- // 业务员累计出单次数是否大于等于本活动规定时间范围内的出单次数
|
|
|
- // 统计业务员的出单次数
|
|
|
- int count = insOrdersService.countOrderNum(baseController.getUserSystemCode(), insOrders.getRealQuoteUserId(), activity.getActivityStartTime(), activity.getActivityEndTime());
|
|
|
- for (OrderRuleVO orderRule : table.getOrderRules()) {
|
|
|
- if (count >= Integer.parseInt(orderRule.getOrdNum())) {
|
|
|
- // 存本地记录 等绑定后更新本地记录的同步状态字段即可
|
|
|
- completeRule(baseController.getUserSystemCode(), insOrders.getRealQuoteUserId(), null, activity.getId(),
|
|
|
- table.getId(), orderRule.getOrdNum(), String.valueOf(orderRule.getOrdLotteryNum()), null, YesNoEnum.NO.getCode(), 8);
|
|
|
-
|
|
|
- log.info("业务员出单,满足条件插入记录,userId:{},clientId:{},tenantId:{}", insOrders.getRealQuoteUserId(), CLIENT_ID, baseController.getUserSystemCode());
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- Map<String, List<UnifiedUserClientVO>> userClientGroupMap = unifiedUserClientVOHttpResult.getData().getUserClients()
|
|
|
- .stream()
|
|
|
- .collect(Collectors.groupingBy(UnifiedUserClientVO::getClientId));
|
|
|
- // 首先查业务员是否在一账通绑定过本地生活 【已绑定过 远程调抽奖次数增加接口 标记已同步
|
|
|
- if (userClientGroupMap.containsKey(CLIENT_ID)) {
|
|
|
- LotteryCounDTO lotteryCounDTO = new LotteryCounDTO();
|
|
|
- lotteryCounDTO.setAppUserId(insOrders.getRealQuoteUserId());
|
|
|
- lotteryCounDTO.setActivityId(activity.getId());
|
|
|
- lotteryCounDTO.setCount(Integer.parseInt(table.getQutLotteryNum()));
|
|
|
- HttpResult<LotteryCountVO> lotteryCountVOHttpResult = null;
|
|
|
- try {
|
|
|
- lotteryCountVOHttpResult = localLivingClient.addLotteryCount(lotteryCounDTO);
|
|
|
- } catch (Exception e) {
|
|
|
- log.info("业务员出单,远程调用本地生活抽奖次数增加接口异常,userId:{},count:{},tenantId:{}", insOrders.getRealQuoteUserId(), table.getQutLotteryNum(), baseController.getUserSystemCode());
|
|
|
- log.error("业务员出单,远程调用本地生活抽奖次数增加异常", e);
|
|
|
- }
|
|
|
- if (lotteryCountVOHttpResult != null && lotteryCountVOHttpResult.getData().getSuccess()) {
|
|
|
- int count = insOrdersService.countOrderNum(baseController.getUserSystemCode(), insOrders.getRealQuoteUserId(), activity.getActivityStartTime(), activity.getActivityEndTime());
|
|
|
- for (OrderRuleVO orderRule : table.getOrderRules()) {
|
|
|
- if (count >= Integer.parseInt(orderRule.getOrdNum())) {
|
|
|
- // 记录规则完成 标记已同步
|
|
|
- completeRule(baseController.getUserSystemCode(), insOrders.getRealQuoteUserId(), null, activity.getId(),
|
|
|
- table.getId(), table.getQutNum(), table.getQutLotteryNum(), table.getQutLotteryMax(), YesNoEnum.YES.getCode(), 8);
|
|
|
- log.info("业务员出单,满足条件插入记录并远程同步,userId:{},clientId:{},tenantId:{}", insOrders.getRealQuoteUserId(), CLIENT_ID, baseController.getUserSystemCode());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ handleOrderRule(tenantId, userId, activity, table);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("处理承保抽奖活动异常,不影响主承保流程", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理 type=9 承保规则:按保费区间匹配,满足条件则存本地记录
|
|
|
+ */
|
|
|
+ private void handleUnderwritingRule(InsOrders insOrders, LotteryActivityVO activity, LocalActivityTableVO table) {
|
|
|
+ Double totalFee = insOrdersService.queryTotalFee(insOrders.getInsOrderNo());
|
|
|
+ String userPhone = insOrdersService.queryCustomerPhone(insOrders.getInsOrderNo());
|
|
|
+ for (UnderwritingRuleVO rule : table.getUnderwritingRules()) {
|
|
|
+ BigDecimal fee = new BigDecimal(totalFee);
|
|
|
+ if (fee.compareTo(rule.getUwMinPremium()) >= 0 && fee.compareTo(rule.getUwMaxPremium()) <= 0) {
|
|
|
+ completeRule(null, null, userPhone, activity.getId(),
|
|
|
+ table.getId(), rule.getUwMinPremium() + "-" + rule.getUwMaxPremium(),
|
|
|
+ rule.getUwLotteryNum(), null, YesNoEnum.NO.getCode(), 9);
|
|
|
+ log.info("客户承保,满足条件插入记录,userId:{},clientId:{},tenantId:{}",
|
|
|
+ insOrders.getRealQuoteUserId(), CLIENT_ID, baseController.getUserSystemCode());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理 type=8 出单规则:按累计出单次数匹配
|
|
|
+ * <p>
|
|
|
+ * 匹配规则:累计出单N次,可得M次抽奖机会(多条规则,出单次数递增)
|
|
|
+ * 1. 未绑定:统计出单次数,满足条件则存本地记录
|
|
|
+ * 2. 已绑定:远程同步抽奖次数,成功后标记已同步
|
|
|
+ */
|
|
|
+ private void handleOrderRule(String tenantId, String userId,
|
|
|
+ LotteryActivityVO activity, LocalActivityTableVO table) {
|
|
|
+ // 只处理本租户的出单规则
|
|
|
+ if (!tenantId.equals(table.getTenantId())) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ HttpResult<UnifiedUserClientVO> bindResult = queryUserBind(userId, tenantId);
|
|
|
+ if (bindResult == null || bindResult.getCode() != 200 || bindResult.getData() == null) {
|
|
|
+ // 未绑定:统计出单次数,满足条件则存本地记录
|
|
|
+ handleUnboundOrderRule(tenantId, userId, activity, table);
|
|
|
+ } else {
|
|
|
+ // 已绑定:远程同步抽奖次数
|
|
|
+ handleBoundOrderRule(tenantId, userId, activity, table, bindResult.getData());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理未绑定用户的出单规则
|
|
|
+ */
|
|
|
+ private void handleUnboundOrderRule(String tenantId, String userId,
|
|
|
+ LotteryActivityVO activity, LocalActivityTableVO table) {
|
|
|
+ int count = insOrdersService.countOrderNum(tenantId, userId,
|
|
|
+ activity.getActivityStartTime(), activity.getActivityEndTime());
|
|
|
+ for (OrderRuleVO orderRule : table.getOrderRules()) {
|
|
|
+ if (count >= Integer.parseInt(orderRule.getOrdNum())) {
|
|
|
+ completeRule(tenantId, userId, null, activity.getId(),
|
|
|
+ table.getId(), orderRule.getOrdNum(),
|
|
|
+ String.valueOf(orderRule.getOrdLotteryNum()), null,
|
|
|
+ YesNoEnum.NO.getCode(), 8);
|
|
|
+ log.info("业务员出单,满足条件插入记录,userId:{},clientId:{},tenantId:{}",
|
|
|
+ userId, CLIENT_ID, tenantId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理已绑定用户的出单规则:先判断是否满足规则条件,满足后再远程同步抽奖次数并标记已同步
|
|
|
+ */
|
|
|
+ private void handleBoundOrderRule(String tenantId, String userId,
|
|
|
+ LotteryActivityVO activity, LocalActivityTableVO table,
|
|
|
+ UnifiedUserClientVO bindData) {
|
|
|
+ Map<String, List<UnifiedUserClientVO>> clientGroupMap = bindData.getUserClients()
|
|
|
+ .stream()
|
|
|
+ .collect(Collectors.groupingBy(UnifiedUserClientVO::getClientId));
|
|
|
+ if (!clientGroupMap.containsKey(CLIENT_ID)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 先判断是否满足规则条件(至少满足一条出单次数规则)
|
|
|
+ int count = insOrdersService.countOrderNum(tenantId, userId,
|
|
|
+ activity.getActivityStartTime(), activity.getActivityEndTime());
|
|
|
+ boolean anyMatch = false;
|
|
|
+ for (OrderRuleVO orderRule : table.getOrderRules()) {
|
|
|
+ if (count >= Integer.parseInt(orderRule.getOrdNum())) {
|
|
|
+ anyMatch = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!anyMatch) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 满足条件,远程调用抽奖次数增加接口
|
|
|
+ int qutLotteryNum = Integer.parseInt(table.getQutLotteryNum());
|
|
|
+ LotteryCounDTO lotteryCounDTO = new LotteryCounDTO();
|
|
|
+ lotteryCounDTO.setAppUserId(userId);
|
|
|
+ lotteryCounDTO.setActivityId(activity.getId());
|
|
|
+ lotteryCounDTO.setCount(qutLotteryNum);
|
|
|
+
|
|
|
+ HttpResult<LotteryCountVO> lotteryResult = null;
|
|
|
+ try {
|
|
|
+ lotteryResult = localLivingClient.addLotteryCount(lotteryCounDTO);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.info("业务员出单,远程调用本地生活抽奖次数增加接口异常,userId:{},count:{},tenantId:{}",
|
|
|
+ userId, table.getQutLotteryNum(), tenantId);
|
|
|
+ log.error("业务员出单,远程调用本地生活抽奖次数增加异常", e);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (lotteryResult != null && lotteryResult.getData().getSuccess()) {
|
|
|
+ for (OrderRuleVO orderRule : table.getOrderRules()) {
|
|
|
+ if (count >= Integer.parseInt(orderRule.getOrdNum())) {
|
|
|
+ completeRule(tenantId, userId, null, activity.getId(),
|
|
|
+ table.getId(), table.getQutNum(), table.getQutLotteryNum(),
|
|
|
+ table.getQutLotteryMax(), YesNoEnum.YES.getCode(), 8);
|
|
|
+ log.info("业务员出单,满足条件插入记录并远程同步,userId:{},clientId:{},tenantId:{}",
|
|
|
+ userId, CLIENT_ID, tenantId);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
//return HttpResult.ok("状态刷新成功");
|