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 getListRechargeOrder(Map 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 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 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 getOrderCount(Map 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 getListOrderCount(Map 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 getUserCountList(Map 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 getApiRechargePhoneByList(Map 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 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 childOrderList = outRechargeChildOrderService.getListRechargeChildOrderByOrderId(rechargeOrder.getId()); // 充值订单充值时间 Date rechargeTime = rechargeOrder.getCreateTimed(); Date currentTime = new Date(); int hours = (int) ((currentTime.getTime() - rechargeTime.getTime()) / (1000 * 60 * 60)); // 判断订单是否存在充值完成订单 Map childMap = new HashMap<>(); childMap.put("parent_order_id", rechargeOrder.getId()); childMap.put("status", 101); List childOrders101 = outRechargeChildOrderService.getListRechargeChildOrder(childMap); // 判断充值成功是否存在多个 存在返回异常 if (childOrders101.size() > 1) { return 4; } // 判断是否存在充值成功的订单 if (childOrders101.size() == 1) { return 5; } // 查询充值中的订单 childMap.put("status", 102); List 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); } }