package com.hx.phip.service.userMoney.impl; import javax.annotation.Resource; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.hx.common.service.CommonService; import com.hx.phiappt.common.OperationReasonConstants; import com.hx.phiappt.common.OrderItemConstants; import com.hx.phiappt.common.OriginChannelConstants; import com.hx.phiappt.common.PlatformConstants; import com.hx.phiappt.constants.tool.TimerHandleTool; import com.hx.phiappt.constants.tool.UserInfoTool; import com.hx.phiappt.constants.tool.money.UserMoneyTool; import com.hx.phiappt.model.*; import com.hx.phiappt.model.giving.TurnAdd; import com.hx.phip.config.CustomParameter; import com.hx.phip.dao.mapper.*; import com.hx.phip.entity.enums.UserMoneyEnum; import com.hx.phip.model.ApplyParameter; import com.hx.phip.model.SysParameter; import com.hx.phip.service.SystemParameterService; import com.hx.phip.service.UserIntegralRecordService; import com.hx.phip.service.UserMoneyService; import com.hx.phip.service.UserValueAddedFundRecordService; import com.hx.phip.tool.ApplyParameterTool; import com.hx.phip.tool.SendSMSTool; import com.hx.util.DateUtil; import com.hx.util.StringUtils; import com.hz.his.dto.user.money.UserTurnDto; import com.platform.constants.PlatformPattern; import com.platform.exception.PlatTipsException; import com.platform.resultTool.PlatformCode; import com.platform.resultTool.SystemCode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.hx.exception.TipsException; import com.hx.phiappt.model.userMoney.UserMoneyUnclaimed; import com.hx.phip.service.userMoney.UserMoneyUnclaimedService; import com.hx.mybatisTool.SqlSentence; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.math.BigDecimal; import java.util.*; @Transactional @Service public class UserMoneyUnclaimedServiceImpl implements UserMoneyUnclaimedService { private static final Logger logger = LoggerFactory.getLogger(UserMoneyUnclaimedServiceImpl.class); @Resource private UserMapper userMapper; @Resource private CommonService commonService; @Resource private CustomParameter customParameter; @Resource private UserInfoMapper userInfoMapper; @Resource private UserMoneyService userMoneyService; @Resource private SystemParameterService systemParameterService; @Resource private UserMoneyUnclaimedMapper userMoneyUnclaimedMapper; @Resource private UserIntegralRecordService userIntegralRecordService; @Resource private UserValueAddedFundRecordService userValueAddedFundRecordService; @Resource private TurnAddMapper turnAddMapper; /** * 查询列表 */ @Override public List selectList(SqlSentence sqlSentence) { return userMoneyUnclaimedMapper.selectList(sqlSentence); } /** * 查询列表 */ @Override public List> selectListMap(SqlSentence sqlSentence) { return userMoneyUnclaimedMapper.selectListMap(sqlSentence); } /** * 查询单个 */ @Override public UserMoneyUnclaimed selectOne(SqlSentence sqlSentence) { return userMoneyUnclaimedMapper.selectOne(sqlSentence); } /** * 查询单个 */ @Override public Map selectOneMap(SqlSentence sqlSentence) { return userMoneyUnclaimedMapper.selectOneMap(sqlSentence); } /** * 查询单个,大数据不拿取 */ @Override public UserMoneyUnclaimed selectOneByKey(Object object) { return userMoneyUnclaimedMapper.selectOneByKey(object); } /** * 查询单个,大数据拿取 */ @Override public UserMoneyUnclaimed selectOneByKeyBlob(Object object) { return userMoneyUnclaimedMapper.selectOneByKeyBlob(object); } /** * 获取操作用户资金信息消息 * @param userMoneyUnclaimed 参数 * @param type 是否领取资金 * @return 返回 */ private JSONObject getOpInfo(UserMoneyUnclaimed userMoneyUnclaimed, Integer type) { BigDecimal before = BigDecimal.ZERO; BigDecimal after = BigDecimal.ZERO; JSONObject jsonObject = new JSONObject(); // 获取处理信息 StringBuilder info = new StringBuilder(); info.append(userMoneyUnclaimed.getOriginSubject()); // 查询用户资金信息 UserMoney userMoney = userMoneyService.selectUserIdDecrypt(userMoneyUnclaimed.getUserId()); switch (userMoneyUnclaimed.getFundType()) { case UserMoneyUnclaimed.FUND_TYPE_STORED_VALUE_FUND: info.append(", 储值金"); before = new BigDecimal(userMoney.getStoredValueFund()); after = before.add(userMoneyUnclaimed.getOpNumber()); break; case UserMoneyUnclaimed.FUND_TYPE_VALUE_ADDED_FUND: info.append(", 增值金"); before = new BigDecimal(userMoney.getValueAddedFund()); after = before.add(userMoneyUnclaimed.getOpNumber()); break; case UserMoneyUnclaimed.FUND_TYPE_INTEGRAL: info.append(", 积分"); before = new BigDecimal(userMoney.getIntegral()); after = before.add(userMoneyUnclaimed.getOpNumber()); break; case UserMoneyUnclaimed.FUND_TYPE_DEPOSIT: info.append(", 预定金"); before = new BigDecimal(userMoney.getDeposit()); after = before.add(userMoneyUnclaimed.getOpNumber()); break; } info.append(", 操作数量:").append(userMoneyUnclaimed.getOpNumber()); if (UserMoneyUnclaimed.FUND_TYPE_VALUE_ADDED_FUND == userMoneyUnclaimed.getFundType()) { // 增值金添加是否需要领取 int opType = userMoneyUnclaimed.getOpType() == null ? BaseEntity.YES : userMoneyUnclaimed.getOpType(); info.append(", 是否需要领取:").append(BaseEntity.YES.equals(opType) ? "是" : "否"); if (BaseEntity.NO.equals(type)){ before = null; after = null; } } if (BaseEntity.YES.equals(type)){ info.append(", 领取资金: ").append(userMoneyUnclaimed.getOpNumber()); } if (3 == type){ info.append(", 作废待领取资金: ").append(userMoneyUnclaimed.getOpNumber()); before = null; after = null; } jsonObject.put("key", info.toString()); if (before != null) { jsonObject.put("before", before); jsonObject.put("after", after); } return jsonObject; } /** * 添加用户日志 * @param userMoneyUnclaimed 用户资金对象 * @param type 是否领取资金 */ private void addUserLog(UserMoneyUnclaimed userMoneyUnclaimed, Integer type){ // 处理用户日志 User user = userMapper.selectOneByKey(userMoneyUnclaimed.getUserId()); if (user != null) { // 用户日志 JSONArray logArray = new JSONArray(); JSONObject jsonObject = getOpInfo(userMoneyUnclaimed, type); logArray.add(jsonObject); // 操作人转换 UserUpdateLog userUpdateLog = new UserUpdateLog(); // 来源渠道 userUpdateLog.setSourceAppCode(userMoneyUnclaimed.getOriginChannel()); if (!StringUtils.isEmpty(userMoneyUnclaimed.getOriginChannel())){ String name = PlatformConstants.getName(userMoneyUnclaimed.getOriginChannel()); userUpdateLog.setSourceAppName(name); } switch (userMoneyUnclaimed.getOperatorType()) { case UserMoneyUnclaimed.OPERATOR_TYPE_USER: userUpdateLog.setOperatorType(UserUpdateLog.OPERATOR_TYPE_USER); userUpdateLog.setOperatorId(userMoneyUnclaimed.getOperatorId()); userUpdateLog.setOperatorName(userMoneyUnclaimed.getOperatorName()); break; case UserMoneyUnclaimed.OPERATOR_TYPE_EMPLOYEE: userUpdateLog.setOperatorType(UserUpdateLog.OPERATOR_TYPE_EMPLOYEE); userUpdateLog.setOperatorId(userMoneyUnclaimed.getOperatorId()); userUpdateLog.setOperatorName(userMoneyUnclaimed.getOperatorName()); break; case UserMoneyUnclaimed.OPERATOR_TYPE_ADMIN: userUpdateLog.setOperatorType(UserUpdateLog.OPERATOR_TYPE_ADMIN); userUpdateLog.setOperatorId(userMoneyUnclaimed.getOperatorId()); userUpdateLog.setOperatorName(userMoneyUnclaimed.getOperatorName()); break; case UserMoneyUnclaimed.OPERATOR_TYPE_SYSTEM: userUpdateLog.setOperatorType(UserUpdateLog.OPERATOR_TYPE_SYSTEM); break; } // 记录编号 String recordNo = systemParameterService.createUSLGNo(user.getId(), user.getCIQ()); // 添加用户日志 UserInfoTool.addUserUpdateLogOp(commonService, user, user.getShopId(), userUpdateLog, "用户资金调整", logArray, userMoneyUnclaimed.getRemarks(), recordNo); } } /** * 发送企业微信资金到账消息 * @param userMoneyUnclaimed 参数 */ private void sentCorpNotice(UserMoneyUnclaimed userMoneyUnclaimed) { // 开始处理添加发送通知任务 到账提醒 if (userMoneyUnclaimed.getOpNumber().compareTo(BigDecimal.ZERO) > 0) { // 添加发送通知任务 TimerHandleTool.addTask(commonService, TimerHandleItem.TYPE_USER_MONEY_CORP_NOTICE, userMoneyUnclaimed.getId(), null); } } /** * 新增 */ @Override public void insert(UserMoneyUnclaimed userMoneyUnclaimed) { int count = userMoneyUnclaimedMapper.insert(userMoneyUnclaimed); if (count != 1) { throw new TipsException("新增失败!"); } else { // 重新获取下数据 UserMoneyUnclaimed checkUserMoneyUnclaimed = userMoneyUnclaimedMapper.selectOneByKey(userMoneyUnclaimed.getId()); if(checkUserMoneyUnclaimed != null) { // 添加用户日志 addUserLog(userMoneyUnclaimed, BaseEntity.NO); // 过滤待领取的数据 this.handlerReceiveData(checkUserMoneyUnclaimed, BaseEntity.YES); // 处理发送顾问通知消息 this.sentCorpNotice(checkUserMoneyUnclaimed); } } } /** * 修改 */ @Override public void updateAll(UserMoneyUnclaimed userMoneyUnclaimed) { // 作废了记录处理 if(BaseEntity.YES.equals(userMoneyUnclaimed.getIsDel())){ // 添加用户日志 addUserLog(userMoneyUnclaimed, 3); } int count = userMoneyUnclaimedMapper.updateAll(userMoneyUnclaimed); if (count != 1) { throw new TipsException("保存失败!"); } } /** * 修改 */ @Override public void updateWhere(SqlSentence sqlSentence) { int count = userMoneyUnclaimedMapper.updateWhere(sqlSentence); if (count != 1) { throw new TipsException("保存失败!"); } } /** * 删除一个 */ @Override public void deleteOne(String delId) { int count = userMoneyUnclaimedMapper.deleteById(delId); if (count != 1) { throw new TipsException("删除失败!"); } } /** * 查询条数 */ @Override public int selectCount(SqlSentence sqlSentence) { int count = userMoneyUnclaimedMapper.selectCount(sqlSentence); return count; } /** * 校验参数 * * @param userMoneyUnclaimed 用户待领取列表 */ @Override public void checkParam(UserMoneyUnclaimed userMoneyUnclaimed) { // 用户校验 if (StringUtils.isEmpty(userMoneyUnclaimed.getUserId())) { throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "用户id不能为空"); } // 资金类型判断 if (userMoneyUnclaimed.getFundType() == null) { throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "资金类型不能为空"); } else { // 资金类型判断是否匹配 switch (userMoneyUnclaimed.getFundType()) { case UserMoneyUnclaimed.FUND_TYPE_STORED_VALUE_FUND: case UserMoneyUnclaimed.FUND_TYPE_VALUE_ADDED_FUND: case UserMoneyUnclaimed.FUND_TYPE_INTEGRAL: case UserMoneyUnclaimed.FUND_TYPE_DEPOSIT: break; default: throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "资金类型错误,类型不存在"); } } // 来源渠道 if (StringUtils.isEmpty(userMoneyUnclaimed.getOriginChannel())) { // 默认来源渠道为 预约后台 userMoneyUnclaimed.setOriginChannel(OriginChannelConstants.ORIGIN_CHANNEL_PHIS); // throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "来源渠道不能为空"); } /* else { if (checkConstantNotHaveValue(OriginChannelConstants.class, userMoneyUnclaimed.getOriginChannel())) { throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "来源渠道错误,渠道不存在"); } }*/ // 操作原因 if (StringUtils.isEmpty(userMoneyUnclaimed.getOperationReason())) { throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "操作原因不能为空"); } else { if (checkConstantNotHaveValue(OperationReasonConstants.class, userMoneyUnclaimed.getOperationReason())) { throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "操作原因错误,原因不存在"); } } // 操作类型 if (userMoneyUnclaimed.getOpType() == null) { // 默认为系统处理 userMoneyUnclaimed.setOpType(UserMoneyUnclaimed.OP_TYPE_SYSTEM); // 增值金默认需要领取 if (UserMoneyUnclaimed.FUND_TYPE_VALUE_ADDED_FUND == userMoneyUnclaimed.getFundType()) { // 增值金默认需要领取 负数不用用户领取和判断是否需要发送短信提醒领取 if (BigDecimal.ZERO.compareTo(userMoneyUnclaimed.getOpNumber()) < 0) { userMoneyUnclaimed.setOpType(UserMoneyUnclaimed.OP_TYPE_RECEIVE); } } } else { // 判断是否是支持的类型 if (UserMoneyUnclaimed.OP_TYPE_SYSTEM != userMoneyUnclaimed.getOpType() && UserMoneyUnclaimed.OP_TYPE_RECEIVE != userMoneyUnclaimed.getOpType()) { throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "操作类型错误"); } } // 是否发送短信 if (UserMoneyUnclaimed.OP_TYPE_RECEIVE == userMoneyUnclaimed.getOpType()) { boolean flag = true; // 查询用户设置是否领取状态 UserInfo userInfo = userInfoMapper.selectOneByUserId(userMoneyUnclaimed.getUserId()); if (userInfo != null) { // 不需要领取处理数据 if (userInfo.getIsReceiveValueAddedFund() != null && BaseEntity.NO.equals(userInfo.getIsReceiveValueAddedFund())) { flag = false; userMoneyUnclaimed.setOpType(UserMoneyUnclaimed.OP_TYPE_SYSTEM); // 用户设置了不用再领取增值金 logger.info("操作用户资金(待领取记录)-用户设置是否需要领取状态:{}", userInfo.getIsReceiveValueAddedFund()); } } // 校验是否要发送短信 if (flag) { checkIsNeedSentSMS(userMoneyUnclaimed); } } // 判断操作数量或金额 if (userMoneyUnclaimed.getOpNumber() == null) { throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "操作数量或金额不能为空"); } else { // 判断操作数量或金额 是否为 0 if (BigDecimal.ZERO.compareTo(userMoneyUnclaimed.getOpNumber()) == 0) { throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "操作数量或金额不能为0"); } else if (BigDecimal.ZERO.compareTo(userMoneyUnclaimed.getOpNumber()) < 0) { // 资金操作类型-增加 userMoneyUnclaimed.setFundOpType(UserMoneyUnclaimed.FUND_OP_TYPE_INCREASE); } else if (BigDecimal.ZERO.compareTo(userMoneyUnclaimed.getOpNumber()) > 0) { // 资金操作类型-减少 userMoneyUnclaimed.setFundOpType(UserMoneyUnclaimed.FUND_OP_TYPE_REDUCE); } // 用户资金数据校验 UserMoney userMoney = userMoneyService.selectUserIdDecrypt(userMoneyUnclaimed.getUserId()); logger.info("用户{},用户资产{},用户金额记录{}",userMoneyUnclaimed.getUserId(),JSON.toJSONString(userMoney),JSON.toJSONString(userMoneyUnclaimed)); if (userMoney == null) { throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "用户的资产数据不存在"); } else { // 判断数量减扣数量是否充足 if (UserMoneyUnclaimed.FUND_OP_TYPE_REDUCE == userMoneyUnclaimed.getFundOpType()) { // 资金类型判断是否匹配 switch (userMoneyUnclaimed.getFundType()) { case UserMoneyUnclaimed.FUND_TYPE_STORED_VALUE_FUND: // 金额操作 BigDecimal storedValueFund = new BigDecimal(userMoney.getStoredValueFund()); // 判断是否足够扣减 this.checkCanOperation(userMoneyUnclaimed.getFundType(), storedValueFund, userMoneyUnclaimed.getOpNumber()); break; case UserMoneyUnclaimed.FUND_TYPE_VALUE_ADDED_FUND: // 金额操作 不做校验可以减成负数 BigDecimal valueAddedFund = new BigDecimal(userMoney.getValueAddedFund()); // 判断是否足够扣减 this.checkCanOperation(userMoneyUnclaimed.getFundType(), valueAddedFund, userMoneyUnclaimed.getOpNumber()); break; case UserMoneyUnclaimed.FUND_TYPE_INTEGRAL: // 积分操作 BigDecimal integral = new BigDecimal(userMoney.getIntegral()); // 判断是否足够扣减 this.checkCanOperation(userMoneyUnclaimed.getFundType(), integral, userMoneyUnclaimed.getOpNumber()); break; case UserMoneyUnclaimed.FUND_TYPE_DEPOSIT: // 金额操作 BigDecimal deposit = new BigDecimal(userMoney.getDeposit()); // 判断是否足够扣减 this.checkCanOperation(userMoneyUnclaimed.getFundType(), deposit, userMoneyUnclaimed.getOpNumber()); break; } } } } // 操作人信息判断 if (userMoneyUnclaimed.getOperatorType() == null) { // 操作人类型默认为员工 userMoneyUnclaimed.setOperatorType(UserMoneyUnclaimed.OPERATOR_TYPE_EMPLOYEE); } else { // 操作人类型判断是否匹配 switch (userMoneyUnclaimed.getOperatorType()) { case UserMoneyUnclaimed.OPERATOR_TYPE_ADMIN: case UserMoneyUnclaimed.OPERATOR_TYPE_USER: case UserMoneyUnclaimed.OPERATOR_TYPE_EMPLOYEE: break; default: throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "操作人类型错误"); } } // 判断是否传了操作人id if (StringUtils.isEmpty(userMoneyUnclaimed.getOperatorId())) { throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "操作人id不能为空"); } // 操作人为员工 if (UserMoneyUnclaimed.OPERATOR_TYPE_EMPLOYEE == userMoneyUnclaimed.getOperatorType()) { Employee employee = commonService.selectOneByKey(EmployeeMapper.class, userMoneyUnclaimed.getOperatorId()); if (employee == null) { throw new PlatTipsException(PlatformCode.ERROR_TIPS, "操作人的信息不存在"); } else { // 填充名称 userMoneyUnclaimed.setOperatorName(employee.getCnName()); } } // 操作人为后台用户 if (UserMoneyUnclaimed.OPERATOR_TYPE_ADMIN == userMoneyUnclaimed.getOperatorType()) { SysAdmin sysAdmin = commonService.selectOneByKey(SysAdminMapper.class, userMoneyUnclaimed.getOperatorId()); if (sysAdmin == null) { throw new PlatTipsException(PlatformCode.ERROR_TIPS, "操作人的信息不存在"); } else { // 填充名称 userMoneyUnclaimed.setOperatorName(sysAdmin.getName()); } } // 操作人为用户 if (UserMoneyUnclaimed.OPERATOR_TYPE_USER == userMoneyUnclaimed.getOperatorType()) { User user = commonService.selectOneByKey(UserMapper.class, userMoneyUnclaimed.getOperatorId()); if (user == null) { throw new PlatTipsException(PlatformCode.ERROR_TIPS, "操作人的信息不存在"); } else { // 填充名称 userMoneyUnclaimed.setOperatorName(user.getName()); } } /*// 判断订单 先不判断订单 if(!StringUtils.isEmpty(userMoneyUnclaimed.getOrderId())){ OrdersTotal ordersTotal = commonService.selectOneByKey(OrdersTotalMapper.class, userMoneyUnclaimed.getOrderId()); if(ordersTotal == null){ throw new PlatTipsException(PlatformCode.ERROR_TIPS, "主订单的信息不存在"); } } // 判断子订单 if(!StringUtils.isEmpty(userMoneyUnclaimed.getOrderItemId())){ if(StringUtils.isEmpty(userMoneyUnclaimed.getOrderId())){ throw new PlatTipsException(PlatformCode.ERROR_TIPS, "主订单id不能为空!"); } OrderItem orderItem = commonService.selectOneByKey(OrderItemMapper.class, userMoneyUnclaimed.getOrderItemId()); if(orderItem == null){ throw new PlatTipsException(PlatformCode.ERROR_TIPS, "子订单的信息不存在"); } else { if(!orderItem.getOrderId().equals(userMoneyUnclaimed.getOrderId())){ throw new PlatTipsException(PlatformCode.ERROR_TIPS, "子订单的信息与主订单的信息不匹配"); } } }*/ // 获取有效期时间配置 待领取默认30天领取 int validityPeriod = UserMoneyTool.getUnclaimedValidityTime(commonService); // 获取时间 Date limitEndTime = DateUtil.addDay(userMoneyUnclaimed.getLimitStartTime(), validityPeriod); // 设置有效期时间 userMoneyUnclaimed.setLimitEndTime(limitEndTime); } /** * 校验常量值是否存在 * @param classObj 类对象 * @param value 校验值 * @return 返回 */ @Override public boolean checkConstantNotHaveValue(Class classObj, String value) { boolean flag = true; // 判断是否存在这个来源渠道 Field[] fields = classObj.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); // 获取常量名称 String fieldName = field.getName(); // 判断常量值是否存在 if (field.getType().toString().endsWith("java.lang.String") && Modifier.isStatic(field.getModifiers())) { try { // 获取常量值 String fieldValue = field.get(classObj).toString(); if (fieldValue.equals(value)) { flag = false; break; } }catch (Exception ex){ throw new PlatTipsException(PlatformCode.ERROR_TIPS, "常量获取配置出现错误"); } } } return flag; } /** * 判断数据是否支持减扣 */ private void checkCanOperation(Integer fundType, BigDecimal value, BigDecimal opNumber) { // 负数取反计算 if (BigDecimal.ZERO.compareTo(opNumber) > 0) { opNumber = opNumber.negate(); } // 计算账户余额是否支持减扣 BigDecimal subtractValue = value.subtract(opNumber); if (subtractValue.compareTo(BigDecimal.ZERO) < 0) { // 获取资金名称 String fundTypeName = UserMoneyUnclaimed.getFundTypeName(fundType); // 提示错误 throw new PlatTipsException(PlatformCode.ERROR_TIPS, String.format("用户资金账户%s不足扣减!", fundTypeName)); } } /** * 根据平台判断是否需要发送短信 * @param userMoneyUnclaimed 用户待领取信息 */ private void checkIsNeedSentSMS(UserMoneyUnclaimed userMoneyUnclaimed) { // CRM不用发送短信领取其他平台需要发送短信领取 // if(!OriginChannelConstants.ORIGIN_CHANNEL_CRM.equals(userMoneyUnclaimed.getOriginChannel())) { userMoneyUnclaimed.setIsSentSMS(BaseEntity.YES); String url = getSMSUrl(); if (StringUtils.isEmpty(url)) { throw new PlatTipsException(PlatformCode.ERROR_TIPS, "获取发送短信链接地址出现异常!"); } userMoneyUnclaimed.setSMSUrl(url); //} } /** * 生成需要发送短信的地址 * @return 返回 */ private String getSMSUrl() { // 生成小程序链接 String urlLink = null; // 正式区在拿取链接 if (PlatformPattern.PROD.equals(customParameter.getPlatformPatternMoney())) { // 获取用户CRM小程序token ApplyParameter applyParameter = ApplyParameterTool.getMpParameter("wx71e6babac80abcee", commonService); if (applyParameter == null) { throw new PlatTipsException(PlatformCode.ERROR_TIPS, "mpId is error"); } // 获取范围密钥 SysParameter sysParameter = systemParameterService.getAccessToken(applyParameter.getMpAppId(), applyParameter.getMpSecretKey()); if (sysParameter == null) { throw new PlatTipsException(PlatformCode.ERROR_SYSTEM, "服务错误" + SystemCode.ERROR_GET_CORP_TOKEN); } // 更换链接 原CRM 1.0 /pages/recharge/incrementInfo String result = SendSMSTool.getAooLetUrl(sysParameter.getParamValue(), "/pages/portClient_me/incrementValue/incrementValue", "", "release"); if (!StringUtils.isEmpty(result)) { JSONObject jsonObject = JSON.parseObject(result); if (jsonObject.getInteger("errcode") != 0) { throw new PlatTipsException(PlatformCode.ERROR_SYSTEM, "生成短信小程序路径错误:" + jsonObject.getString("msg") + SystemCode.ERROR_GET_CORP_TOKEN); } urlLink = jsonObject.getString("url_link"); } } else { // 测试区跳转百度 urlLink = "https://wxaurl.cn/6666"; } return urlLink; } /** * 待领取资产处理 * @param userMoneyUnclaimed 待领取数据 * @param isReceive 是否过滤领取数据 0 否 1 是 */ @Override public void handlerReceiveData(UserMoneyUnclaimed userMoneyUnclaimed, Integer isReceive) { if (userMoneyUnclaimed != null) { // 多线程添加锁 synchronized (this) { // 判断是不是要领取的数据 if (BaseEntity.YES.equals(isReceive)) { if (UserMoneyUnclaimed.OP_TYPE_RECEIVE == userMoneyUnclaimed.getOpType()) { logger.info("待领取资产处理跳过,数据id:{},原因:需要领取数据", userMoneyUnclaimed.getId()); return; } } // 判断是否处理了 if (UserMoneyUnclaimed.STATUS_SUCCEED == userMoneyUnclaimed.getStatus()) { logger.info("待领取资产处理跳过,数据id:{},原因:数据已领取不需要再处理", userMoneyUnclaimed.getId()); return; } // 判断数据是否有效 if (UserMoneyUnclaimed.NO.equals(userMoneyUnclaimed.getIsValid())) { logger.info("待领取资产处理跳过,数据id:{},原因:数据已失效无法领取", userMoneyUnclaimed.getId()); return; } // 添加用户日志 if (BaseEntity.NO.equals(isReceive)) { addUserLog(userMoneyUnclaimed, BaseEntity.YES); } // 操作资金处理 switch (userMoneyUnclaimed.getFundType()) { case UserMoneyUnclaimed.FUND_TYPE_STORED_VALUE_FUND: case UserMoneyUnclaimed.FUND_TYPE_DEPOSIT: // 储值金和预定金只处理总资金信息 userMoneyService.handleMoneyData(userMoneyUnclaimed); break; case UserMoneyUnclaimed.FUND_TYPE_VALUE_ADDED_FUND: // 处理增值金 userValueAddedFundRecordService.handleData(userMoneyUnclaimed); break; case UserMoneyUnclaimed.FUND_TYPE_INTEGRAL: // 处理积分 userIntegralRecordService.handleData(userMoneyUnclaimed); break; } // 更新状态成已处理 SqlSentence sqlSentence = new SqlSentence(); Map sqlValue = new HashMap<>(); String sql = " status=#{m.status},receiveTime=#{m.nowTime},limitEndTime=#{m.limitEndTime},editTime=#{m.nowTime} WHERE id=#{m.id}"; sqlValue.put("nowTime", new Date()); sqlValue.put("id", userMoneyUnclaimed.getId()); sqlValue.put("status", UserMoneyUnclaimed.STATUS_SUCCEED); // 已领取调整领取时间 int validityPeriod = UserMoneyTool.getReceivedValidityTime(commonService); // 获取时间 Date limitEndTime = DateUtil.addDay(userMoneyUnclaimed.getLimitStartTime(), validityPeriod); sqlValue.put("limitEndTime", limitEndTime); sqlSentence.sqlSentence(sql, sqlValue); commonService.updateWhere(UserMoneyUnclaimedMapper.class, sqlSentence); } } } /**转赠*/ @Override public void turn(UserTurnDto userTurnDto) { logger.info("转赠参数"+ JSONObject.toJSONString(userTurnDto)); //1.参数校验 turnParameterCheck(userTurnDto); //2.判断用户是否有资金信息 //查询转出用户 User turnUser = userMapper.selectOneByKey(userTurnDto.getTurnPeopleId()); if (turnUser == null){ throw new PlatTipsException(PlatformCode.ERROR_TIPS,"找不到转出客户信息"); } //查询转入用户 User doneeUser = userMapper.selectOneByKey(userTurnDto.getDoneeId()); if (doneeUser == null){ throw new PlatTipsException(PlatformCode.ERROR_TIPS,"找不到转入客户信息"); } //3.转赠操作 //增值金 if (userTurnDto.getIncrementMoney() != null) { //操作资金 moneyTurn(0,userTurnDto); //生成转赠记录 newTurnAdd(UserMoneyEnum.INCREMENT.getCode(), userTurnDto,turnUser,doneeUser); } //储值金 if (userTurnDto.getStoredMoney() != null){ //操作资金 moneyTurn(1,userTurnDto); //生成转赠记录 newTurnAdd(UserMoneyEnum.STORED.getCode(), userTurnDto,turnUser,doneeUser); } //积分 if (userTurnDto.getIntegral() != null){ //操作资金 moneyTurn(2,userTurnDto); //生成转赠记录 newTurnAdd(UserMoneyEnum.INTEGRAL.getCode(), userTurnDto,turnUser,doneeUser); } } /** * @param moneyType 操作金额类型:0增值金,1储值金,2积分 * @param userTurnDto 参数 * */ private void moneyTurn(Integer moneyType,UserTurnDto userTurnDto) { //增值金转出人金额校验 UserMoneyUnclaimed userMoneyUnclaimed = new UserMoneyUnclaimed(); //金额类型 if (moneyType == 0){ userMoneyUnclaimed.setFundType(UserMoneyUnclaimed.FUND_TYPE_VALUE_ADDED_FUND); userMoneyUnclaimed.setOpNumber(new BigDecimal(userTurnDto.getIncrementMoney()).negate()); }else if (moneyType == 1){ userMoneyUnclaimed.setFundType(UserMoneyUnclaimed.FUND_TYPE_STORED_VALUE_FUND); userMoneyUnclaimed.setOpNumber(new BigDecimal(userTurnDto.getStoredMoney()).negate()); }else if (moneyType == 2){ userMoneyUnclaimed.setFundType(UserMoneyUnclaimed.FUND_TYPE_INTEGRAL); userMoneyUnclaimed.setOpNumber(new BigDecimal(userTurnDto.getIntegral()).negate()); } userMoneyUnclaimed.setOpType(0); userMoneyUnclaimed.setOriginChannel(userTurnDto.getAppIdCode()); userMoneyUnclaimed.setOperatorId(userTurnDto.getCreateId()); userMoneyUnclaimed.setOperatorName(userTurnDto.getCreateName()); userMoneyUnclaimed.setOperationReason(OperationReasonConstants.OP_TURN_MONTY); userMoneyUnclaimed.setOriginSubject(userTurnDto.getOriginSubject()); userMoneyUnclaimed.setCommonId(userTurnDto.getCommonId()); userMoneyUnclaimed.setRemarks(userTurnDto.getRemarks()); //转出用户 userMoneyUnclaimed.setUserId(userTurnDto.getTurnPeopleId()); //转入用户 UserMoneyUnclaimed intoUserMoneyUnclaimed = new UserMoneyUnclaimed(); BeanUtils.copyProperties(userMoneyUnclaimed,intoUserMoneyUnclaimed); intoUserMoneyUnclaimed.setUserId(userTurnDto.getDoneeId()); intoUserMoneyUnclaimed.setOpNumber(userMoneyUnclaimed.getOpNumber().negate()); intoUserMoneyUnclaimed.setOpType(0); //转出 checkParam(userMoneyUnclaimed); insert(userMoneyUnclaimed); //转入 checkParam(intoUserMoneyUnclaimed); insert(intoUserMoneyUnclaimed); } /**转赠记录新增*/ private void newTurnAdd(Integer type, UserTurnDto userTurnDto, User turnOutUser, User turnIntoUser) { //转赠记录 TurnAdd turnAdd = new TurnAdd(); turnAdd.setCreateId(userTurnDto.getCreateId()); turnAdd.setCreateName(userTurnDto.getCreateName()); turnAdd.setRemarks(userTurnDto.getRemarks()); turnAdd.setTurnPeopleId(userTurnDto.getTurnPeopleId()); turnAdd.setTurnPeopleName(userTurnDto.getTurnPeopleName()); turnAdd.setTurnShopId(userTurnDto.getTurnShopId()); turnAdd.setTurnShopName(userTurnDto.getTurnShopName()); // 转增人其他信息 if (turnOutUser != null){ turnAdd.setTurnPeopleCIQ(turnOutUser.getCIQ()); turnAdd.setTurnPeopleLevel(turnOutUser.getUserLevel()); turnAdd.setTurnPeopleUserStatus(turnOutUser.getUserStatus()); } turnAdd.setDoneeId(userTurnDto.getDoneeId()); turnAdd.setDoneeName(userTurnDto.getDoneeName()); turnAdd.setDoneeShopId(userTurnDto.getDoneeShopId()); turnAdd.setDoneeShopName(userTurnDto.getDoneeShopName()); // 受赠人其他信息 if (turnIntoUser != null){ turnAdd.setDoneeCIQ(turnIntoUser.getCIQ()); turnAdd.setDoneeLevel(turnIntoUser.getUserLevel()); turnAdd.setDoneeUserStatus(turnIntoUser.getUserStatus()); } //消费/实际金额给默认0值 turnAdd.setConsumptionMoney(BigDecimal.ZERO); turnAdd.setActualMoney(BigDecimal.ZERO); if (UserMoneyEnum.INCREMENT.getCode().equals(type)){ turnAdd.setTurnMoney(new BigDecimal(userTurnDto.getIncrementMoney())); turnAdd.setRechargeMoney(new BigDecimal(userTurnDto.getIncrementMoney())); turnAdd.setType(OrderItemConstants.TYPE_TURN_INCREMENT); }else if (UserMoneyEnum.STORED.getCode().equals(type)){ turnAdd.setTurnMoney(new BigDecimal(userTurnDto.getStoredMoney())); turnAdd.setRechargeMoney(new BigDecimal(userTurnDto.getStoredMoney())); turnAdd.setType(OrderItemConstants.TYPE_TURN_STORED); }else if (UserMoneyEnum.INTEGRAL.getCode().equals(type)){ turnAdd.setTurnMoney(new BigDecimal(userTurnDto.getIntegral())); turnAdd.setRechargeMoney(new BigDecimal(userTurnDto.getIntegral())); turnAdd.setType(OrderItemConstants.TYPE_TURN_INTEGRAL); } if (turnAddMapper.insert(turnAdd) != 1){ throw new PlatTipsException(PlatformCode.ERROR_TIPS,"新增转赠记录失败!"); } } /**转赠参数判断*/ private void turnParameterCheck(UserTurnDto userTurnDto) { if (StringUtils.isEmpty(userTurnDto.getTurnPeopleId())){ throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "转赠人标识不能为空!"); } if (StringUtils.isEmpty(userTurnDto.getTurnPeopleName())){ throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "转赠人名称不能为空!"); } if (StringUtils.isEmpty(userTurnDto.getTurnShopId())){ throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "转赠人门店标识不能为空!"); } if (StringUtils.isEmpty(userTurnDto.getTurnShopName())){ throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "转赠人门店名称不能为空!"); } if (StringUtils.isEmpty(userTurnDto.getDoneeId())){ throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "受赠人标识不能为空!"); } if (StringUtils.isEmpty(userTurnDto.getDoneeName())){ throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "受赠人名称不能为空!"); } if (StringUtils.isEmpty(userTurnDto.getDoneeShopId())){ throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "受赠人门店标识不能为空!"); } if (StringUtils.isEmpty(userTurnDto.getDoneeShopName())){ throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "受赠人门店名称不能为空!"); } if (userTurnDto.getIncrementMoney() == null && userTurnDto.getStoredMoney() == null && userTurnDto.getIntegral() == null){ throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "转赠资金不能为空!"); } if(userTurnDto.getIncrementMoney() != null && new BigDecimal(userTurnDto.getIncrementMoney()).compareTo(BigDecimal.ZERO) < 0){ throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "转赠增值金数值错误!"); } if(userTurnDto.getStoredMoney() != null && new BigDecimal(userTurnDto.getStoredMoney()).compareTo(BigDecimal.ZERO) < 0){ throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "转赠储值金金额错误!"); } if(userTurnDto.getIntegral() != null && new BigDecimal(userTurnDto.getIntegral()).compareTo(BigDecimal.ZERO) < 0){ throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "转赠积分数值错误!"); } if (StringUtils.isEmpty(userTurnDto.getCreateId())){ throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "操作人标识不能为空!"); } if (StringUtils.isEmpty(userTurnDto.getCreateName())){ throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "操作人名称不能为空!"); } if (userTurnDto.getTurnPeopleId().equals(userTurnDto.getDoneeId())){ throw new PlatTipsException(PlatformCode.ERROR_PARAMETER_NULL, "转赠人与受赠人不能为同一人!"); } } }