cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java
@@ -518,15 +518,18 @@ @PostMapping("/base/appUser/updateAppUser") public void updateAppUser(@RequestBody TAppUser appUser) { try { TAppUser appUser1 = appUserService.getById(appUser.getId()); appUserService.updateById(appUser); UserIntegralChanges userIntegralChanges = new UserIntegralChanges(); userIntegralChanges.setAppUserId(appUser.getId()); userIntegralChanges.setOldIntegral(appUser.getIntegral() + appUser.getPoints()); userIntegralChanges.setType(5); userIntegralChanges.setNewIntegral(appUser.getIntegral()); userIntegralChanges.setInsertTime(new Date()); userIntegralChanges.setCategory(2); userIntegralChangesService.save(userIntegralChanges); if(appUser.getIntegral().compareTo(appUser1.getIntegral()) != 0){ UserIntegralChanges userIntegralChanges = new UserIntegralChanges(); userIntegralChanges.setAppUserId(appUser.getId()); userIntegralChanges.setOldIntegral(appUser1.getIntegral()); userIntegralChanges.setType(5); userIntegralChanges.setNewIntegral(appUser.getIntegral()); userIntegralChanges.setInsertTime(new Date()); userIntegralChanges.setCategory(2); userIntegralChangesService.save(userIntegralChanges); } } catch (Exception e) { e.printStackTrace(); cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java
@@ -152,7 +152,7 @@ String out_trade_no = map.get("out_trade_no"); String transaction_id = map.get("transaction_id"); String result = map.get("result"); ResultUtil resultUtil = tappService.exchangeAddPaymentCallback(out_trade_no, transaction_id, 1); ResultUtil resultUtil = tappService.exchangeAddPaymentCallback(out_trade_no, transaction_id); if (resultUtil.getCode() == 200) { PrintWriter out = response.getWriter(); out.write(result); @@ -180,7 +180,7 @@ if (null != map) { String out_trade_no = map.get("out_trade_no"); String trade_no = map.get("trade_no"); ResultUtil resultUtil = tappService.exchangeAddPaymentCallback(out_trade_no, trade_no, 2); ResultUtil resultUtil = tappService.exchangeAddPaymentCallback(out_trade_no, trade_no); if (resultUtil.getCode() == 200) { PrintWriter out = response.getWriter(); out.write("success"); cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/UserPointsMerchandise.java
@@ -7,6 +7,7 @@ import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; /** @@ -63,22 +64,23 @@ * 领取时间 */ @TableField("insertTime") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date insertTime; /** * 现金支付方式(1=微信2支付宝) * 现金支付方式(1=积分兑换,2=积分+现金) */ @TableField("payType") private Integer payType; /** * 商品数量 */ @TableField("goodsNumber") private Integer goodsNumber; /** * code */ @TableField("code") private String code; /** * orderNumber */ @TableField("orderNumber") private String orderNumber; /** * 现金的支付状态 */ @@ -94,6 +96,31 @@ */ @TableField("state") private Integer state; /** * 积分支付数量 */ @TableField("integral") private Integer integral; /** * 现金支付金额 */ @TableField("cash") private BigDecimal cash; /** * 现金支付方式(1=微信,2=支付宝) */ @TableField("cashPayType") private Integer cashPayType; /** * 第三方支付流水号 */ @TableField("orderNumber") private String orderNumber; /** * 支付时间 */ @TableField("paymentTime") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date paymentTime; } cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java
@@ -63,7 +63,7 @@ void updatePaymentCoursePackage(@RequestBody TCoursePackagePayment coursePackagePayment); @PostMapping("/base/coursePack/savePaymentCoursePackage") public boolean savePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment); Long savePaymentCoursePackage(@RequestBody CoursePackageOrder coursePackageOrder); @PostMapping("/base/coursePack/orderClass") @@ -96,4 +96,22 @@ // Integer getClassHour(Integer courseConfigId); @PostMapping("/course/addCoursePackageOrderStudent") void addCoursePackageOrderStudent(@RequestBody AddCoursePackageOrderStudent addCoursePackageOrderStudent); @PostMapping("/course/getCoursePackageOrderByCode") CoursePackageOrder getCoursePackageOrderByCode(@RequestBody String code); @PostMapping("/course/updateCoursePackageOrder") void updateCoursePackageOrder(@RequestBody CoursePackageOrder coursePackageOrder); @PostMapping("/course/getCoursePackagePaymentConfig") CoursePackagePaymentConfig getCoursePackagePaymentConfig(@RequestBody GetCoursePackagePaymentConfig getCoursePackagePaymentConfig); @PostMapping("/base/coursePack/getCoursePackageOrder") List<CoursePackageOrder> getCoursePackageOrder(@RequestBody BillingDataRequestVo requestVo); } cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/AddCoursePackageOrderStudent.java
New file @@ -0,0 +1,19 @@ package com.dsh.account.feignclient.course.model; import lombok.Data; /** * @author zhibing.pu * @date 2024/3/19 14:32 */ @Data public class AddCoursePackageOrderStudent { /** * 购买记录id */ private Long coursePackageOrderId; /** * 课包配置 */ private CoursePackagePaymentConfig coursePackagePaymentConfig; } cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/CoursePackageOrder.java
New file @@ -0,0 +1,105 @@ package com.dsh.account.feignclient.course.model; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.math.BigDecimal; import java.util.Date; /** * @author zhibing.pu * @Date 2023/11/25 11:45 */ @Data public class CoursePackageOrder { /** * 主键 */ private Long id; /** * 业务编号 */ private String code; /** * 用户id */ private Integer appUserId; /** * 学员ids */ private String studentIds; /** * 课包id */ private Integer coursePackageId; /** * 支付方式(1=微信,2=支付宝,3=玩湃币,4=积分,5=积分+微信,6=积分+支付宝) */ private Integer payType; /** * 课时数 */ private Integer classHours; /** * 原价 */ private Double originalPrice; /** * 优惠券id */ private Long userCouponId; /** * 现金支付价格 */ private BigDecimal cashPayment; /** * 玩湃币价格/积分 */ private Integer playPaiCoin; /** * 支付用户类型(1=用户,2=管理员) */ private Integer payUserType; /** * 支付状态(1=待支付,2=已支付) */ private Integer payStatus; /** * 第三方支付流水号 */ private String orderNumber; /** * 支付用户id */ private Integer payUserId; /** * 课程状态(1=正常,2=已退课) */ private Integer status; /** * 状态(1=正常,2=冻结,3=删除) */ private Integer state; /** * 添加时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date insertTime; /** * 平台手动支付时使用 */ private String payUserName; /** * 销售人员(线下购课添加购课订单时使用) */ private String salesName; /** * 订单类型(1=购买订单,2=积分商品兑换订单) */ @TableField("orderType") private Integer orderType; @TableField(exist = false) private Integer type; } cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/GetCoursePackagePaymentConfig.java
New file @@ -0,0 +1,15 @@ package com.dsh.account.feignclient.course.model; import lombok.Data; /** * @author zhibing.pu * @date 2024/3/19 15:32 */ @Data public class GetCoursePackagePaymentConfig { private Integer coursePackageId; private Integer classHours; } cloud-server-account/src/main/java/com/dsh/account/model/BillingRequest.java
@@ -18,4 +18,6 @@ * 金额 */ private double amount; private Long dateTime; } cloud-server-account/src/main/java/com/dsh/account/model/BillingRequestOfType.java
@@ -24,4 +24,6 @@ private String time1; private Long dateTime; } cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ConsumeDetail.java
@@ -19,4 +19,8 @@ @ApiModelProperty(value = "1充值 2扣除") private Integer type; private Long time; private Long dateTime; } cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java
@@ -161,7 +161,7 @@ ResultUtil exchangeAddPaymentCallback(String code, String orderNumber, Integer payType); ResultUtil exchangeAddPaymentCallback(String code, String orderNumber); List<StoreResponse> queryStoresOfExchange(Integer goodsType, Integer pointsMerId); cloud-server-account/src/main/java/com/dsh/account/service/UserIntegralChangesService.java
@@ -31,7 +31,7 @@ * @param vo * @throws Exception */ void saveUserIntegralChanges(SaveUserIntegralChangesVo vo) throws Exception; void saveUserIntegralChanges(SaveUserIntegralChangesVo vo); List<ExchangeDetailsResponse> queryExchangeGoodsdetails(Integer userIdFormRedis, Integer useType, Integer goodType); cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
@@ -50,6 +50,7 @@ import com.dsh.account.service.IRefereeService; import com.dsh.account.service.TAppGiftService; import com.dsh.account.service.TAppUserService; import com.dsh.account.service.UserIntegralChangesService; import com.dsh.account.util.*; import com.dsh.account.util.akeylogin.Md5Util; import com.dsh.account.vo.GroupCityInfoVO; @@ -151,13 +152,14 @@ @Resource private SiteClient stClient; @Autowired @Resource private TAppUserMapper appUserMapper; @Autowired private TAppGiftService appGiftService; @Autowired @Resource private IntroduceRewardsClient introduceRewardsClient; private String aliAppid = "2021004105665036";//支付宝appid @@ -185,6 +187,9 @@ @Resource private WorldCupPaymentClinet worldCupPaymentClinet; @Autowired private UserIntegralChangesService userIntegralChangesService; @@ -813,6 +818,7 @@ consumeDetail.setConsumeTime(paymentCompetition.getTime()); consumeDetail.setConsumeAmount("-" + paymentCompetition.getAmount()); consumeDetail.setType(2); consumeDetail.setDateTime(paymentCompetition.getDateTime()); details.add(consumeDetail); } } @@ -825,37 +831,21 @@ consumeDetail.setConsumeTime(paymentCompetition.getTime()); consumeDetail.setConsumeAmount("+" + paymentCompetition.getAmount()); consumeDetail.setType(1); consumeDetail.setDateTime(paymentCompetition.getDateTime()); details.add(consumeDetail); } } // 3.课包购买 // BillingRequestVo amountPayRecord = paymentClient.getAmountPayRecord(requestVo); // if (ToolUtil.isNotEmpty(amountPayRecord.getRequests())){ // for (BillingRequest coursePackagePayment : amountPayRecord.getRequests()) { // ConsumeDetail consumeDetail = new ConsumeDetail(); // consumeDetail.setConsumeName(RechargeRecordEnum.COURSE_PACKAGE_PURCHASE.getMsg()); // consumeDetail.setConsumeTime(coursePackagePayment.getTime()); // consumeDetail.setConsumeAmount("-" + coursePackagePayment.getAmount()); // consumeDetail.setType(2); // details.add(consumeDetail); // } // } //2.0 List<CourseCounsum> courseCounsums = paymentClient.getConsumes(requestVo); //3.课包购买 List<CoursePackageOrder> coursePackageOrder = paymentClient.getCoursePackageOrder(requestVo); for (CourseCounsum courseCounsum : courseCounsums) { for (CoursePackageOrder order : coursePackageOrder) { ConsumeDetail consumeDetail = new ConsumeDetail(); String[] split = courseCounsum.getReason().split(";"); consumeDetail.setConsumeName(split[0]); consumeDetail.setConsumeTime(simpleDateFormat.format(courseCounsum.getInsertTime())); // if (courseCounsum.getChangeType()==3){ consumeDetail.setConsumeAmount("-" + split[1]); consumeDetail.setConsumeName("课程报名"); consumeDetail.setConsumeTime(simpleDateFormat.format(order.getInsertTime())); consumeDetail.setConsumeAmount("-" + order.getCashPayment()); consumeDetail.setType(2); // } // // consumeDetail.setConsumeAmount("-" + coursePackagePayment.getAmount()); // consumeDetail.setType(2); consumeDetail.setDateTime(order.getInsertTime().getTime()); details.add(consumeDetail); } @@ -870,23 +860,25 @@ consumeDetail.setConsumeAmount("-" + booking.getAmount()); consumeDetail.setConsumeTime(booking.getTime()); consumeDetail.setType(2); consumeDetail.setDateTime(booking.getDateTime()); details.add(consumeDetail); } else { ConsumeDetail consumeDetail1 = new ConsumeDetail(); consumeDetail1.setConsumeName(RechargeRecordEnum.CANCEL_VENUE_RESERVATION.getMsg()); consumeDetail1.setConsumeAmount("+" + booking.getAmount()); consumeDetail1.setConsumeTime(booking.getTime()); consumeDetail1.setDateTime(booking.getDateTime()); consumeDetail1.setType(1); details.add(consumeDetail1); ConsumeDetail consumeDetail2 = new ConsumeDetail(); consumeDetail2.setConsumeName(RechargeRecordEnum.VENUE_RESERVATION.getMsg()); consumeDetail2.setConsumeAmount("-" + booking.getAmount()); consumeDetail2.setConsumeTime(booking.getTime1()); consumeDetail2.setType(2); consumeDetail2.setDateTime(booking.getDateTime()); details.add(consumeDetail2); } // details.add(consumeDetail); } } @@ -903,6 +895,7 @@ consumeDetail.setConsumeTime(simpleDateFormat.format(vipPayment.getInsertTime())); consumeDetail.setConsumeAmount("-" + vipPayment.getAmount()); consumeDetail.setType(2); consumeDetail.setDateTime(vipPayment.getPayTime().getTime()); details.add(consumeDetail); } } @@ -918,6 +911,7 @@ consumeDetail.setConsumeTime(simpleDateFormat.format(rechargeRecord.getInsertTime())); consumeDetail.setConsumeAmount("-" + rechargeRecord.getAmount()); consumeDetail.setType(2); consumeDetail.setDateTime(rechargeRecord.getPayTime().getTime()); details.add(consumeDetail); } } @@ -927,31 +921,6 @@ List<ConsumeDetail> consumeDetails = mcClient.getConsumeDetails(requestVo); details.addAll(consumeDetails); if (details.size() > 0) { Collections.sort(details, new Comparator<ConsumeDetail>() { @Override public int compare(ConsumeDetail record1, ConsumeDetail record2) { SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm"); Date date1 = null; Date date2 = null; try { date1 = dateFormat.parse(record1.getConsumeTime()); date2 = dateFormat.parse(record2.getConsumeTime()); } catch (ParseException e) { e.printStackTrace(); } // 倒序排序 return date2.compareTo(date1); } }); if (ToolUtil.isNotEmpty(recordId)) { details = details.stream() .filter(response -> Objects.equals(response.getType(), recordId)) .collect(Collectors.toList()); } } //世界杯 GetWorldCupPayment getWorldCupPayment = new GetWorldCupPayment(); @@ -967,6 +936,7 @@ consumeDetail.setConsumeTime(simpleDateFormat.format(cupPayment.getCreateTime())); consumeDetail.setConsumeAmount("-" + cupPayment.getAmount()); consumeDetail.setType(2); consumeDetail.setDateTime(cupPayment.getPayTime().getTime()); details.add(consumeDetail); }else{ consumeDetail = new ConsumeDetail(); @@ -974,6 +944,7 @@ consumeDetail.setConsumeTime(simpleDateFormat.format(cupPayment.getCreateTime())); consumeDetail.setConsumeAmount("-" + cupPayment.getAmount()); consumeDetail.setType(2); consumeDetail.setDateTime(cupPayment.getPayTime().getTime()); details.add(consumeDetail); consumeDetail = new ConsumeDetail(); @@ -981,7 +952,23 @@ consumeDetail.setConsumeTime(simpleDateFormat.format(cupPayment.getCreateTime())); consumeDetail.setConsumeAmount("+" + cupPayment.getRefundAmount()); consumeDetail.setType(1); consumeDetail.setDateTime(cupPayment.getRefundTime().getTime()); details.add(consumeDetail); } } if (details.size() > 0) { Collections.sort(details, new Comparator<ConsumeDetail>() { @Override public int compare(ConsumeDetail record1, ConsumeDetail record2) { return record1.getDateTime().compareTo(record2.getDateTime()) * -1; } }); if (ToolUtil.isNotEmpty(recordId)) { details = details.stream() .filter(response -> Objects.equals(response.getType(), recordId)) .collect(Collectors.toList()); } } @@ -1487,118 +1474,136 @@ return ResultUtil.error("超过发放数量"); } for (int i = 0; i < goodsNums; i++) { // 新增积分商品兑换记录 UserPointsMerchandise pointsMerchandise = new UserPointsMerchandise(); pointsMerchandise.setPointsMerchandiseId(exchangeType.getGoodId()); pointsMerchandise.setUserId(userIdFormRedis); if (exchangeType.getGoodsType() == 2) { pointsMerchandise.setStatus(2); pointsMerchandise.setVerificationTime(new Date()); } else { pointsMerchandise.setStatus(1); } pointsMerchandise.setState(1); if (exchangeType.getExchangeType() == 1) { pointsMerchandise.setPayStatus(2); } else { pointsMerchandise.setPayStatus(1); } if (merchandise.getUseScope() == 3) { if (exchangeType.getGoodsType() == 2) { CoursePackage coursePackage = cpageClient.queryCoursePackageById(merchandise.getCoursePackageId()); pointsMerchandise.setStoreId(coursePackage.getStoreId()); } else { pointsMerchandise.setStoreId(exchangeType.getStoreId()); } } pointsMerchandise.setCode(code); pointsMerchandise.setInsertTime(new Date()); returnId = mcClient.saveDetailsUserPointMercase(pointsMerchandise); //新增积分商品兑换记录 UserPointsMerchandise pointsMerchandise = new UserPointsMerchandise(); pointsMerchandise.setPointsMerchandiseId(exchangeType.getGoodId()); pointsMerchandise.setUserId(userIdFormRedis); pointsMerchandise.setGoodsNumber(goodsNums); if (exchangeType.getGoodsType() == 2) { pointsMerchandise.setStatus(2); pointsMerchandise.setVerificationTime(new Date()); } else { pointsMerchandise.setStatus(1); } pointsMerchandise.setState(1); if (exchangeType.getExchangeType() == 1) { pointsMerchandise.setPayStatus(2); pointsMerchandise.setPaymentTime(new Date()); } else { pointsMerchandise.setPayStatus(1); } if (merchandise.getUseScope() == 3) { if (exchangeType.getGoodsType() == 2) { CoursePackage coursePackage = cpageClient.queryCoursePackageById(merchandise.getCoursePackageId()); pointsMerchandise.setStoreId(coursePackage.getStoreId()); } else { pointsMerchandise.setStoreId(exchangeType.getStoreId()); } } pointsMerchandise.setCode(code); pointsMerchandise.setInsertTime(new Date()); pointsMerchandise.setPayType(exchangeType.getExchangeType()); pointsMerchandise.setIntegral(merchandise.getIntegral() * goodsNums); if(exchangeType.getExchangeType() == 2){ pointsMerchandise.setCash(merchandise.getCash()); pointsMerchandise.setCashPayType(exchangeType.getPayType()); } returnId = mcClient.saveDetailsUserPointMercase(pointsMerchandise); switch (exchangeType.getExchangeType()) { // 积分 case 1: boolean b = true; for (int i = 0; i < goodsNums; i++) { b = dealAppUserIntegral(userIdFormRedis, tAppUser, merchandise.getIntegral()); boolean b = dealAppUserIntegral(userIdFormRedis, tAppUser, merchandise.getIntegral() * goodsNums); if (b) switch (exchangeType.getGoodsType()) { case 2: code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); List<CoursePackagePaymentConfig> courseConfigList = cpconClient.getCourseConfigList(merchandise.getCoursePackageId()); CoursePackageOrder coursePackageOrder = new CoursePackageOrder(); coursePackageOrder.setCode(code); coursePackageOrder.setAppUserId(userIdFormRedis); String ids = exchangeType.getStuIds().stream().map(s -> { return String.valueOf(s); }).collect(Collectors.joining(";")); coursePackageOrder.setStudentIds(ids); coursePackageOrder.setCoursePackageId(merchandise.getCoursePackageId()); coursePackageOrder.setPayType(4); CoursePackagePaymentConfig config = null; for (CoursePackagePaymentConfig coursePackagePaymentConfig : courseConfigList) { if (coursePackagePaymentConfig.getId().compareTo(merchandise.getCoursePackageConfigId()) == 0) { coursePackageOrder.setClassHours(coursePackagePaymentConfig.getClassHours()); coursePackageOrder.setOriginalPrice(coursePackagePaymentConfig.getCashPayment()); config = coursePackagePaymentConfig; break; } } coursePackageOrder.setPlayPaiCoin(merchandise.getIntegral()); coursePackageOrder.setPayUserType(1); coursePackageOrder.setPayStatus(2); coursePackageOrder.setPayUserId(userIdFormRedis); coursePackageOrder.setStatus(1); coursePackageOrder.setState(1); coursePackageOrder.setInsertTime(new Date()); coursePackageOrder.setOrderType(2); Long coursePackageOrderId = paymentClient.savePaymentCoursePackage(coursePackageOrder); AddCoursePackageOrderStudent addCoursePackageOrderStudent = new AddCoursePackageOrderStudent(); addCoursePackageOrderStudent.setCoursePackageOrderId(coursePackageOrderId); addCoursePackageOrderStudent.setCoursePackagePaymentConfig(config); paymentClient.addCoursePackageOrderStudent(addCoursePackageOrderStudent); break; case 4: for (int i = 0; i < goodsNums; i++) { UserCoupon coupon = new UserCoupon(); coupon.setCouponId(exchangeType.getGoodId()); coupon.setUserId(userIdFormRedis); coupon.setStatus(1); coupon.setInsertTime(new Date()); ucponClient.insertToAppuserCoupon(coupon); } break; default: break; } if (b) { switch (exchangeType.getGoodsType()) { case 2: Integer stuNums = 0; if (ToolUtil.isNotEmpty(exchangeType.getStuIds())) { stuNums = exchangeType.getStuIds().size(); } else { stuNums = 1; } for (int i = 0; i < stuNums; i++) { List<CoursePackagePaymentConfig> courseConfigList = cpconClient.getCourseConfigList(merchandise.getCoursePackageId()); TCoursePackagePayment packagePayment = new TCoursePackagePayment(); packagePayment.setAppUserId(userIdFormRedis); packagePayment.setStudentId(exchangeType.getStuIds().get(i)); packagePayment.setCoursePackageId(merchandise.getCoursePackageId()); for (CoursePackagePaymentConfig coursePackagePaymentConfig : courseConfigList) { if (Objects.equals(coursePackagePaymentConfig.getId(), merchandise.getCoursePackageConfigId())) { packagePayment.setClassHours(coursePackagePaymentConfig.getClassHours()); packagePayment.setTotalClassHours(coursePackagePaymentConfig.getClassHours()); packagePayment.setLaveClassHours(coursePackagePaymentConfig.getClassHours()); packagePayment.setOriginalPrice(coursePackagePaymentConfig.getCashPayment()); break; } } packagePayment.setPlayPaiCoin(merchandise.getIntegral()); packagePayment.setAbsencesNumber(0); packagePayment.setPayUserType(1); packagePayment.setPayStatus(2); packagePayment.setPayUserId(userIdFormRedis); packagePayment.setStatus(1); packagePayment.setState(1); packagePayment.setCode(code); packagePayment.setInsertTime(new Date()); // paymentClient.savePaymentCoursePackage(packagePayment); OrderDto orderDto = new OrderDto(); orderDto.setAppUserId(userIdFormRedis); String joinedString = String.join(",", exchangeType.getStuIds().stream().map(Object::toString).collect(Collectors.toList())); orderDto.setStuIds(joinedString); orderDto.setClassId(merchandise.getCoursePackageId()); orderDto.setClassHours(packagePayment.getClassHours()); paymentClient.orderClass(orderDto); } break; case 4: for (int i = 0; i < goodsNums; i++) { UserCoupon coupon = new UserCoupon(); coupon.setCouponId(exchangeType.getGoodId()); coupon.setUserId(userIdFormRedis); coupon.setStatus(1); coupon.setInsertTime(new Date()); ucponClient.insertToAppuserCoupon(coupon); } break; default: break; } } else { else { return ResultUtil.error("用户积分不足!"); } break; case 2: // 积分+现金 boolean dealt = true; for (int i = 0; i < goodsNums; i++) { dealt = dealAppUserIntegral(userIdFormRedis, tAppUser, merchandise.getIntegral()); } switch (exchangeType.getPayType()) { case 1: try { if (merchandise.getType() == 2) { List<CoursePackagePaymentConfig> courseConfigList = cpconClient.getCourseConfigList(merchandise.getCoursePackageId()); CoursePackageOrder coursePackageOrder = new CoursePackageOrder(); coursePackageOrder.setCode(code); coursePackageOrder.setAppUserId(userIdFormRedis); String ids = exchangeType.getStuIds().stream().map(s -> { return String.valueOf(s); }).collect(Collectors.joining(";")); coursePackageOrder.setStudentIds(ids); coursePackageOrder.setCoursePackageId(merchandise.getCoursePackageId()); coursePackageOrder.setPayType(5); CoursePackagePaymentConfig config = null; for (CoursePackagePaymentConfig coursePackagePaymentConfig : courseConfigList) { if (coursePackagePaymentConfig.getId().compareTo(merchandise.getCoursePackageConfigId()) == 0) { coursePackageOrder.setClassHours(coursePackagePaymentConfig.getClassHours()); coursePackageOrder.setOriginalPrice(coursePackagePaymentConfig.getCashPayment()); break; } } coursePackageOrder.setCashPayment(merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size()))); coursePackageOrder.setPlayPaiCoin(merchandise.getIntegral() * exchangeType.getStuIds().size()); coursePackageOrder.setPayUserType(1); coursePackageOrder.setPayStatus(1); coursePackageOrder.setPayUserId(userIdFormRedis); coursePackageOrder.setStatus(1); coursePackageOrder.setState(1); coursePackageOrder.setInsertTime(new Date()); coursePackageOrder.setOrderType(2); paymentClient.savePaymentCoursePackage(coursePackageOrder); return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size())), code); } else { return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(goodsNums)), code); @@ -1662,7 +1667,8 @@ public ResultUtil weChatPaymentCoupon(String body, UserCouponPayment userCouponPayment) throws Exception { String code = userCouponPayment.getCode(); Double cash = userCouponPayment.getCash(); ResultUtil weixinpay = payMoneyUtil.weixinpay(body, "", code, cash.toString(), "/base/coupon/weChatPaymentCouponCallback", "APP", ""); ResultUtil weixinpay = payMoneyUtil.weixinpay(body, "", code, cash.toString(), "/base/coupon/weChatPaymentCouponCallback", "APP", ""); if (weixinpay.getCode() == 200) { new Thread(new Runnable() { @Override @@ -1692,7 +1698,7 @@ Map<String, String> data1 = resultUtil.getData(); String s = data1.get("trade_state"); String transaction_id = data1.get("transaction_id"); if ("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { //有待支付的订单,这里不处理 userCouponPayment1.setStatus(-1); userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1); @@ -1719,7 +1725,7 @@ } break; } if ("USERPAYING".equals(s)) { if ("USERPAYING".equals(s) || "NOTPAY".equals(s)) { num++; } } @@ -1745,7 +1751,8 @@ String code = userCouponPayment.getCode(); Double cash = userCouponPayment.getCash(); ResultUtil alipay = payMoneyUtil.alipay(smid, body, "",String.valueOf(userCouponPayment.getId()), code, cash.toString(), "/base/coupon/aliPaymentCouponCallback"); ResultUtil alipay = payMoneyUtil.alipay(smid, body, "",String.valueOf(userCouponPayment.getId()), code, cash.toString(), "/base/coupon/aliPaymentCouponCallback"); if (alipay.getCode() == 200) { new Thread(new Runnable() { @Override @@ -1846,9 +1853,13 @@ if(null != userCouponPayment1.getIntegral() && 0 != userCouponPayment1.getIntegral()){ //扣积分 TAppUser user = appUserService.getById(userCouponPayment1.getUserId()); user.setIntegral(user.getIntegral() - userCouponPayment1.getIntegral().intValue()); appUserService.updateById(user); SaveUserIntegralChangesVo vo = new SaveUserIntegralChangesVo(); vo.setAppUserId(userCouponPayment1.getUserId()); vo.setIntegral(userCouponPayment1.getIntegral().intValue() * -1); vo.setRemark("兑换优惠券"); vo.setType(2); userIntegralChangesService.saveUserIntegralChanges(vo); } return ResultUtil.success(); } @@ -2058,12 +2069,12 @@ int min = 5000; wait += (min * num); Thread.sleep(wait); List<UserPointsMerchandise> userPointsMerchandises = mcClient.queryUserPointMerchaseByCode(code); if (userPointsMerchandises.get(0).getPayStatus() == 2) { UserPointsMerchandise userPointsMerchandise = mcClient.queryUserPointMerchaseByCode(code).get(0); if (userPointsMerchandise.getPayStatus() == 2) { break; } ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, ""); if (resultUtil.getCode() == 200 && userPointsMerchandises.get(0).getPayStatus() == 1) { if (resultUtil.getCode() == 200 && userPointsMerchandise.getPayStatus() == 1) { /** * SUCCESS—支付成功, * REFUND—转入退款, @@ -2076,20 +2087,42 @@ Map<String, String> data1 = resultUtil.getData(); String s = data1.get("trade_state"); String transaction_id = data1.get("transaction_id"); if ("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { mcClient.deletePaymentRecord(code); break; } if ("SUCCESS".equals(s)) { for (UserPointsMerchandise userPointsMerchandise : userPointsMerchandises) { userPointsMerchandise.setPayStatus(2); userPointsMerchandise.setOrderNumber(transaction_id); userPointsMerchandise.setPayType(1); mcClient.updateDetailsUserPointMercase(userPointsMerchandise); userPointsMerchandise.setPayStatus(2); userPointsMerchandise.setOrderNumber(transaction_id); userPointsMerchandise.setPayType(1); mcClient.updateDetailsUserPointMercase(userPointsMerchandise); TAppUser tAppUser = baseMapper.selectById(userPointsMerchandise.getUserId()); dealAppUserIntegral(userPointsMerchandise.getUserId(), tAppUser, userPointsMerchandise.getIntegral()); //课程 if(type == 2){ CoursePackageOrder coursePackageOrder1 = paymentClient.getCoursePackageOrderByCode(code); if(null != coursePackageOrder1){ coursePackageOrder1.setPayStatus(2); coursePackageOrder1.setOrderNumber(transaction_id); coursePackageOrder1.setAppUserId(null); paymentClient.updateCoursePackageOrder(coursePackageOrder1); GetCoursePackagePaymentConfig getCoursePackagePaymentConfig = new GetCoursePackagePaymentConfig(); getCoursePackagePaymentConfig.setCoursePackageId(coursePackageOrder1.getCoursePackageId()); getCoursePackagePaymentConfig.setClassHours(coursePackageOrder1.getClassHours()); CoursePackagePaymentConfig coursePackagePaymentConfig = paymentClient.getCoursePackagePaymentConfig(getCoursePackagePaymentConfig); AddCoursePackageOrderStudent addCoursePackageOrderStudent = new AddCoursePackageOrderStudent(); addCoursePackageOrderStudent.setCoursePackageOrderId(coursePackageOrder1.getId()); addCoursePackageOrderStudent.setCoursePackagePaymentConfig(coursePackagePaymentConfig); paymentClient.addCoursePackageOrderStudent(addCoursePackageOrderStudent); } } break; } if ("USERPAYING".equals(s)) { if ("USERPAYING".equals(s) || "NOTPAY".equals(s)) { num++; } } @@ -2104,75 +2137,43 @@ } @Override public ResultUtil exchangeAddPaymentCallback(String code, String orderNumber, Integer payType) { List<UserPointsMerchandise> userPointsMerchandises = mcClient.queryUserPointMerchaseByCode(code); if (userPointsMerchandises.get(0).getPayStatus() == 2) { public ResultUtil exchangeAddPaymentCallback(String code, String orderNumber) { UserPointsMerchandise userPointsMerchandise = mcClient.queryUserPointMerchaseByCode(code).get(0); if (userPointsMerchandise.getPayStatus() == 2) { return ResultUtil.success(); } if (userPointsMerchandises.size() > 1) { for (int i = 0; i < userPointsMerchandises.size(); i++) { userPointsMerchandises.get(i).setOrderNumber(orderNumber + "-" + (i + 1)); userPointsMerchandises.get(i).setPayType(payType); userPointsMerchandises.get(i).setPayStatus(2); mcClient.updateDetailsUserPointMercase(userPointsMerchandises.get(i)); Integer pointsMerchandiseId = userPointsMerchandises.get(i).getPointsMerchandiseId(); PointsMerchandise pointsMerchandise = mcClient.selectPointsMerchandiseById(pointsMerchandiseId); switch (pointsMerchandise.getType()) { case 2: List<TCoursePackagePayment> coursePackagePaymentOfCode = paymentClient.getCoursePackagePaymentOfCode(code); for (TCoursePackagePayment coursePackagePayment : coursePackagePaymentOfCode) { coursePackagePayment.setPayStatus(2); coursePackagePayment.setPayType(payType); coursePackagePayment.setOrderNumber(orderNumber); coursePackagePayment.setCashPayment(pointsMerchandise.getCash()); paymentClient.updatePaymentCoursePackage(coursePackagePayment); } break; case 4: UserCoupon coupon = new UserCoupon(); coupon.setCouponId(userPointsMerchandises.get(0).getPointsMerchandiseId()); coupon.setUserId(userPointsMerchandises.get(0).getUserId()); coupon.setStatus(1); coupon.setInsertTime(new Date()); ucponClient.insertToAppuserCoupon(coupon); break; default: break; } userPointsMerchandise.setOrderNumber(orderNumber); userPointsMerchandise.setPayStatus(2); userPointsMerchandise.setPaymentTime(new Date()); mcClient.updateDetailsUserPointMercase(userPointsMerchandise); TAppUser tAppUser = baseMapper.selectById(userPointsMerchandise.getUserId()); dealAppUserIntegral(userPointsMerchandise.getUserId(), tAppUser, userPointsMerchandise.getIntegral()); Integer pointsMerchandiseId = userPointsMerchandise.getPointsMerchandiseId(); PointsMerchandise pointsMerchandise = mcClient.selectPointsMerchandiseById(pointsMerchandiseId); if(pointsMerchandise.getType() == 2){ //课程 CoursePackageOrder coursePackageOrder1 = paymentClient.getCoursePackageOrderByCode(code); if(null != coursePackageOrder1){ coursePackageOrder1.setPayStatus(2); coursePackageOrder1.setOrderNumber(orderNumber); coursePackageOrder1.setAppUserId(null); paymentClient.updateCoursePackageOrder(coursePackageOrder1); GetCoursePackagePaymentConfig getCoursePackagePaymentConfig = new GetCoursePackagePaymentConfig(); getCoursePackagePaymentConfig.setCoursePackageId(coursePackageOrder1.getCoursePackageId()); getCoursePackagePaymentConfig.setClassHours(coursePackageOrder1.getClassHours()); CoursePackagePaymentConfig coursePackagePaymentConfig = paymentClient.getCoursePackagePaymentConfig(getCoursePackagePaymentConfig); AddCoursePackageOrderStudent addCoursePackageOrderStudent = new AddCoursePackageOrderStudent(); addCoursePackageOrderStudent.setCoursePackageOrderId(coursePackageOrder1.getId()); addCoursePackageOrderStudent.setCoursePackagePaymentConfig(coursePackagePaymentConfig); paymentClient.addCoursePackageOrderStudent(addCoursePackageOrderStudent); } } else { userPointsMerchandises.get(0).setOrderNumber(orderNumber); userPointsMerchandises.get(0).setPayType(payType); userPointsMerchandises.get(0).setPayStatus(2); mcClient.updateDetailsUserPointMercase(userPointsMerchandises.get(0)); Integer pointsMerchandiseId = userPointsMerchandises.get(0).getPointsMerchandiseId(); PointsMerchandise pointsMerchandise = mcClient.selectPointsMerchandiseById(pointsMerchandiseId); switch (pointsMerchandise.getType()) { case 2: List<TCoursePackagePayment> coursePackagePaymentOfCode = paymentClient.getCoursePackagePaymentOfCode(code); TCoursePackagePayment packagePayment = coursePackagePaymentOfCode.get(0); packagePayment.setPayStatus(2); packagePayment.setPayType(payType); packagePayment.setOrderNumber(orderNumber); packagePayment.setCashPayment(pointsMerchandise.getCash()); paymentClient.updatePaymentCoursePackage(packagePayment); break; case 4: UserCoupon coupon = new UserCoupon(); coupon.setCouponId(userPointsMerchandises.get(0).getPointsMerchandiseId()); coupon.setUserId(userPointsMerchandises.get(0).getUserId()); coupon.setStatus(1); coupon.setInsertTime(new Date()); ucponClient.insertToAppuserCoupon(coupon); break; default: break; } } return ResultUtil.success(); } cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java
@@ -387,7 +387,7 @@ packagePayment.setStatus(1); packagePayment.setState(1); packagePayment.setInsertTime(new Date()); couPayClient.savePaymentCoursePackage(packagePayment); // couPayClient.savePaymentCoursePackage(packagePayment); Integer hour = couPayClient.getClassHour(request.getCourseConfigId()); @@ -451,7 +451,7 @@ Map<String, String> data1 = resultUtil.getData(); String s = data1.get("trade_state"); String transaction_id = data1.get("transaction_id"); if ("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { coursePackagePayment.setState(3); couPayClient.delPaymentCoursePackage(coursePackagePayment.getId()); break; @@ -464,7 +464,7 @@ couPayClient.updatePaymentCoursePackage(coursePackagePayment); break; } if ("USERPAYING".equals(s)) { if ("USERPAYING".equals(s) || "NOTPAY".equals(s)) { num++; } } cloud-server-account/src/main/java/com/dsh/account/service/impl/UserIntegralChangesServiceImpl.java
@@ -95,12 +95,12 @@ detail.setDetailsType(1); break; case 6: detail.setConsumeAmount("" + (userIntegralChange.getNewIntegral() - userIntegralChange.getOldIntegral())); detail.setConsumeAmount("+" + (userIntegralChange.getNewIntegral() - userIntegralChange.getOldIntegral())); detail.setConsumeName("参与社区世界杯"); detail.setDetailsType(2); break; case 7: detail.setConsumeAmount("" + (userIntegralChange.getNewIntegral() - userIntegralChange.getOldIntegral())); detail.setConsumeAmount("+" + (userIntegralChange.getNewIntegral() - userIntegralChange.getOldIntegral())); detail.setConsumeName("社区世界杯获胜"); detail.setDetailsType(2); break; @@ -133,7 +133,7 @@ * @throws Exception */ @Override public void saveUserIntegralChanges(SaveUserIntegralChangesVo vo) throws Exception { public void saveUserIntegralChanges(SaveUserIntegralChangesVo vo) { TAppUser appUser = tauMapper.selectById(vo.getAppUserId()); UserIntegralChanges userIntegralChanges = new UserIntegralChanges(); userIntegralChanges.setAppUserId(vo.getAppUserId()); cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java
@@ -86,7 +86,7 @@ private String alipay_root_cert_path = "C:/cert/alipay/user/alipay_root_cert_path.crt";//支付宝CA根证书文件路径 private String certPath = "C:\\cert\\1523106371_20211206_cert\\apiclient_cert.p12";//微信证书 private String certPath = "C:\\Users\\Admin\\Desktop\\weixin_cert\\apiclient_cert.p12";//微信证书 /** cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java
@@ -1363,7 +1363,6 @@ @PostMapping("/base/pointMerchars/updateDetailsUserPointMercase") public void updateDetailsUserPointMercase(@RequestBody UserPointsMerchandise merchandise) { merchandise.setUserId(null); merchandise.setPointsMerchandiseId(null); upmseService.updateById(merchandise); } @@ -1442,8 +1441,6 @@ @PostMapping("/base/pointMerchars/getConsumeDetails") public List<ConsumeDetail> getConsumeDetails(@RequestBody BillingDataRequestVo requestVo) { return upmseService.getConsumeDetails(requestVo); } cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponPaymentController.java
@@ -51,6 +51,7 @@ @ResponseBody @PostMapping("/userCouponPayment/updateUserCouponPayment") public void updateUserCouponPayment(@RequestBody UserCouponPayment userCouponPayment){ userCouponPayment.setUserId(null); userCouponPaymentService.updateById(userCouponPayment); } } cloud-server-activity/src/main/java/com/dsh/activity/entity/ConsumeDetail.java
@@ -19,4 +19,6 @@ @ApiModelProperty(value = "1充值 2扣除") private Integer type; private Long dateTime; } cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java
@@ -11,6 +11,7 @@ import lombok.experimental.Accessors; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; /** @@ -72,20 +73,20 @@ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date insertTime; /** * 现金支付方式(1=微信2支付宝) * 现金支付方式(1=积分兑换,2=积分+现金) */ @TableField("payType") private Integer payType; /** * 商品数量 */ @TableField("goodsNumber") private Integer goodsNumber; /** * code */ @TableField("code") private String code; /** * orderNumber */ @TableField("orderNumber") private String orderNumber; /** * 现金的支付状态 */ @@ -101,6 +102,32 @@ */ @TableField("state") private Integer state; /** * 积分支付数量 */ @TableField("integral") private Integer integral; /** * 现金支付金额 */ @TableField("cash") private BigDecimal cash; /** * 现金支付方式(1=微信,2=支付宝) */ @TableField("cashPayType") private Integer cashPayType; /** * 第三方支付流水号 */ @TableField("orderNumber") private String orderNumber; /** * 支付时间 */ @TableField("paymentTime") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date paymentTime; @Override cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserPointsMerchandiseMapper.java
@@ -28,4 +28,6 @@ Object changeState(List<Integer> ids, Integer state); List<ConsumeDetail> getConsumeDetails(BillingDataRequestVo requestVo); List<ConsumeDetail> getConsumeDetails1(BillingDataRequestVo requestVo); } cloud-server-activity/src/main/java/com/dsh/activity/model/UserCouponPayment.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.util.Date; @@ -69,10 +70,12 @@ * 支付时间 */ @TableField("paymentTime") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date paymentTime; /** * 添加时间 */ @TableField("insertTime") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date insertTime; } cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserPointsMerchandiseServiceImpl.java
@@ -25,8 +25,12 @@ */ @Service public class UserPointsMerchandiseServiceImpl extends ServiceImpl<UserPointsMerchandiseMapper, UserPointsMerchandise> implements UserPointsMerchandiseService { @Autowired private UserPointsMerchandiseMapper userPointsMerchandiseMapper; @Override public List<PointMerchandiseIncomeVo> getAmount() { @@ -42,6 +46,9 @@ @Override public List<ConsumeDetail> getConsumeDetails(BillingDataRequestVo requestVo) { return this.baseMapper.getConsumeDetails(requestVo); List<ConsumeDetail> consumeDetails = this.baseMapper.getConsumeDetails(requestVo); List<ConsumeDetail> consumeDetails1 = this.baseMapper.getConsumeDetails1(requestVo); consumeDetails.addAll(consumeDetails1); return consumeDetails; } } cloud-server-activity/src/main/resources/mapper/UserPointsMerchandiseMapper.xml
@@ -26,18 +26,18 @@ SELECT CASE tm.type WHEN 1 THEN '实体购买' WHEN 2 THEN '课包购买' WHEN 3 THEN '门票购买' WHEN 4 THEN '优惠券购买' WHEN 1 THEN '兑换实体商品' WHEN 2 THEN '兑换运动营商品' WHEN 3 THEN '兑换门票' WHEN 4 THEN '兑换优惠券' END AS consumeName ,DATE_FORMAT(pm.insertTime, '%m-%d %H:%i')as `consumeTime`,2 as type,CONCAT('-',tm.cash) as consumeAmount consumeAmount, UNIX_TIMESTAMP(pm.insertTime) * 1000 as dateTime FROM t_user_points_merchandise pm LEFT JOIN t_points_merchandise tm ON tm.id = pm.pointsMerchandiseId WHERE pm.payStatus = 2 and pm.state = 1 and pm.pointsMerchandiseId IN( SELECT id FROM t_points_merchandise WHERE redemptionMethod IN (2,3) SELECT id FROM t_points_merchandise WHERE redemptionMethod IN (2,3) ) <if test="null != monthStart and '' != monthStart and null != monthEnd and '' != monthEnd"> and DATE_FORMAT(pm.insertTime, '%Y-%m-%d %H:%i:%s') between #{monthStart} and #{monthEnd} @@ -45,7 +45,23 @@ <if test="null != appUserId and '' != appUserId "> and pm.userId = #{appUserId} </if> </select> <select id="getConsumeDetails1" resultType="com.dsh.activity.entity.ConsumeDetail"> SELECT '兑换优惠券' AS consumeName , DATE_FORMAT(paymentTime, '%m-%d %H:%i') as `consumeTime`, 2 as type, CONCAT('-',cash) as consumeAmount, UNIX_TIMESTAMP(paymentTime) * 1000 as dateTime FROM t_user_coupon_payment where status = 2 and payType = 2 <if test="null != monthStart and '' != monthStart and null != monthEnd and '' != monthEnd"> and DATE_FORMAT(paymentTime, '%Y-%m-%d %H:%i:%s') between #{monthStart} and #{monthEnd} </if> <if test="null != appUserId and '' != appUserId "> and userId = #{appUserId} </if> </select> </mapper> cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java
@@ -570,8 +570,9 @@ String code = map.get("out_refund_no"); String refund_id = map.get("refund_id"); String result = map.get("result"); PaymentCompetition paymentCompetition = paymentCompetitionService.getOne(new QueryWrapper<PaymentCompetition>().eq("code", code).eq("payType", 1)); if (paymentCompetition.getPayStatus() == 1) { PaymentCompetition paymentCompetition = paymentCompetitionService.getOne(new QueryWrapper<PaymentCompetition>() .eq("code", code).eq("payType", 1)); if (paymentCompetition.getPayStatus() == 2) { paymentCompetition.setPayStatus(3); paymentCompetition.setRefundTime(new Date()); paymentCompetition.setRefundOrderNo(refund_id); @@ -581,11 +582,12 @@ Competition competition = cttService.getById(paymentCompetition.getCompetitionId()); competition.setApplicantsNumber(competition.getApplicantsNumber() - 1); cttService.updateById(competition); PrintWriter out = response.getWriter(); out.write(result); out.flush(); out.close(); } PrintWriter out = response.getWriter(); out.write(result); out.flush(); out.close(); } } catch (Exception e) { e.printStackTrace(); @@ -787,7 +789,8 @@ String payOrderNo = paymentCompetition.getPayOrderNo(); if (paymentCompetition.getPayType() == 1) {//微信支付 Map<String, String> map = payMoneyUtil.wxRefund(payOrderNo, code, amount.toString(), amount.toString(), "/base/competition/weChatCancelPaymentCompetitionCallback"); Map<String, String> map = payMoneyUtil.wxRefund(payOrderNo, code, amount.toString(), amount.toString(), "/base/competition/weChatCancelPaymentCompetitionCallback"); String return_code = map.get("return_code"); if (!"SUCCESS".equals(return_code)) { // return ResultUtil.error(map.get("return_msg")); @@ -795,6 +798,7 @@ } String refund_id = map.get("refund_id"); paymentCompetition.setRefundOrderNo(refund_id); paymentCompetition.setAppUserId(null); paymentCompetitionService.updateById(paymentCompetition); storeClient.addBackRecord(paymentCompetition.getAmount() + "_" + paymentCompetition.getAppUserId()); cloud-server-competition/src/main/java/com/dsh/competition/feignclient/model/BillingRequest.java
@@ -17,4 +17,6 @@ * 金额 */ private double amount; private Long dateTime; } cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java
@@ -80,6 +80,10 @@ private PayMoneyUtil payMoneyUtil; @Autowired private CompetitionService cttService; private String aliAppid = "2021004105665036";//支付宝appid private String appPrivateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCi5i9nW/hGLJ3A06cZxTQdviFC7THpdSihoTYGLr9q006hu0V26ecBMY/o4w5bvIX0Ok/yofmZsVcCJpAPvbXL/uqVrIjnRRxXiaeBFThlxoBUTdunvbUSDYfzlEhJr5NvUKI6H6lz2niXlQGx4qy8Hau4ccWit9kM8jwUvsBVQoFgJA+xrjMvooA7YLopQtpOD+UJr5thApTSf1xrnr1W12yolTLEH15JmNV372cqXrYUuqnY0QsaPtxeqJUGAOcGdVLllQ7easEznP8DFBvDdHATcmp2SHNQDUEWN6MCVPbMgY06NQVqAXxqjTAYSVh+6TRu6bofPmpYC3TZB003AgMBAAECggEBAJAcR2+PA3NBYUYHeFrqBRMS8uX8ZR19kjZ7IgoSLTFaQsP9opRylPSPXhrPVBKAE5leRQAHn4MCSlESwHvMfxo7KFjFTFAc6dffZZpipYQUOc9bGampwJh58/3e/pyBgVMG6J23CPf/HJQtNFSkjd/V9+ayb/9l2dUEL3bC0fAZ/dbx8HsxdLw8wn3fLlWLj68hOMqa2deCZe3JdSVsPbeWqkh56FFsMLug0Nd+Ar4TgRl9/jnhXF0JWiD0LmPUYLhboY7EfUBzN4w1iYbDi1P+3zvoOYsiVKAXox9GMhQ2VzOO2UcSTuizSza2e98mGpabl/GpKmCz+RDFjtkX6eECgYEA2MyCij65eO3aGIm3FUe93DULRBYTfX8qJQSJq2WOWA3mmQlEW6L3O2B5/lG2h+8WmN6iLEs9eHpgycGYp7vAqgrANEn16ACVcuyx0scFtrZfZ+kmHMzFfiUWxJjVYk/6YngsGVBLdw6ueM42C8TTP67X9tU5TdVGoGWuqEj4W98CgYEAwFqwprXOch5Pqk/RPbb49r0Ou03K/UbciWnWWKzUhFFNS8MdlQPoDvQZbMwHLeWsa2VhaKITK3x5biLQb3U+0GLOn6lTvEyrEUH+ucREyLgVYTRAvwBPtnvlrzpyxPk2HnslQjju8WrvvLLBMKWUjlTrTOzhaHT21gz3pHMiOakCgYEAhLmfaXdBITGshb054sNLDtdCkGpbgEcrzAHdLps769iGxkYQHXHFngpQZUwtTUcoNGqIKknd1jZFrv7gsD+XkgKG7PwimehRlkwmCX5ilxtLiVgJRzRt6+5U5AMVD90a0tHzXYP0z2yjj73fBJF5KtGl0a10KZxaYrQdm1UhB00CgYBZZgzx/k9rtHC8LAqIj1CYhHejT92G53c6Gkl3vyOqN4sgKhfGmSEySfrDGPRBPZxr8ZtbIPCd5mUdberH0osWGMYFaJI1UsCy7aQwvGpniz7MhZeN7dweaOjwDs8mgtjHQ96mL4XGCDhR0BZ/wIURvZ/6iaGdhbbu9unlsWj3uQKBgQCmZYdsbbZkd3ev6f8rwyvMz+DrCQyYpY44cegBYuJgrZiQnL2fJioeN7ixX0UM48SfwsZEIrzshP/LGAwnc2MdjxKUl4jLN8SEe0NAjXOnz9Zaw740+aOmLpXcLWdP4uM2gIhWsvW1tEkQZCXmm7c9s/RsU8Pmzv+YL3+fSijOzA==";//支付宝开发者应用私钥 @@ -362,7 +366,8 @@ * @throws Exception */ public ResultUtil weChatPaymentCompetition(String code, BigDecimal money) throws Exception { ResultUtil weixinpay = payMoneyUtil.weixinpay("报名赛事", "", code, money.toString(), "/base/competition/weChatPaymentCompetitionCallback", "APP", ""); ResultUtil weixinpay = payMoneyUtil.weixinpay("报名赛事", "", code, money.toString(), "/base/competition/weChatPaymentCompetitionCallback", "APP", ""); if (weixinpay.getCode() == 200) { new Thread(new Runnable() { @Override @@ -393,7 +398,7 @@ Map<String, String> data1 = resultUtil.getData(); String s = data1.get("trade_state"); String transaction_id = data1.get("transaction_id"); if ("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { paymentCompetition.setAppUserId(null); paymentCompetition.setState(3); userCompetitionService.remove(new QueryWrapper<UserCompetition>().eq("paymentCompetitionId", paymentCompetition.getId())); @@ -405,9 +410,13 @@ paymentCompetition.setPayTime(new Date()); paymentCompetition.setPayOrderNo(transaction_id); paymentCompetitionService.updateById(paymentCompetition); Competition competition = cttService.getById(paymentCompetition.getCompetitionId()); competition.setApplicantsNumber(competition.getApplicantsNumber() + 1); cttService.updateById(competition); break; } if ("USERPAYING".equals(s)) { if ("USERPAYING".equals(s) || "NOTPAY".equals(s)) { num++; } } @@ -475,6 +484,11 @@ paymentCompetition.setPayTime(new Date()); paymentCompetition.setPayOrderNo(tradeNo); paymentCompetitionService.updateById(paymentCompetition); Competition competition = cttService.getById(paymentCompetition.getCompetitionId()); competition.setApplicantsNumber(competition.getApplicantsNumber() + 1); cttService.updateById(competition); // 结算资金到商户账号 payMoneyUtil.confirm(smid,code,tradeNo,money.toString()); //分账 cloud-server-competition/src/main/java/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.java
@@ -65,7 +65,8 @@ @Resource private StudentClient studentClient; @Autowired @Resource private PaymentCompetitionMapper paymentCompetitionMapper; @@ -247,18 +248,18 @@ String payOrderNo = paymentCompetition.getPayOrderNo(); if (paymentCompetition.getPayType() == 1) {//微信支付 Map<String, String> map = payMoneyUtil.wxRefund(payOrderNo, code, amount.toString(), amount.toString(), "/base/competition/weChatCancelPaymentCompetitionCallback"); Map<String, String> map = payMoneyUtil.wxRefund(payOrderNo, code, amount.toString(), amount.toString(), "/base/competition/weChatCancelPaymentCompetitionCallback"); String return_code = map.get("return_code"); if (!"SUCCESS".equals(return_code)) { return ResultUtil.error(map.get("return_msg")); } String refund_id = map.get("refund_id"); paymentCompetition.setRefundOrderNo(refund_id); paymentCompetition.setAppUserId(null); this.updateById(paymentCompetition); storeClient.addBackRecord(paymentCompetition.getAmount() + "_" + paymentCompetition.getAppUserId()); } if (paymentCompetition.getPayType() == 2) {//支付宝支付 Map<String, String> map = payMoneyUtil.aliRefund(payOrderNo, amount.toString()); cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java
@@ -57,7 +57,7 @@ private String key = "6f5e0c2dcabfa9c27b5da5836a362fef";//微信商户号 private String callbackPath = "http://8.137.22.229:56666/competition";//支付回调网关地址 private String callbackPath = "http://221.182.45.100:56666/competition";//支付回调网关地址 private String app_cert_path = "C:/cert/alipay/user/app_cert_path.crt";//应用公钥证书路径 @@ -65,7 +65,7 @@ private String alipay_root_cert_path = "C:/cert/alipay/user/alipay_root_cert_path.crt";//支付宝CA根证书文件路径 private String certPath = "C:\\cert\\1523106371_20211206_cert\\apiclient_cert.p12";//微信证书 private String certPath = "C:\\Users\\Admin\\Desktop\\weixin_cert\\apiclient_cert.p12";//微信证书 /** cloud-server-competition/src/main/resources/mapper/PaymentCompetitionMapper.xml
@@ -35,8 +35,10 @@ order by a.insertTime desc limit #{pageNo}, #{pageSize} </select> <select id="queryDatas" resultType="com.dsh.competition.feignclient.model.BillingRequest"> SELECT DATE_FORMAT(insertTime, '%m-%d %H:%i')as `time`, amount SELECT DATE_FORMAT(insertTime, '%m-%d %H:%i')as `time`, amount, UNIX_TIMESTAMP(payTime) * 1000 as dateTime from t_payment_competition where payStatus in (2,3) and payType in (1,2) <if test="null != monthStart and '' != monthStart and null != monthEnd and '' != monthEnd"> @@ -47,8 +49,10 @@ </if> </select> <select id="queryCancelDatas" resultType="com.dsh.competition.feignclient.model.BillingRequest"> SELECT DATE_FORMAT(refundTime, '%m-%d %H:%i')as `time`, amount SELECT DATE_FORMAT(refundTime, '%m-%d %H:%i')as `time`, amount, UNIX_TIMESTAMP(refundTime) * 1000 as dateTime from t_payment_competition where payStatus = 3 and payType in (1,2) <if test="null != monthStart and '' != monthStart and null != monthEnd and '' != monthEnd"> cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java
@@ -59,11 +59,14 @@ @Autowired private TCoursePackageDiscountService discountService; @Autowired private ICoursePackagePaymentConfigService coursePackagePaymentConfigService; @Autowired private ICoursePackageOrderService coursePackageOrderService; /** * 上/下架 1为上架 2为下架 3为删除 @@ -595,4 +598,53 @@ return map1; } /** * 课包支付成功后排课操作 * @param addCoursePackageOrderStudent */ @PostMapping("/course/addCoursePackageOrderStudent") public void addCoursePackageOrderStudent(@RequestBody AddCoursePackageOrderStudent addCoursePackageOrderStudent){ coursePackageService.addCoursePackageOrderStudent(addCoursePackageOrderStudent.getCoursePackageOrderId(), addCoursePackageOrderStudent.getCoursePackagePaymentConfig()); } /** * 根据code获取待支付数据 * @param code * @return */ @PostMapping("/course/getCoursePackageOrderByCode") public CoursePackageOrder getCoursePackageOrderByCode(@RequestBody String code){ CoursePackageOrder coursePackageOrder = coursePackageOrderService.getOne(new QueryWrapper<CoursePackageOrder>() .eq("code", code).eq("state", 1)); return coursePackageOrder; } /** * 修改数据 * @param coursePackageOrder */ @PostMapping("/course/updateCoursePackageOrder") public void updateCoursePackageOrder(@RequestBody CoursePackageOrder coursePackageOrder){ coursePackageOrder.setAppUserId(null); coursePackageOrderService.updateById(coursePackageOrder); } /** * 获取课包配置 * @param getCoursePackagePaymentConfig * @return */ @PostMapping("/course/getCoursePackagePaymentConfig") public CoursePackagePaymentConfig getCoursePackagePaymentConfig(@RequestBody GetCoursePackagePaymentConfig getCoursePackagePaymentConfig){ CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getOne(new QueryWrapper<CoursePackagePaymentConfig>() .eq("coursePackageId", getCoursePackagePaymentConfig.getCoursePackageId()) .eq("classHours", getCoursePackagePaymentConfig.getClassHours()) ); return coursePackagePaymentConfig; } } cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -133,8 +133,6 @@ private final SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm"); @Autowired private ICoursePackageOrderStudentService coursePackageOrderStudentService; @@ -143,6 +141,16 @@ @Resource private AppUserClient appuClient; @Autowired private CourseCounsumService courseCounsumService; @Autowired private TCoursePackagePaymentService coursePackagePaymentService; /** @@ -194,6 +202,7 @@ coursePackageOrder.setStatus(1); coursePackageOrder.setState(1); coursePackageOrder.setInsertTime(new Date()); coursePackageOrder.setOrderType(1); coursePackageOrder.setSalesName(packagePayment.getSalesName()); coursePackageOrderService.save(coursePackageOrder); // 生成排课数据 @@ -689,11 +698,7 @@ } @Autowired private CourseCounsumService courseCounsumService; @Autowired private TCoursePackagePaymentService coursePackagePaymentService; @PostMapping("/base/coursePack/getRecord") public List<PurchaseRecordVo> getRecord(@RequestBody RecordTimeRequest recordTimeRequest) { @@ -1572,9 +1577,9 @@ } @PostMapping("/base/coursePack/savePaymentCoursePackage") public boolean savePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment) { return packagePaymentService.save(packagePayment); public Long savePaymentCoursePackage(@RequestBody CoursePackageOrder coursePackageOrder) { coursePackageOrderService.save(coursePackageOrder); return coursePackageOrder.getId(); } @@ -2374,17 +2379,31 @@ @PostMapping("/base/coursePack/getConsumes") List<CourseCounsum> getConsumes(@RequestBody BillingDataRequestVo requestVo) { Integer[] integers = {2, 3}; QueryWrapper<CourseCounsum> courseCounsumQueryWrapper = new QueryWrapper<CourseCounsum>().in("changeType", integers).eq("appUserId", requestVo.getAppUserId()); QueryWrapper<CourseCounsum> courseCounsumQueryWrapper = new QueryWrapper<CourseCounsum>() .in("changeType", integers).eq("appUserId", requestVo.getAppUserId()); if (requestVo.getMonthEnd() != null) { courseCounsumQueryWrapper.ge("insertTime", requestVo.getMonthStart()); courseCounsumQueryWrapper.le("insertTime", requestVo.getMonthEnd()); } return courseCounsumService.list(courseCounsumQueryWrapper); } @ResponseBody @PostMapping("/base/coursePack/getCoursePackageOrder") public List<CoursePackageOrder> getCoursePackageOrder(@RequestBody BillingDataRequestVo requestVo){ QueryWrapper<CoursePackageOrder> wrapper = new QueryWrapper<CoursePackageOrder>().eq("appUserId", requestVo.getAppUserId()) .in("payType", Arrays.asList(1, 2, 5, 6)).eq("payStatus", 2).eq("state", 1).eq("orderType", 1); return coursePackageOrderService.list(wrapper); } @ResponseBody @PostMapping("/base/coursePack/weeksOfCourseDetailsList") public HashMap<String, Object> weeksOfCourseDetailsList(@RequestBody CourseDetailReq courseDetailReq) { HashMap<String, Object> map = new HashMap<>(); cloud-server-course/src/main/java/com/dsh/course/entity/AddCoursePackageOrderStudent.java
New file @@ -0,0 +1,19 @@ package com.dsh.course.entity; import lombok.Data; /** * @author zhibing.pu * @date 2024/3/19 14:32 */ @Data public class AddCoursePackageOrderStudent { /** * 购买记录id */ private Long coursePackageOrderId; /** * 课包配置 */ private CoursePackagePaymentConfig coursePackagePaymentConfig; } cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageOrder.java
@@ -115,6 +115,11 @@ */ @TableField("salesName") private String salesName; /** * 订单类型(1=购买订单,2=积分商品兑换订单) */ @TableField("orderType") private Integer orderType; @TableField(exist = false) private Integer type; cloud-server-course/src/main/java/com/dsh/course/model/GetCoursePackagePaymentConfig.java
New file @@ -0,0 +1,15 @@ package com.dsh.course.model; import lombok.Data; /** * @author zhibing.pu * @date 2024/3/19 15:32 */ @Data public class GetCoursePackagePaymentConfig { private Integer coursePackageId; private Integer classHours; } cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
@@ -843,6 +843,7 @@ newPayment.setPayType(request.getPayType()); newPayment.setState(1); newPayment.setInsertTime(new Date()); newPayment.setOrderType(1); coursePackageOrderService.save(newPayment); code = newPayment.getCode(); } @@ -931,7 +932,7 @@ Map<String, String> data1 = resultUtil.getData(); String s = data1.get("trade_state"); String transaction_id = data1.get("transaction_id"); if ("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { //有待支付的订单,这里不处理 // coursePackageOrder1.setState(3); // coursePackageOrderService.updateById(coursePackageOrder1); @@ -951,7 +952,7 @@ coursePackageService.addCoursePackageOrderStudent(coursePackageOrder1.getId(), coursePackagePaymentConfig); break; } if ("USERPAYING".equals(s)) { if ("USERPAYING".equals(s) || "NOTPAY".equals(s)) { num++; } } @@ -1225,7 +1226,7 @@ coursePackageOrderService.updateById(coursePackageOrder1); CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getOne(new QueryWrapper<CoursePackagePaymentConfig>() .eq("coursePackageId", coursePackageOrder1.getId()) .eq("coursePackageId", coursePackageOrder1.getCoursePackageId()) .eq("classHours", coursePackageOrder1.getClassHours()) ); coursePackageService.addCoursePackageOrderStudent(coursePackageOrder1.getId(), coursePackagePaymentConfig); cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java
@@ -930,6 +930,7 @@ coursePackageOrder.setStatus(1); coursePackageOrder.setState(1); coursePackageOrder.setInsertTime(new Date()); coursePackageOrder.setOrderType(1); coursePackageOrderService.save(coursePackageOrder); orderId = coursePackageOrder.getId(); }else{ @@ -942,7 +943,8 @@ coursePackageOrderService.updateById(coursePackageOrder); } ResultUtil weixinpay = payMoneyUtil.weixinpay("报名运动营", coursePackagePaymentConfig.getId().toString(), code, paymentPrice.toString(), "/base/course/weChatPaymentCourseCallback", "APP", ""); ResultUtil weixinpay = payMoneyUtil.weixinpay("报名运动营", coursePackagePaymentConfig.getId().toString(), code, paymentPrice.toString(), "/base/course/weChatPaymentCourseCallback", "APP", ""); if (weixinpay.getCode() == 200) { String finalCode = code; new Thread(new Runnable() { @@ -974,7 +976,7 @@ Map<String, String> data1 = resultUtil.getData(); String s = data1.get("trade_state"); String transaction_id = data1.get("transaction_id"); if ("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { //有待支付的订单,这里不处理 // coursePackageOrder1.setState(3); // coursePackageOrderService.updateById(coursePackageOrder1); @@ -989,7 +991,7 @@ addCoursePackageOrderStudent(coursePackageOrder1.getId(), coursePackagePaymentConfig); break; } if ("USERPAYING".equals(s)) { if ("USERPAYING".equals(s) || "NOTPAY".equals(s)) { num++; } } @@ -1036,6 +1038,7 @@ coursePackageOrder.setStatus(1); coursePackageOrder.setState(1); coursePackageOrder.setInsertTime(new Date()); coursePackageOrder.setOrderType(1); coursePackageOrderService.save(coursePackageOrder); }else { CoursePackageOrder coursePackageOrder = coursePackageOrderService.getById(paymentCourseVo.getOrderId()); @@ -1249,6 +1252,7 @@ coursePackageOrder.setStatus(1); coursePackageOrder.setState(1); coursePackageOrder.setInsertTime(new Date()); coursePackageOrder.setOrderType(1); coursePackageOrderService.save(coursePackageOrder); orderId = coursePackageOrder.getId(); }else{ cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java
@@ -61,7 +61,7 @@ private String key = "6f5e0c2dcabfa9c27b5da5836a362fef";//微信商户号 private String callbackPath = "http://8.137.22.229:56666/course";//支付回调网关地址 private String callbackPath = "http://221.182.45.100:56666/course";//支付回调网关地址 private String app_cert_path = "C:/cert/alipay/user/app_cert_path.crt";//应用公钥证书路径 @@ -69,7 +69,7 @@ private String alipay_root_cert_path = "C:/cert/alipay/user/alipay_root_cert_path.crt";//支付宝CA根证书文件路径 private String certPath = "C:\\cert\\1523106371_20211206_cert\\apiclient_cert.p12";//微信证书 private String certPath = "C:\\Users\\Admin\\Desktop\\weixin_cert\\apiclient_cert.p12";//微信证书 public ResultUtil confirm(String smid,String code, String outTradeNo, String amount) { AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", cloud-server-management/src/main/java/com/dsh/guns/modular/system/util/PayMoneyUtil.java
@@ -56,7 +56,7 @@ private String alipay_root_cert_path = "C:/cert/alipay/user/alipay_root_cert_path.crt";//支付宝CA根证书文件路径 private String certPath = "C:\\cert\\1523106371_20211206_cert\\apiclient_cert.p12";//微信证书 private String certPath = "C:\\Users\\Admin\\Desktop\\weixin_cert\\apiclient_cert.p12";//微信证书 String signType = "RSA2" ; String serverHost = "openchannel.alipay.com" ; cloud-server-other/src/main/java/com/dsh/other/controller/GameController.java
@@ -230,7 +230,7 @@ Map<String, String> data1 = resultUtil.getData(); String s = data1.get("trade_state"); String transaction_id = data1.get("transaction_id"); if ("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { break; } if ("SUCCESS".equals(s)) { @@ -244,7 +244,7 @@ Integer integer = startGame(uid, gameId, spaceId, sutuId); break; } if ("USERPAYING".equals(s)) { if ("USERPAYING".equals(s) || "NOTPAY".equals(s)) { num++; } } cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java
@@ -24,6 +24,7 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; @@ -62,8 +63,31 @@ @Resource private UserCouponClient userCouponClient; @Autowired @Resource private CityManagerClient cityManagerClient; @Autowired private TGameConfigService gameConfigService; @Autowired private TGameRecordService gameRecordService; @Resource private CourseRecordClient courseRecordClient; @Autowired private RedisUtil redisUtil; /** * 通过运营商id查询运营商对应的支付宝商户号 @@ -226,9 +250,6 @@ } } @Autowired private RedisUtil redisUtil; @ResponseBody @PostMapping("/base/site/querySiteTimes") @ApiOperation(value = "获取场地详情时间段数据", tags = {"用户—预约场地"}) @@ -289,20 +310,6 @@ } } // public ResultUtil<List<QuerySiteTimes>> querySiteTimes(Integer id, String day, String halfName, String siteName) throws Exception { // // if (redisUtil.acquireLock(day,day)) { // try { // List<QuerySiteTimes> list = siteService.querySiteTimes(id, day,halfName,siteName); // return ResultUtil.success(list); // } finally { // redisUtil.releaseLock(day); // } // } else { // return ResultUtil.error("系统繁忙,请稍后再试!"); // } // // } /** @@ -326,11 +333,12 @@ siteBooking.setStatus(1); siteBooking.setPayOrderNo(transaction_id); siteBookingService.updateById(siteBooking); PrintWriter out = response.getWriter(); out.write(result); out.flush(); out.close(); } PrintWriter out = response.getWriter(); out.write(result); out.flush(); out.close(); } } catch (Exception e) { e.printStackTrace(); @@ -347,7 +355,6 @@ @PostMapping("/base/site/aliPaymentSiteCallback") public void aliPaymentSiteCallback(HttpServletRequest request, HttpServletResponse response) { try { System.out.println("回调回调回调"); Map<String, String> map = payMoneyUtil.alipayCallback(request); if (null != map) { String code = map.get("out_trade_no"); @@ -359,24 +366,21 @@ siteBooking.setStatus(1); siteBooking.setPayOrderNo(trade_no); siteBookingService.updateById(siteBooking); PrintWriter out = response.getWriter(); out.write("success"); out.flush(); out.close(); } PrintWriter out = response.getWriter(); out.write("success"); out.flush(); out.close(); } } catch (Exception e) { e.printStackTrace(); } } @Autowired private TGameConfigService gameConfigService; @Autowired private TGameRecordService gameRecordService; @Resource private CourseRecordClient courseRecordClient; /** * 启动游戏支付宝回调 * @@ -387,10 +391,8 @@ @PostMapping("/base/site/gameCallback") public void gameCallback(HttpServletRequest request, HttpServletResponse response) { try { System.out.println("回调回调回调"); Map<String, String> map = payMoneyUtil.alipayCallback(request); if (null != map) { String code = map.get("passback_params"); String trade_no = map.get("trade_no"); String[] s = code.split("_"); @@ -412,7 +414,6 @@ } gameRecordService.updateBatchById(list); System.err.println("===========游戏回调游戏回调=========" + i); PrintWriter out = response.getWriter(); out.write("success"); out.flush(); @@ -477,10 +478,10 @@ public ResultUtil<Map<String, Object>> queryMySiteById(Integer id) { try { HashMap<String, Object> map = new HashMap<>(); SiteBooking byId = siteBookingService.getById(id); Integer storeId = byId.getStoreId(); SiteBooking siteBooking = siteBookingService.getById(id); Integer storeId = siteBooking.getStoreId(); Store byId1 = service.getById(storeId); Site site = siteService.getById(byId.getSiteId()); Site site = siteService.getById(siteBooking.getSiteId()); map.put("siteName", byId1.getName()); SiteType siteType = siteTypeService.getById(site.getSiteTypeId()); map.put("siteType", siteType.getName()); @@ -490,29 +491,30 @@ map.put("name", site.getName()); List<Integer> ids = getIds(byId.getSiteId()); byId.setStorePhone(byId1.getPhone()); List<Integer> ids = getIds(siteBooking.getSiteId()); siteBooking.setStorePhone(byId1.getPhone()); //拼接开始结束时间 Date startTime = byId.getStartTime(); Date endTime = byId.getEndTime(); Date startTime = siteBooking.getStartTime(); Date endTime = siteBooking.getEndTime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String startTimeString = sdf.format(startTime); String endTimeString = sdf.format(endTime); String result = startTimeString + "-" + endTimeString.substring(11); byId.setTimes(result); siteBooking.setTimes(result); byId.setSid(Arrays.asList(storeId)); // List<Site> list = siteService.list(new LambdaQueryWrapper<Site>() // .eq(Site::getStoreId, storeId) // .eq(Site::getSign, 1)); // List<Integer> collect = list.stream().map(Site::getId).collect(Collectors.toList()); Integer siteId = byId.getSiteId(); siteBooking.setSid(Arrays.asList(storeId)); Integer siteId = siteBooking.getSiteId(); ArrayList<Integer> list1 = new ArrayList<>(); list1.add(siteId); byId.setRid(list1); map.put("data", byId); siteBooking.setRid(list1); SiteBookingVo siteBookingVo = new SiteBookingVo(); BeanUtils.copyProperties(siteBooking, siteBookingVo); siteBookingVo.setStartTime(siteBooking.getStartTime().getTime()); siteBookingVo.setEndTime(siteBooking.getEndTime().getTime()); siteBookingVo.setPayTime(siteBooking.getPayTime().getTime()); map.put("data", siteBookingVo); map.put("ids", ids); return ResultUtil.success(map); } catch (Exception e) { @@ -553,8 +555,6 @@ if (null == uid) { return ResultUtil.tokenErr(); } return siteService.cancelMySite(uid, id); } catch (Exception e) { e.printStackTrace(); cloud-server-other/src/main/java/com/dsh/other/model/BillingRequestOfType.java
@@ -23,4 +23,6 @@ * 金额 */ private double amount; private Long dateTime; } cloud-server-other/src/main/java/com/dsh/other/model/SiteBookingVo.java
New file @@ -0,0 +1,149 @@ package com.dsh.other.model; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; import java.util.List; /** * @author zhibing.pu * @date 2024/3/19 10:15 */ @Data public class SiteBookingVo { /** * 主键 */ private Integer id; /** * 业务流水号 */ private String orderNo; /** * 省 */ private String province; /** * 省编号 */ private String provinceCode; /** * 市名称 */ private String city; /** * 市编号 */ private String cityCode; /** * 门店id */ private Integer storeId; /** * 场地id */ private Integer siteId; /** * 用户id */ private Integer appUserId; /** * 预约时段 */ private String times; /** * 预约开始时间 */ @ApiModelProperty("预约开始时间") private Long startTime; /** * 预约结束 */ @ApiModelProperty("预约结束时间") private Long endTime; /** * 预约人 */ @ApiModelProperty("预约人") private String booker; /** * 联系方式 */ @ApiModelProperty("联系方式") private String phone; /** * 支付方式(1=微信,2=支付宝,3=玩湃比,4=手动支付) */ private Integer payType; /** * 支付时间 */ @ApiModelProperty("支付时间") private Long payTime; /** * 支付金额 */ @ApiModelProperty("支付金额") private Double payMoney; /** * 优惠券id */ private Long userCouponId; /** * 状态(0=待支付,1=待核销,2=已到店,3=已完成,4=已过期,5=已取消) */ @ApiModelProperty("0=待支付,1=待核销,2=已到店,3=已完成,4=已过期,5=已取消") private Integer status; /** * 第三方支付流水号 */ private String payOrderNo; /** * 手动支付操作用户id */ private Integer payUserId; /** * 取消用户id */ private Integer cancelUserId; /** * 取消凭证 */ private String voucher; /** * 取消备注 */ private String remark; /** * 取消时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date cancelTime; /** * 第三方取消退款流水号 */ private String refundOrderNo; /** * 状态(1=正常,2=冻结,3=删除) */ private Integer state; /** * 添加时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date insertTime; @ApiModelProperty("场地名称") private String nextName; @ApiModelProperty("半场 是否半场 1是 2否") private Integer isHalf; @ApiModelProperty("半场名称 ") private String halfName; private Integer goType; private String money; private String storePhone; private List<Integer> sid; private List<Integer> rid; private Integer addType; } cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
@@ -360,7 +360,6 @@ payMoney = new BigDecimal(site.getPlayPaiCoinOne()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); } if (appUser.getPlayPaiCoins().compareTo(payMoney.intValue()) < 0) { return new ResultUtil(3, "玩湃币不足"); } } else { @@ -368,18 +367,14 @@ payMoney = new BigDecimal(site.getCashPrice()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); } else { payMoney = new BigDecimal(site.getCashPriceOne()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); } } //校验优惠券 Long couponId = reservationSite.getCouponId(); if (couponId != null && couponId != 0) { if (null != couponId && reservationSite.getPayType() != 3) { UserCoupon userCoupon = userCouponClient.queryUserCouponById(new QueryUserCouponByIdAndUserId(reservationSite.getCouponId(), uid)); if (userCoupon != null && userCoupon.getStatus() == 2) { return ResultUtil.error("优惠券已被核销"); } @@ -441,7 +436,6 @@ if (reservationSite.getPayType() == 1) {//微信支付 ResultUtil resultUtil = weChatPaymentSite(payMoney, siteBooking); return resultUtil; } if (reservationSite.getPayType() == 2) {//支付宝支付 @@ -449,9 +443,6 @@ } if (reservationSite.getPayType() == 3) {//玩湃币支付 if (reservationSite.getIsHalf() == 2) { return playPaiCoinPaymentSite(appUser, Double.valueOf(site.getPlayPaiCoin()), siteBooking); } else { return playPaiCoinPaymentSite(appUser, site.getPlayPaiCoinOne(), siteBooking); @@ -471,7 +462,8 @@ public ResultUtil weChatPaymentSite(Double paymentPrice, SiteBooking siteBooking) throws Exception { String code = siteBooking.getOrderNo(); Integer id = siteBooking.getId(); ResultUtil weixinpay = payMoneyUtil.weixinpay("预约场地", id.toString(), code, paymentPrice.toString(), "/base/site/weChatPaymentSiteCallback", "APP", ""); ResultUtil weixinpay = payMoneyUtil.weixinpay("预约场地", id.toString(), code, paymentPrice.toString(), "/base/site/weChatPaymentSiteCallback", "APP", ""); if (weixinpay.getCode() == 200) { new Thread(new Runnable() { @Override @@ -501,7 +493,7 @@ Map<String, String> data1 = resultUtil.getData(); String s = data1.get("trade_state"); String transaction_id = data1.get("transaction_id"); if ("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { break; } if ("SUCCESS".equals(s)) { @@ -511,7 +503,7 @@ siteBookingService.updateById(siteBooking); break; } if ("USERPAYING".equals(s)) { if ("USERPAYING".equals(s) || "NOTPAY".equals(s)) { num++; } } @@ -691,7 +683,6 @@ } if (siteBooking.getStatus() == 0) { // return ResultUtil.error("请先进行支付"); siteBooking.setStatus(5); siteBookingService.updateById(siteBooking); AppUser appUser = appUserClient.queryAppUser(siteBooking.getAppUserId()); @@ -708,12 +699,13 @@ return ResultUtil.error("不能进行取消操作"); } if (siteBooking.getPayType() == 1) {//微信支付 Map<String, String> map = payMoneyUtil.wxRefund(siteBooking.getPayOrderNo(), siteBooking.getOrderNo(), siteBooking.getPayMoney().toString(), siteBooking.getPayMoney().toString(), "/base/site/cancelMySiteCallback"); Map<String, String> map = payMoneyUtil.wxRefund(siteBooking.getPayOrderNo(), siteBooking.getOrderNo(), siteBooking.getPayMoney().toString(), siteBooking.getPayMoney().toString(), "/base/site/cancelMySiteCallback"); if (null == map) { return ResultUtil.error("取消退款异常"); } String result_code = map.get("result_code"); if (!"SUCCESS".equals(result_code)) { String return_code = map.get("return_code"); if (!"SUCCESS".equals(return_code)) { return ResultUtil.error(map.get("return_msg")); } siteBooking.setCancelUserId(uid); cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java
@@ -60,7 +60,7 @@ private String key = "6f5e0c2dcabfa9c27b5da5836a362fef";//微信商户号 private String callbackPath = "http://8.137.22.229:56666/other";//支付回调网关地址 private String callbackPath = "http://221.182.45.100:56666/other";//支付回调网关地址 private String app_cert_path = "C:/cert/alipay/user/app_cert_path.crt";//应用公钥证书路径 @@ -68,7 +68,7 @@ private String alipay_root_cert_path = "C:/cert/alipay/user/alipay_root_cert_path.crt";//支付宝CA根证书文件路径 private String certPath = "C:\\cert\\1523106371_20211206_cert\\apiclient_cert.p12";//微信证书 private String certPath = "C:\\Users\\Admin\\Desktop\\weixin_cert\\apiclient_cert.p12";//微信证书 cloud-server-other/src/main/resources/mapper/SiteBookingMapper.xml
@@ -4,9 +4,12 @@ <select id="queryDatas" resultType="com.dsh.other.model.BillingRequestOfType"> SELECT DATE_FORMAT(insertTime, '%m-%d %H:%i')as `time`,DATE_FORMAT(payTime, '%m-%d %H:%i')as `time1`, SELECT DATE_FORMAT(insertTime, '%m-%d %H:%i')as `time`, DATE_FORMAT(payTime, '%m-%d %H:%i')as `time1`, payMoney as amount, `status` `status`, UNIX_TIMESTAMP(payTime) * 1000 as dateTime from t_site_booking where payType != 3 and status != 0 <if test="null != monthStart and '' != monthStart and null != monthEnd and '' != monthEnd">