嗨森逛服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hai-server/hai-service/src/main/java/com/hai/service/impl/OutRechargeOrderServiceImpl...

810 lines
32 KiB

package com.hai.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hai.common.exception.ErrorCode;
import com.hai.common.exception.ErrorHelp;
import com.hai.common.exception.SysCode;
import com.hai.common.utils.*;
import com.hai.config.*;
import com.hai.dao.OutRechargeOrderMapper;
import com.hai.dao.OutRechargeOrderMapperExt;
import com.hai.entity.*;
import com.hai.enum_type.*;
import com.hai.model.*;
import com.hai.order.service.OrderService;
import com.hai.order.type.OrderChildStatus;
import com.hai.order.type.OrderPayType;
import com.hai.order.type.OrderRefundOpUserType;
import com.hai.order.utils.OrderUtil;
import com.hai.service.*;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
@Service("outRechargeOrderService")
public class OutRechargeOrderServiceImpl implements OutRechargeOrderService {
private static final Logger log = LoggerFactory.getLogger(OutRechargeOrderServiceImpl.class);
@Resource
private OutRechargeOrderMapper outRechargeOrderMapper;
@Resource
private OutRechargeOrderMapperExt outRechargeOrderMapperExt;
@Resource
private OrderService orderService;
@Resource
private HighUserService highUserService;
@Resource
private OutRechargeOrderService outRechargeOrderService;
@Resource
private OutRechargePriceService outRechargePriceService;
@Resource
private HighDiscountUserRelService highDiscountUserRelService;
@Resource
private HighDiscountAgentCodeService highDiscountAgentCodeService;
@Resource
private OutRechargeChildOrderService outRechargeChildOrderService;
@Resource
private BsRechargeCodeService rechargeCodeService;
@Resource
private HighOrderService highOrderService;
@Autowired
private RedisTemplate redisTemplate;
@Override
public List<OutRechargeOrder> getListRechargeOrder(Map<String, Object> map) {
OutRechargeOrderExample example = new OutRechargeOrderExample();
OutRechargeOrderExample.Criteria criteria = example.createCriteria();
if (MapUtils.getLong(map, "userId") != null) {
criteria.andUserIdEqualTo(MapUtils.getLong(map, "userId"));
}
if (MapUtils.getLong(map, "companyId") != null) {
criteria.andCompanyIdEqualTo(MapUtils.getLong(map, "companyId"));
}
if (MapUtils.getInteger(map, "payType") != null) {
criteria.andPayTypeEqualTo(MapUtils.getInteger(map, "payType"));
}
if (MapUtils.getInteger(map, "laborUnionCard") != null) {
criteria.andLaborUnionCardEqualTo(MapUtils.getString(map, "laborUnionCard"));
}
if (MapUtils.getInteger(map, "payStatus") != null) {
criteria.andPayStatusEqualTo(MapUtils.getInteger(map, "payStatus"));
}
if (MapUtils.getInteger(map, "rechargeType") != null) {
criteria.andRechargeTypeEqualTo(MapUtils.getInteger(map, "rechargeType"));
}
if (MapUtils.getString(map, "orderNo") != null) {
criteria.andOrderNoLike("%" + MapUtils.getString(map, "orderNo") + "%");
}
if (MapUtils.getString(map, "userPhone") != null) {
criteria.andUserPhoneEqualTo(MapUtils.getString(map, "userPhone"));
}
if (MapUtils.getString(map, "rechargeContent") != null) {
criteria.andRechargeContentLike("%" + MapUtils.getString(map, "rechargeContent") + "%");
}
if (MapUtils.getInteger(map, "operatorType") != null) {
criteria.andOperatorTypeEqualTo(MapUtils.getInteger(map, "operatorType"));
}
if (MapUtils.getString(map, "merchId") != null) {
criteria.andMerchIdEqualTo(MapUtils.getString(map, "merchId"));
}
if (MapUtils.getInteger(map, "rechargeStatus") != null) {
criteria.andRechargeStatusEqualTo(MapUtils.getInteger(map, "rechargeStatus"));
}
if (StringUtils.isNotBlank(MapUtils.getString(map, "payTimeS")) && StringUtils.isNotBlank(MapUtils.getString(map, "payTimeE"))) {
criteria.andPayTimeBetween(
DateUtil.format(MapUtils.getString(map, "payTimeS"), "yyyy-MM-dd HH:mm:ss"),
DateUtil.format(MapUtils.getString(map, "payTimeE"), "yyyy-MM-dd HH:mm:ss"));
}
if (StringUtils.isNotBlank(MapUtils.getString(map, "createTimeS")) && StringUtils.isNotBlank(MapUtils.getString(map, "createTimeE"))) {
criteria.andCreateTimedBetween(
DateUtil.format(MapUtils.getString(map, "createTimeS"), "yyyy-MM-dd HH:mm:ss"),
DateUtil.format(MapUtils.getString(map, "createTimeE"), "yyyy-MM-dd HH:mm:ss"));
}
if (MapUtils.getBoolean(map , "whetherTimeOut") != null && MapUtils.getBoolean(map , "whetherTimeOut")) {
// 获取当前时间
Date date= new Date();
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
// 把日期往前减少三天,整数 往后推,负数往前移动
calendar.add(Calendar.DATE, -3);
// 这个时间就是日期往后推一天的结果
date = calendar.getTime();
criteria.andCreateTimedLessThan(date);
}
example.setOrderByClause("create_timed desc");
return outRechargeOrderMapper.selectByExample(example);
}
@Override
public OutRechargeOrder findByOrderId(Long orderId) {
return outRechargeOrderMapper.selectByPrimaryKey(orderId);
}
@Override
public OutRechargeOrder findByOrderNo(String orderNo) {
OutRechargeOrderExample example = new OutRechargeOrderExample();
example.createCriteria().andOrderNoEqualTo(orderNo);
List<OutRechargeOrder> list = outRechargeOrderMapper.selectByExample(example);
if (list.size() == 0) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未知的订单号");
}
OutRechargeOrder outRechargeOrder = list.get(0);
// 充值子订单
outRechargeOrder.setOutRechargeChildOrders(outRechargeChildOrderService.getListRechargeChildOrderByOrderId(outRechargeOrder.getId()));
return outRechargeOrder;
}
@Override
public OutRechargeOrder findByOrderNoNotChild(String orderNo) {
OutRechargeOrderExample example = new OutRechargeOrderExample();
example.createCriteria().andOrderNoEqualTo(orderNo);
List<OutRechargeOrder> list = outRechargeOrderMapper.selectByExample(example);
if (list.size() == 0) {
return null;
}
return list.get(0);
}
@Override
public void updateOrder(OutRechargeOrder outRechargeOrder) {
outRechargeOrderMapper.updateByPrimaryKey(outRechargeOrder);
}
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void cancelOrder(Long orderId) {
OutRechargeOrder order = findByOrderId(orderId);
if (order != null && order.getPayStatus() == 101) {
// 101.待支付 102.已支付 100.已完成 104.已取消 105.已退款
order.setPayStatus(104);
order.setCancelTime(new Date());
if (order.getMemDiscountId() != null) {
HighDiscountUserRel rel = highDiscountUserRelService.getRelById(order.getMemDiscountId());
if (rel != null) {
rel.setStatus(1); // 状态 0:已过期 1:未使用 2:已使用
rel.setUseTime(null);
highDiscountUserRelService.updateDiscountUserRel(rel);
HighDiscountAgentCode code = highDiscountAgentCodeService.getCodeById(rel.getDiscountAgentCodeId());
code.setStatus(2);
highDiscountAgentCodeService.updateCode(code);
}
}
if (order.getIntegralNum() != null) {
// 积分返回
String remark = "话费订单" + order.getOrderNo() + "取消,退还积分:" + order.getIntegralNum().intValue();
highUserService.goldHandle(order.getUserId(), order.getIntegralNum().intValue(), 1, 3, order.getId() , remark);
}
updateOrder(order);
}
}
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void finishOrder(Long orderId) {
OutRechargeOrder order = findByOrderId(orderId);
if (order != null) {
order.setRechargeStatus(202); // 订单状态:1 待支付 2 已支付 3.已完成 4. 已取消 5.已退款
order.setPayStatus(100); // 订单状态:1 待支付 2 已支付 3.已完成 4. 已取消 5.已退款
order.setFinishTime(new Date());
updateOrder(order);
}
}
@Override
public List<OutRechargeOrderModel> getOrderCount(Map<String, Object> map) throws Exception {
if (MapUtils.getLong(map, "createTimeS") != null) {
map.put("createTimeS", MapUtils.getString(map, "createTimeS"));
}
if (MapUtils.getLong(map, "createTimeE") != null) {
map.put("createTimeE", MapUtils.getString(map, "createTimeE"));
}
if (MapUtils.getLong(map, "payTimeS") != null) {
map.put("payTimeS", MapUtils.getString(map, "payTimeS"));
}
if (MapUtils.getLong(map, "payTimeE") != null) {
map.put("payTimeE", MapUtils.getString(map, "payTimeE"));
}
return outRechargeOrderMapper.selectOrderCount(map);
}
@Override
public List<OutOrderModel> getListOrderCount(Map<String, String> map) throws Exception {
String finishTimeS = map.get("finishTimeS");
String finishTimeE = map.get("finishTimeE");
Integer status;
if (StringUtils.isNotBlank(map.get("status"))) {
status = Integer.valueOf(map.get("status"));
} else {
status = null;
}
String fTimeS;
String fTimeE;
if (StringUtils.isNotBlank(finishTimeS)) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date(Long.parseLong(finishTimeS)));
//时
calendar.set(Calendar.HOUR_OF_DAY, 00);
//分
calendar.set(Calendar.MINUTE, 00);
//秒
calendar.set(Calendar.SECOND, 00);
fTimeS = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
} else {
fTimeS = "2010-09-13 22:36:01";
}
if (StringUtils.isNotBlank(finishTimeE)) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date(Long.parseLong(finishTimeE)));
//时
calendar.set(Calendar.HOUR_OF_DAY, 00);
//分
calendar.set(Calendar.MINUTE, 00);
//秒
calendar.set(Calendar.SECOND, 00);
fTimeE = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
} else {
fTimeE = DateUtil.date2String(new Date(), "yyyy-MM-dd HH:mm:ss");
}
return outRechargeOrderMapperExt.getListOrderCount(fTimeS, fTimeE, status);
}
@Override
public List<OutUserOrderModel> getUserCountList(Map<String, String> map) throws Exception {
String finishTimeS = map.get("finishTimeS");
String finishTimeE = map.get("finishTimeE");
String fTimeS;
String fTimeE;
if (StringUtils.isNotBlank(finishTimeS)) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date(Long.parseLong(finishTimeS)));
//时
calendar.set(Calendar.HOUR_OF_DAY, 00);
//分
calendar.set(Calendar.MINUTE, 00);
//秒
calendar.set(Calendar.SECOND, 00);
fTimeS = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
} else {
fTimeS = "2010-09-13 22:36:01";
}
if (StringUtils.isNotBlank(finishTimeE)) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date(Long.parseLong(finishTimeE)));
//时
calendar.set(Calendar.HOUR_OF_DAY, 00);
//分
calendar.set(Calendar.MINUTE, 00);
//秒
calendar.set(Calendar.SECOND, 00);
fTimeE = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
} else {
fTimeE = DateUtil.date2String(new Date(), "yyyy-MM-dd HH:mm:ss");
}
return outRechargeOrderMapperExt.getListUserCount(fTimeS, fTimeE);
}
@Override
public OrderCountModel rechargeOrderByIndex(Integer code) {
return outRechargeOrderMapper.rechargeOrderByIndex(code);
}
@Override
public void rechargeOrderToRefund(Long orderId) throws Exception {
}
@Override
@Transactional(
propagation= Propagation.REQUIRES_NEW,
isolation = Isolation.READ_COMMITTED,
timeout = 25,
rollbackFor = Exception.class)
public void refundOrder(Long orderId) throws Exception {
OutRechargeOrder outRechargeOrder = outRechargeOrderService.findByOrderId(orderId);
log.info("发起话费订单退款" + outRechargeOrder.getOrderNo() + "");
// 101.待支付 102.已支付 100.已完成 104.已取消 105.已退款
if (outRechargeOrder.getPayStatus() != 102) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "无法退款,订单不处于已支付状态");
}
// 充值状态:201:充值中 202:充值成功 203:充值失败 204:未充值
if (outRechargeOrder.getRechargeStatus() == 202) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "无法退款,订单已充值成功无法退款");
}
log.info("发起话费订单订单处理" + outRechargeOrder.getOrderNo() + "");
// 订单处理
HighOrder highOrder = highOrderService.getOrderByOrderNo(outRechargeOrder.getOrderNo());
orderService.refundOrder(highOrder, "话费自动退款",OrderRefundOpUserType.TYPE1,
null,
"系统自动退款");
// 话费充值业务订单处理
outRechargeOrder.setPayStatus(105);
outRechargeOrder.setRechargeStatus(203);
outRechargeOrder.setRefundTime(new Date());
outRechargeOrderService.updateOrder(outRechargeOrder);
}
@Override
public void getPrepaidRechargeApi(OutRechargeOrder outRechargeOrder) throws Exception {
JSONObject object = new JSONObject();
object.put("rechargePrice" , outRechargeOrder.getRechargePrice());
object.put("rechargeMobile" , outRechargeOrder.getRechargeContent());
object.put("productId" , outRechargeOrder.getGoodsId());
object.put("parentOrderId" , outRechargeOrder.getId());
// 判断参数是否为空
if (
object.getBigDecimal("rechargePrice") == null ||
object.getString("rechargeMobile") == null ||
object.getInteger("productId") == null ||
object.getLong("parentOrderId") == null
) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "");
}
// 定义子订单对象
OutRechargeChildOrder childOrder = new OutRechargeChildOrder();
// 补充下单参数
object = prepaidRechargeOrderHandle(object);
// 补充子订单参数
childOrder.setParentOrderId(object.getLong("parentOrderId"));
childOrder.setRechargePlatform(object.getInteger("rechargePlatform"));
childOrder.setStatus(102);
childOrder.setOrderNo("CZ" + OrderUtil.generateOrderNo());
childOrder.setUpdateTime(new Date());
childOrder.setCreateTime(new Date());
// 尖椒充值
if (object.getInteger("rechargePlatform") == 1) {
object.put("out_order_id", childOrder.getOrderNo());
object.put("amount", object.getBigDecimal("rechargePrice"));
object.put("mobile", object.getString("rechargeMobile"));
object.put("notifyUrl", CommonSysConst.getSysConfig().getJjNotifyUrl());
JSONObject returnObject = RechargeConfig.rechargeOrderByJj(object);
childOrder.setExt1(returnObject.toJSONString());
}
// 龙阅
if (object.getInteger("rechargePlatform") == 2) {
if (object.getString("code") == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "");
}
object.put("out_trade_num", childOrder.getOrderNo());
object.put("product_id", object.getString("code"));
object.put("mobile", object.getString("rechargeMobile"));
object.put("notifyUrl", CommonSysConst.getSysConfig().getLyNotifyUrl());
JSONObject returnObject = RechargeConfig.rechargeOrderByLy(object);
childOrder.setExt1(returnObject.toJSONString());
}
// 畅停充值
if (object.getInteger("rechargePlatform") == 4) {
if (object.getString("code") == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "");
}
object.put("orderid", childOrder.getOrderNo());
object.put("product_id", object.getString("code"));
object.put("phone", object.getString("rechargeMobile"));
object.put("price", object.getBigDecimal("rechargePrice"));
JSONObject returnObject = RechargeConfig.rechargeOrderByHg(object);
childOrder.setExt1(returnObject.toJSONString());
}
outRechargeChildOrderService.insertOrder(childOrder);
}
@Override
public void prepaidRechargeHandle(OutRechargeOrder outRechargeOrder){
String key = "recharge_" + outRechargeOrder.getId();
try {
// 分布式锁占坑
Boolean lock = redisTemplate.opsForValue().setIfAbsent(key, outRechargeOrder.getOrderNo());
if(Boolean.TRUE.equals(lock)) {
// 加锁成功,处理业务
// 判断订单是否可以继续充值 1:满足继续充值条件 2:订单满足退款条件 3:订单不可以退款不可以继续充值 4:订单异常 5:订单充值完成
int orderStatus = orderWhetherRecharge(outRechargeOrder);
if (orderStatus == 1) {
getPrepaidRechargeApi(outRechargeOrder);
}
if (orderStatus == 2) {
refundOrder(outRechargeOrder.getId());
}
if (orderStatus == 4) {
HighOrder highOrder = highOrderService.getOrderByOrderNo(outRechargeOrder.getOrderNo());
highOrder.setExceptionStatus(true);
highOrder.setExceptionContent("话费订单存在多条重复记录");
highOrderService.updateOrder(highOrder);
}
if (orderStatus == 5) {
completeOrder(outRechargeOrder.getId());
}
} else {
// 加锁失败,重试
Thread.sleep(100);
prepaidRechargeHandle(outRechargeOrder);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 删除key,释放锁
redisTemplate.delete(key);
}
}
@Override
public void completeOrder(Long orderId) {
OutRechargeChildOrder childOrder = outRechargeChildOrderService.findByOrderId(orderId);
// 查询充值订单
OutRechargeOrder order = outRechargeOrderService.findByOrderId(childOrder.getParentOrderId());
// 修改话费充值业务订单状态
childOrder.setStatus(101);
order.setRechargeStatus(202);
order.setPayStatus(100);
order.setFinishTime(new Date());
outRechargeOrderService.updateOrder(order);
outRechargeChildOrderService.updateOrder(childOrder);
// 修改订单状态
HighOrder highOrder = highOrderService.getOrderByOrderNo(order.getOrderNo());
if (highOrder != null) {
highOrder.setOrderStatus(OrderStatusEnum.type3.getType());
highOrder.setFinishTime(new Date());
for (HighChildOrder highChildOrder : highOrder.getHighChildOrderList()) {
highChildOrder.setChildOrderStatus(OrderChildStatus.STATUS3.getNumber());
highChildOrder.setFinishTime(new Date());
}
orderService.updateOrderData(highOrder);
}
// 推送小程序消息
new Thread(() -> {
HighUser highUser = highUserService.findByUserId(highOrder.getMemId());
WxMsgConfig.rechargedSuccess(
order.getRechargeContent() + "充值成功",
String.valueOf(order.getPayRealPrice()),
order.getOrderNo(),
order.getFinishTime(),
OrderPayType.getDataByType(order.getPayType()).getName(),
highUser.getOpenId());
}).start();
}
@Override
public void editOutRechargeOrder(HighOrder orderData , OutRechargeOrder outRechargeOrder) {
// 201:充值中 202:充值成功 203:充值失败 204:未充值
outRechargeOrder.setRechargeStatus(201);
// 101.待支付 102.已支付 100.已完成 104.已取消 105.已退款
outRechargeOrder.setPayStatus(102);
outRechargeOrder.setMemDiscountId(orderData.getMemDiscountId());
outRechargeOrder.setMemDiscountName(orderData.getMemDiscountName());
outRechargeOrder.setPayType(orderData.getPayType());
outRechargeOrder.setLaborUnionCard(orderData.getMemCardNo());
outRechargeOrder.setDiscountDeductionPrice(orderData.getDeductionCouponPrice());
outRechargeOrder.setIntegralDeductionPrice( new BigDecimal(orderData.getPayGold().toString()).divide(new BigDecimal(100)));
outRechargeOrder.setIntegralNum(new BigDecimal(orderData.getPayGold()));
outRechargeOrder.setPayPrice(orderData.getPayPrice());
outRechargeOrder.setPayRealPrice(orderData.getPayRealPrice());
outRechargeOrderService.updateOrder(outRechargeOrder);
}
@Override
public List<ApiRechargePhoneModel> getApiRechargePhoneByList(Map<String, Object> map) {
return outRechargeOrderMapper.getApiRechargePhoneByList(map);
}
@Override
public Integer getRechargeOrderLegality(OutRechargeChildOrder childOrder) throws Exception {
JSONObject object = new JSONObject();
// 龙阅
if (childOrder.getRechargePlatform() == 2) {
object.put("out_trade_nums" , childOrder.getOrderNo());
JSONObject jsonObject = RechargeConfig.checkOrderByLy(object);
JSONArray objectJSONArray = jsonObject.getJSONArray("data");
JSONObject objectData = new JSONObject();
for (Object objects : objectJSONArray) {
objectData = (JSONObject) objects;
}
if (objectData.size() == 0) {
if (jsonObject.getInteger("errno") == 0) {
return 2;
} else {
return 99;
}
} else {
// -1取消,0充值中 ,1充值成功,2充值失败,3部分成功
return objectData.getInteger("state");
}
}
// 畅停
if (childOrder.getRechargePlatform() == 4) {
object.put("orderid" , childOrder.getOrderNo());
JSONObject jsonObject = RechargeConfig.checkOrderByHg(object);
if (jsonObject.getJSONArray("data") == null) {
if (jsonObject.getInteger("code") == 20001) {
return 2;
}
return 99;
} else {
JSONArray objectJSONArray = jsonObject.getJSONArray("data");
JSONObject objectData;
for (Object objects : objectJSONArray) {
objectData = (JSONObject) objects;
// 0充值中,1成功,2失败,3已取消,4部分充值,5缓存订单
// -1取消,0充值中 ,1充值成功,2充值失败,3部分成功
if (objectData.getInteger("status") == 0 || objectData.getInteger("status") == 5) {
return 0;
} else if (objectData.getInteger("status") == 1) {
return 1;
} else if (objectData.getInteger("status") == 2) {
return 2;
} else if (objectData.getInteger("status") == 3) {
return -1;
} else if (objectData.getInteger("status") == 4) {
return 3;
}
}
}
}
return 99;
}
// 获取当前最新的充值平台
private Integer getRechargePlatformType() {
OutRechargeChildOrder outRechargeChildOrder = outRechargeChildOrderService.findOutRechargeChildOrderByDesc();
if (outRechargeChildOrder != null) {
return outRechargeChildOrder.getRechargePlatform();
}
return null;
}
/**
* @Author Sum1Dream
* @Name prepaidRechargeOrderHandle
* @Description // 充值订单下单数据操作
* @Date 18:54 2023/3/28
* @Param [object]
* @Return com.alibaba.fastjson.JSONObject
*/
private JSONObject prepaidRechargeOrderHandle(JSONObject object) {
if (object.getLong("productId") == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "产品编码为空");
}
// 查询充值产品
OutRechargePrice outRechargePrice = outRechargePriceService.findByGoodsId(object.getLong("productId"));
if (outRechargePrice == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未知产品编码");
}
// 初始化充值平台 1:尖椒 2:龙阅 3:城宇 4.畅停
Integer platformType = getRechargePlatformType();
// 截取可平台字符串
String rechargePlatformString = outRechargePrice.getRechargePlatform().substring(1,outRechargePrice.getRechargePlatform().length()-1);
String[] rechargePlatform = rechargePlatformString.split("-");
if (rechargePlatform.length == 1) {
platformType = Integer.parseInt(rechargePlatformString);
}
if (rechargePlatform.length > 1) {
// 如果平台充值记录暂无 则充值第一个
if (platformType == null) {
platformType = Integer.parseInt(rechargePlatform[0]);
} else {
// 获取上一条充值平台的下一个平台内容
platformType = Integer.parseInt(rechargePlatform[ArrayUtils.arrayIndex(rechargePlatform , String.valueOf(platformType))]);
}
}
Map<String , Object> rechargeCodeMap = new HashMap<>();
rechargeCodeMap.put("sourceId" , outRechargePrice.getId());
rechargeCodeMap.put("rechargePlatform" , platformType);
BsRechargeCode rechargeCode = rechargeCodeService.findByMap(rechargeCodeMap);
object.put("code" , rechargeCode.getGoodsId());
object.put("rechargePlatform" , platformType);
return object;
}
@Override
public Integer orderWhetherRecharge(OutRechargeOrder rechargeOrder) throws Exception {
// 查询子订单
List<OutRechargeChildOrder> childOrderList = outRechargeChildOrderService.getListRechargeChildOrderByOrderId(rechargeOrder.getId());
// 充值订单充值时间
Date rechargeTime = rechargeOrder.getCreateTimed();
Date currentTime = new Date();
int hours = (int) ((currentTime.getTime() - rechargeTime.getTime()) / (1000 * 60 * 60));
// 判断订单是否存在充值完成订单
Map<String , Object> childMap = new HashMap<>();
childMap.put("parent_order_id", rechargeOrder.getId());
childMap.put("status", 101);
List<OutRechargeChildOrder> childOrders101 = outRechargeChildOrderService.getListRechargeChildOrder(childMap);
// 判断充值成功是否存在多个 存在返回异常
if (childOrders101.size() > 1) {
return 4;
}
// 判断是否存在充值成功的订单
if (childOrders101.size() == 1) {
return 5;
}
// 查询充值中的订单
childMap.put("status", 102);
List<OutRechargeChildOrder> childOrders102 = outRechargeChildOrderService.getListRechargeChildOrder(childMap);
// 充值中的订单存在多个 返回异常
if (childOrders102.size() > 1) {
return 4;
}
// 只存在一个充值中的订单需要查询当前充值中的订单状态
if (childOrders102.size() == 1) {
// -1 取消,0充值中 ,1充值成功,2充值失败,3部分成功
Integer status = getRechargeOrderLegality(childOrders102.get(0));
if (status == 2 || status == -1) {
// 修改充值订单状态
rechargeChildOrderHandle(childOrders102.get(0) , 103);
// 如果订单记录超过5条退款 反之继续充值
if (childOrderList.size() > 4) {
return 2;
} else {
// 如果订单记录超过71小时 反之继续充值
return hours > 71 ? 2 : 1;
}
}
// 充值订单为充值成功
if (status == 1) {
// 修改充值订单状态
rechargeChildOrderHandle(childOrders102.get(0) , 101);
return 5;
}
}
// 没有充值中的订单 查询所有订单中最新的一条订单状态
if (childOrders102.size() == 0) {
// -1 取消,0充值中 ,1充值成功,2充值失败,3部分成功
Integer status = getRechargeOrderLegality(childOrderList.get(0));
if (status == 2 || status == -1) {
// 修改充值订单状态
rechargeChildOrderHandle(childOrderList.get(0) , 103);
// 如果订单记录超过5条退款 反之继续充值
if (childOrderList.size() > 4) {
return 2;
} else {
// 如果订单记录超过71小时 反之继续充值
return hours > 71 ? 2 : 1;
}
}
if (status == 1) {
// 修改充值订单状态
rechargeChildOrderHandle(childOrderList.get(0) , 101);
return 5;
}
}
return 3;
}
/**
* @Author Sum1Dream
* @Name rechargeChildOrderHandle
* @Description // 处理子订单
* @Date 18:50 2023/3/28
* @Param [rechargeChildOrder]
* @Return void
*/
private void rechargeChildOrderHandle(OutRechargeChildOrder rechargeChildOrder , Integer status) {
rechargeChildOrder.setUpdateTime(new Date());
rechargeChildOrder.setStatus(status);
outRechargeChildOrderService.updateOrder(rechargeChildOrder);
}
}