| @@ -0,0 +1,2 @@ | |||||
| ALTER TABLE `pos_coupon_order_verify` | |||||
| ADD COLUMN `order_from` int(11) NULL COMMENT '来源,0-inside,1-POS' after `pos_order_id`; | |||||
| @@ -1,10 +1,10 @@ | |||||
| package com.iformall.controller; | package com.iformall.controller; | ||||
| import com.alibaba.fastjson.JSONArray; | |||||
| import com.iformall.common.ErrorCode; | import com.iformall.common.ErrorCode; | ||||
| import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
| import com.iformall.domain.po.*; | import com.iformall.domain.po.*; | ||||
| import com.iformall.domain.vo.WxCouponOrderCVo; | |||||
| import com.iformall.enums.*; | import com.iformall.enums.*; | ||||
| import com.iformall.exception.MallinkException; | import com.iformall.exception.MallinkException; | ||||
| import com.iformall.service.*; | import com.iformall.service.*; | ||||
| @@ -21,9 +21,7 @@ import org.springframework.web.bind.annotation.*; | |||||
| import javax.servlet.http.HttpServletRequest; | import javax.servlet.http.HttpServletRequest; | ||||
| import java.math.BigDecimal; | import java.math.BigDecimal; | ||||
| import java.util.Date; | |||||
| import java.util.HashMap; | import java.util.HashMap; | ||||
| import java.util.List; | |||||
| import java.util.Map; | import java.util.Map; | ||||
| /** | /** | ||||
| @@ -119,124 +117,12 @@ public class WxMicroPayController extends BaseController { | |||||
| } | } | ||||
| } | } | ||||
| @ApiOperation(value = "付款码支付订单v2", notes = "params:{\"payPrice\":\"总支付金额\",\"cUserId\":\"会员ID\"},\n" + | |||||
| "注意:\n" + | |||||
| "提醒1:提交支付请求后微信会同步返回支付结果。当返回结果为“系统错误”时,商户系统等待5秒后调用【查询订单API】,查询支付实际交易结果;当返回结果为“USERPAYING”时,商户系统可设置间隔时间(建议10秒)重新查询支付结果,直到支付成功或超时(建议30秒);\n" + | |||||
| "提醒2:在调用查询接口返回后,如果交易状况不明晰,请调用【撤销订单API】,此时如果交易失败则关闭订单,该单不能再支付成功;如果交易成功,则将扣款退回到用户账户。当撤销无返回或错误时,请再次调用。注意:请勿扣款后立即调用【撤销订单API】,建议至少15秒后再调用。撤销订单API需要双向证书。") | |||||
| @PostMapping("order_create_v2") | |||||
| public ResultData saveMicopayOrderV2(@RequestBody Map<String, String> paramMap, HttpServletRequest request) { | |||||
| logger.info("saveMicopayOrderV2: " + paramMap.toString()); | |||||
| WxMerchantBUser user = getUser(); | |||||
| String cUserIdStr = paramMap.get("cUserId"); | |||||
| String payPriceStr = paramMap.get("payPrice"); | |||||
| if (StringUtils.isBlank(cUserIdStr)) { | |||||
| logger.error("cUserId不能为空: " + paramMap.toString()); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||||
| } | |||||
| if (StringUtils.isBlank(payPriceStr)) { | |||||
| logger.error("payPriceStr不能为空: " + paramMap.toString()); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||||
| } | |||||
| Long cUserId = 0L; | |||||
| try { | |||||
| cUserId = Long.valueOf(cUserIdStr); | |||||
| } catch (NumberFormatException e) { | |||||
| cUserId = 0L; | |||||
| logger.error("cUserId参数不正确: " + paramMap.toString()); | |||||
| return new ResultData(ErrorCode.SYS_CLASSCAST_ERROR); | |||||
| } | |||||
| WxCUser cUser = wxCUserService.getById(Long.valueOf(cUserIdStr)); | |||||
| if (cUser == null) { | |||||
| logger.error("cUser不存在: " + cUserIdStr); | |||||
| return new ResultData(ErrorCode.USER_IS_EMPTY); | |||||
| } | |||||
| String ipStr = IPUtil.getIpAddr(request); | |||||
| BigDecimal payPrice = new BigDecimal(payPriceStr); | |||||
| payPrice.setScale(2, BigDecimal.ROUND_HALF_UP); // 第一个变量是小数位数,第二个变量是取舍方法(四舍五入) | |||||
| int payment = payPrice.multiply(new BigDecimal(100)).intValue(); | |||||
| WxOrder order = null; | |||||
| try { | |||||
| order = wxOrderService.saveMicroPayOrderV2(user, cUser, payment); | |||||
| } catch (MallinkException e) { | |||||
| logger.error("saveMicopayOrder 1" + e.getMessage()); | |||||
| return new ResultData(e.getErrorCode(), e.getMessage()); | |||||
| } catch (Exception e) { | |||||
| logger.error("saveMicopayOrder 2" + e.getMessage()); | |||||
| return new ResultData(ErrorCode.ORDER_IS_FAIL, e.getMessage()); | |||||
| } | |||||
| List<WxCouponOrderCVo> avaList = wxCouponOrderService.queryMicroPayCouponOrder(user, cUser, payment); | |||||
| Map retMap = new HashMap(); | |||||
| if (order != null) { | |||||
| retMap.put("order", order); | |||||
| } | |||||
| if (avaList.size() > 0) { | |||||
| retMap.put("avaList", avaList); | |||||
| } | |||||
| return new ResultData(retMap); | |||||
| } | |||||
| @ApiOperation(value = "付款码支付订单", notes = "params:{\"orderId\":\"订单\",\"authCode\":\"String\",\"payment\":\"支付金额\"},\n" + | |||||
| "注意:\n" + | |||||
| "提醒1:提交支付请求后微信会同步返回支付结果。当返回结果为“系统错误”时,商户系统等待5秒后调用【查询订单API】,查询支付实际交易结果;当返回结果为“USERPAYING”时,商户系统可设置间隔时间(建议10秒)重新查询支付结果,直到支付成功或超时(建议30秒);\n" + | |||||
| "提醒2:在调用查询接口返回后,如果交易状况不明晰,请调用【撤销订单API】,此时如果交易失败则关闭订单,该单不能再支付成功;如果交易成功,则将扣款退回到用户账户。当撤销无返回或错误时,请再次调用。注意:请勿扣款后立即调用【撤销订单API】,建议至少15秒后再调用。撤销订单API需要双向证书。") | |||||
| @PostMapping("pay_order_create_v2") | |||||
| public ResultData saveMicopayPayOrder(@RequestBody Map<String, String> paramMap, HttpServletRequest request) { | |||||
| logger.info("saveMicopayPayOrder: " + paramMap.toString()); | |||||
| WxMerchantBUser user = getUser(); | |||||
| String orderIdStr = paramMap.get("orderId"); | |||||
| String authCode = paramMap.get("authCode"); | |||||
| String paymentStr = paramMap.get("payment"); | |||||
| if (StringUtils.isBlank(orderIdStr)) { | |||||
| logger.error("orderId不能为空"); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "orderId不能为空"); | |||||
| } | |||||
| if (StringUtils.isBlank(authCode)) { | |||||
| logger.error("authCode不能为空"); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "authCode不能为空"); | |||||
| } | |||||
| if (StringUtils.isBlank(paymentStr)) { | |||||
| logger.error("payment不能为空"); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "payment不能为空"); | |||||
| } | |||||
| String ipStr = IPUtil.getIpAddr(request); | |||||
| WxOrder order = wxOrderService.getById(Long.valueOf(orderIdStr)); | |||||
| if (order == null) { | |||||
| logger.error("订单未找到" + orderIdStr); | |||||
| return new ResultData(ErrorCode.ORDER_IS_FAIL); | |||||
| } | |||||
| WxPayOrder record = new WxPayOrder(); | |||||
| record.setTenantId(user.getTenantId()); | |||||
| record.setOrderId(order.getId()); | |||||
| record.setAuthCode(authCode); | |||||
| record.setPayAmount(Integer.valueOf(paymentStr)); | |||||
| record.setIp(ipStr); | |||||
| try { | |||||
| return wxPayOrderService.createMicroPayOrder(user, record, EnumPayWay.PAY_WAY_WECHAT); | |||||
| } catch (MallinkException e) { | |||||
| logger.error("payment wechat, order create error, req 2: " + record.toString() + ", e:" + e.getMessage()); | |||||
| return new ResultData(e.getErrorCode(), e.getMessage()); | |||||
| } catch (Exception e) { | |||||
| logger.error("payment wechat, order create error, req 3: " + record.toString() + ", e:" + e.getMessage()); | |||||
| return new ResultData(ErrorCode.PAY_ORDER_ERROR, e.getMessage()); | |||||
| } | |||||
| } | |||||
| @ApiOperation(value = "查询付款码支付订单", notes = "{\"payOrderId\":\"String\",\"orderId\":\"String\"}") | @ApiOperation(value = "查询付款码支付订单", notes = "{\"payOrderId\":\"String\",\"orderId\":\"String\"}") | ||||
| @PostMapping("order_query") | @PostMapping("order_query") | ||||
| public ResultData queryMicopayOrder(@RequestBody Map<String, String> paramMap) { | public ResultData queryMicopayOrder(@RequestBody Map<String, String> paramMap) { | ||||
| logger.info("queryMicopayOrder: " + paramMap.toString()); | logger.info("queryMicopayOrder: " + paramMap.toString()); | ||||
| WxMerchantBUser user = getUser(); | |||||
| String payOrderIdStr = paramMap.get("payOrderId"); | String payOrderIdStr = paramMap.get("payOrderId"); | ||||
| String orderIdStr = paramMap.get("orderId"); | String orderIdStr = paramMap.get("orderId"); | ||||
| @@ -248,7 +134,6 @@ public class WxMicroPayController extends BaseController { | |||||
| logger.error("orderId不能为空"); | logger.error("orderId不能为空"); | ||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "orderId不能为空"); | return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "orderId不能为空"); | ||||
| } | } | ||||
| WxMerchantBUser user = getUser(); | |||||
| Long payOrderId = 0L; | Long payOrderId = 0L; | ||||
| Long orderId = 0L; | Long orderId = 0L; | ||||
| @@ -274,7 +159,7 @@ public class WxMicroPayController extends BaseController { | |||||
| record.setOrderId(orderId); | record.setOrderId(orderId); | ||||
| try { | try { | ||||
| ResultData resultData = wxPayOrderService.payOrderQuery(record); | |||||
| ResultData resultData = wxPayOrderService.payOrderQuery(user, record); | |||||
| return resultData; | return resultData; | ||||
| } catch (MallinkException e) { | } catch (MallinkException e) { | ||||
| logger.error("payment wechat, order query error, req 2: " + record.toString() + ", e:" + e.getMessage()); | logger.error("payment wechat, order query error, req 2: " + record.toString() + ", e:" + e.getMessage()); | ||||
| @@ -388,36 +273,122 @@ public class WxMicroPayController extends BaseController { | |||||
| } | } | ||||
| } | } | ||||
| @ApiOperation(value = "收银台核销券", notes = "{\"orderId\":\"必填\",\"couponOrderId\":\"必填\",\"payPrice\":\"支付金额(分)\"}") | |||||
| @PostMapping("userCouponOrderForMicroPay") | |||||
| public ResultData userCouponOrderForMicroPay(@RequestBody Map<String, String> paramMap) { | |||||
| logger.info("couponOrderController.verify:"+paramMap.toString()); | |||||
| @ApiOperation(value = "付款码支付订单v2", notes = "params:{\"payPrice\":\"总支付金额\",\"cUserId\":\"会员ID(非必填)\",\"phone\":\"会员手机号(非必填)\"},\n" + | |||||
| "注意:\n" + | |||||
| "提醒1:提交支付请求后微信会同步返回支付结果。当返回结果为“系统错误”时,商户系统等待5秒后调用【查询订单API】,查询支付实际交易结果;当返回结果为“USERPAYING”时,商户系统可设置间隔时间(建议10秒)重新查询支付结果,直到支付成功或超时(建议30秒);\n" + | |||||
| "提醒2:在调用查询接口返回后,如果交易状况不明晰,请调用【撤销订单API】,此时如果交易失败则关闭订单,该单不能再支付成功;如果交易成功,则将扣款退回到用户账户。当撤销无返回或错误时,请再次调用。注意:请勿扣款后立即调用【撤销订单API】,建议至少15秒后再调用。撤销订单API需要双向证书。") | |||||
| @PostMapping("order_create_v2") | |||||
| public ResultData saveMicopayOrderV2(@RequestBody Map<String, String> paramMap, HttpServletRequest request) { | |||||
| logger.info("saveMicopayOrderV2: " + paramMap.toString()); | |||||
| WxMerchantBUser user = getUser(); | |||||
| String cUserIdStr = paramMap.get("cUserId"); | |||||
| String phone = paramMap.get("phone"); | |||||
| String payPriceStr = paramMap.get("payPrice"); | |||||
| if (StringUtils.isBlank(cUserIdStr) && StringUtils.isBlank(phone)) { | |||||
| logger.error("cUserId/phone不能同时为空: " + paramMap.toString()); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||||
| } | |||||
| if (StringUtils.isBlank(payPriceStr)) { | |||||
| logger.error("payPriceStr不能为空: " + paramMap.toString()); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||||
| } | |||||
| // 获取C用户 | |||||
| WxCUser cUser = null; | |||||
| if (StringUtils.isNotBlank(cUserIdStr)) { | |||||
| Long cUserId = 0L; | |||||
| try { | |||||
| cUserId = Long.valueOf(cUserIdStr); | |||||
| } catch (NumberFormatException e) { | |||||
| cUserId = 0L; | |||||
| logger.error("cUserId参数不正确: " + paramMap.toString()); | |||||
| return new ResultData(ErrorCode.SYS_CLASSCAST_ERROR); | |||||
| } | |||||
| cUser = wxCUserService.getById(cUserId); | |||||
| } else { | |||||
| WxCUser userQ = new WxCUser(); | |||||
| userQ.setTenantId(user.getTenantId()); | |||||
| userQ.setPhone(phone); | |||||
| cUser = wxCUserService.getByObject(userQ); | |||||
| } | |||||
| if (cUser == null) { | |||||
| logger.error("cUser不存在: " + cUserIdStr); | |||||
| return new ResultData(ErrorCode.USER_IS_EMPTY); | |||||
| } | |||||
| String ipStr = IPUtil.getIpAddr(request); | |||||
| BigDecimal payPrice = new BigDecimal(payPriceStr); | |||||
| payPrice.setScale(2, BigDecimal.ROUND_HALF_UP); // 第一个变量是小数位数,第二个变量是取舍方法(四舍五入) | |||||
| int payment = payPrice.multiply(new BigDecimal(100)).intValue(); | |||||
| WxOrder order = null; | |||||
| try { | |||||
| order = wxOrderService.saveMicroPayOrderV2(user, cUser, payment); | |||||
| } catch (MallinkException e) { | |||||
| logger.error("saveMicopayOrder 1" + e.getMessage()); | |||||
| return new ResultData(e.getErrorCode(), e.getMessage()); | |||||
| } catch (Exception e) { | |||||
| logger.error("saveMicopayOrder 2" + e.getMessage()); | |||||
| return new ResultData(ErrorCode.ORDER_IS_FAIL, e.getMessage()); | |||||
| } | |||||
| JSONArray avaList = wxCouponOrderService.queryMicroPayCouponOrder(user, cUser, payment); | |||||
| Map retMap = new HashMap(); | |||||
| if (order != null) { | |||||
| retMap.put("order", order); | |||||
| } | |||||
| if (avaList.size() > 0) { | |||||
| retMap.put("avaList", avaList); | |||||
| } | |||||
| return new ResultData(retMap); | |||||
| } | |||||
| @ApiOperation(value = "付款码支付订单", notes = "params:{\"orderId\":\"订单号\",\"couponOrderId\":\"券码\",\"authCode\":\"String\",\"payPrice\":\"总支付金额\"},\n" + | |||||
| "注意:\n" + | |||||
| "提醒1:提交支付请求后微信会同步返回支付结果。当返回结果为“系统错误”时,商户系统等待5秒后调用【查询订单API】,查询支付实际交易结果;当返回结果为“USERPAYING”时,商户系统可设置间隔时间(建议10秒)重新查询支付结果,直到支付成功或超时(建议30秒);\n" + | |||||
| "提醒2:在调用查询接口返回后,如果交易状况不明晰,请调用【撤销订单API】,此时如果交易失败则关闭订单,该单不能再支付成功;如果交易成功,则将扣款退回到用户账户。当撤销无返回或错误时,请再次调用。注意:请勿扣款后立即调用【撤销订单API】,建议至少15秒后再调用。撤销订单API需要双向证书。") | |||||
| @PostMapping("pay_order_create_v2") | |||||
| public ResultData saveMicopayPayOrder(@RequestBody Map<String, String> paramMap, HttpServletRequest request) { | |||||
| logger.info("saveMicopayPayOrder: " + paramMap.toString()); | |||||
| WxMerchantBUser user = getUser(); | |||||
| String orderIdStr = paramMap.get("orderId"); | String orderIdStr = paramMap.get("orderId"); | ||||
| String couponOrderIdStr = paramMap.get("couponOrderId"); | String couponOrderIdStr = paramMap.get("couponOrderId"); | ||||
| String authCode = paramMap.get("authCode"); | |||||
| String payPriceStr = paramMap.get("payPrice"); | String payPriceStr = paramMap.get("payPrice"); | ||||
| if (StringUtils.isBlank(orderIdStr)) { | if (StringUtils.isBlank(orderIdStr)) { | ||||
| logger.error("orderId不能为空: " + paramMap.toString()); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||||
| logger.error("orderId不能为空"); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "orderId不能为空"); | |||||
| } | } | ||||
| if (StringUtils.isBlank(couponOrderIdStr)) { | |||||
| logger.error("couponOrderId不能为空: " + paramMap.toString()); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||||
| if (StringUtils.isBlank(authCode)) { | |||||
| logger.error("authCode不能为空"); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "authCode不能为空"); | |||||
| } | } | ||||
| if (StringUtils.isBlank(payPriceStr)) { | if (StringUtils.isBlank(payPriceStr)) { | ||||
| logger.error("payPrice不能为空: " + paramMap.toString()); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||||
| logger.error("payPrice不能为空"); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "payPrice不能为空"); | |||||
| } | |||||
| String ipStr = IPUtil.getIpAddr(request); | |||||
| WxMerchantBUser wxMerchantBUser = wxMerchantBUserService.getById(user.getId()); | |||||
| if (wxMerchantBUser == null) { | |||||
| logger.error("核销员ID不存在:" + user.getId()); | |||||
| throw new MallinkException(ErrorCode.USER_IS_EMPTY.getCode(), "核销员ID不存在或者无权限"); | |||||
| } | } | ||||
| wxMerchantBUser.setBuserId(getBuserId()); | |||||
| Long couponOrderId = 0L, orderId = 0L; | Long couponOrderId = 0L, orderId = 0L; | ||||
| BigDecimal totalFee = new BigDecimal(payPriceStr); | BigDecimal totalFee = new BigDecimal(payPriceStr); | ||||
| totalFee.setScale(2, BigDecimal.ROUND_HALF_UP); // 第一个变量是小数位数,第二个变量是取舍方法(四舍五入) | totalFee.setScale(2, BigDecimal.ROUND_HALF_UP); // 第一个变量是小数位数,第二个变量是取舍方法(四舍五入) | ||||
| Integer payPrice = totalFee.multiply(new BigDecimal(100)).intValue(); | Integer payPrice = totalFee.multiply(new BigDecimal(100)).intValue(); | ||||
| try { | try { | ||||
| couponOrderId = Long.valueOf(couponOrderIdStr); | |||||
| orderId = Long.valueOf(orderIdStr); | orderId = Long.valueOf(orderIdStr); | ||||
| } catch (NumberFormatException e) { | } catch (NumberFormatException e) { | ||||
| couponOrderId = 0L; | |||||
| orderId = 0L; | orderId = 0L; | ||||
| logger.error("couponOrderId参数不正确: " + paramMap.toString()); | |||||
| logger.error("orderId参数不正确: " + paramMap.toString()); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | ||||
| } | } | ||||
| @@ -426,61 +397,46 @@ public class WxMicroPayController extends BaseController { | |||||
| return new ResultData(ErrorCode.ORDER_IS_NOT_FIND); | return new ResultData(ErrorCode.ORDER_IS_NOT_FIND); | ||||
| } | } | ||||
| WxCouponOrderCVo wxCouponOrderCVo = wxCouponOrderService.detailCUserVo(couponOrderIdStr); | |||||
| if (wxCouponOrderCVo == null) { | |||||
| return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); | |||||
| } | |||||
| WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(wxCouponOrderCVo.getcUserId()); | |||||
| if (wxCUserBasicInfo != null && EnumCreditLockedStatus.CLOSE.getCode().equals(wxCUserBasicInfo.getStatus())) { | |||||
| return new ResultData(ErrorCode.MEMBER_IS_LOCKED); | |||||
| } | |||||
| if (wxCouponOrderCVo.getValidStartDate() != null && wxCouponOrderCVo.getValidEndDate() != null ) { | |||||
| Date now = new Date(); | |||||
| if (wxCouponOrderCVo.getValidStartDate().getTime() > now.getTime()) { | |||||
| logger.error("此券有效期未开始:" + couponOrderIdStr); | |||||
| return new ResultData(ErrorCode.COUPON_ORDER_IS_EARLIER_THAN_VALIDDATE); | |||||
| } | |||||
| if (wxCouponOrderCVo.getValidEndDate().getTime() < now.getTime()) { | |||||
| logger.error("此券有效期已结束:" + couponOrderIdStr); | |||||
| return new ResultData(ErrorCode.COUPON_ORDER_IS_LATER_THAN_VALIDDATE); | |||||
| WxCouponOrder wxCouponOrder = null; | |||||
| if (StringUtils.isNotBlank(couponOrderIdStr)) { | |||||
| try { | |||||
| couponOrderId = Long.valueOf(couponOrderIdStr); | |||||
| } catch (NumberFormatException e) { | |||||
| couponOrderId = 0L; | |||||
| logger.error("couponOrderId参数不正确: " + paramMap.toString()); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||||
| } | } | ||||
| wxCouponOrder = wxCouponOrderService.getById(couponOrderId); | |||||
| } | } | ||||
| WxCouponOrder wxCouponOrder = wxCouponOrderService.getById(couponOrderId); | |||||
| if (wxCouponOrder == null) { | |||||
| logger.error("券ID不存在:" + couponOrderId); | |||||
| return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); | |||||
| } | |||||
| WxMerchantBUser wxMerchantBUser = wxMerchantBUserService.getById(getUser().getId()); | |||||
| if (wxMerchantBUser == null) { | |||||
| logger.error("核销员ID不存在:" + getUser().getId()); | |||||
| throw new MallinkException(ErrorCode.USER_IS_EMPTY.getCode(), "核销员ID不存在或者无权限"); | |||||
| Integer remainPrice = payPrice; | |||||
| if (wxCouponOrder != null) { | |||||
| try { | |||||
| remainPrice = wxCouponOrderService.microPayPreVerify(microOrder, wxCouponOrder, wxMerchantBUser, payPrice); | |||||
| } catch (MallinkException e) { | |||||
| logger.error("核销异常: " + e.getMessage()); | |||||
| return new ResultData(e.getErrorCode(), e.getMessage()); | |||||
| } catch (Exception e) { | |||||
| logger.error("核销异常: " + e.getMessage()); | |||||
| return new ResultData(ErrorCode.VERIFY_ERROR, e.getMessage()); | |||||
| } | |||||
| } | } | ||||
| wxMerchantBUser.setBuserId(getBuserId()); | |||||
| WxPayOrder record = new WxPayOrder(); | |||||
| record.setTenantId(user.getTenantId()); | |||||
| record.setOrderId(microOrder.getId()); | |||||
| record.setCUserId(microOrder.getCUserId()); | |||||
| record.setAuthCode(authCode); | |||||
| record.setPayAmount(remainPrice); | |||||
| record.setIp(ipStr); | |||||
| WxCouponOrder couponOrder = null; | |||||
| Integer remainPrice = payPrice; | |||||
| try { | try { | ||||
| remainPrice = wxCouponOrderService.microPayVerify(microOrder, wxCouponOrder, wxMerchantBUser, payPrice); | |||||
| return wxPayOrderService.createMicroPayOrder(user, record, EnumPayWay.PAY_WAY_WECHAT); | |||||
| } catch (MallinkException e) { | } catch (MallinkException e) { | ||||
| logger.error("核销异常: " + e.getMessage()); | |||||
| logger.error("payment wechat, order create error, req 2: " + record.toString() + ", e:" + e.getMessage()); | |||||
| return new ResultData(e.getErrorCode(), e.getMessage()); | return new ResultData(e.getErrorCode(), e.getMessage()); | ||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| logger.error("核销异常: " + e.getMessage()); | |||||
| return new ResultData(ErrorCode.VERIFY_ERROR, e.getMessage()); | |||||
| } | |||||
| if(couponOrder != null) { | |||||
| wxCouponOrderService.sendInsideCouponVerifyMsg(couponOrder.getTenantId(), couponOrderId, wxMerchantBUser.getId()); | |||||
| logger.error("payment wechat, order create error, req 3: " + record.toString() + ", e:" + e.getMessage()); | |||||
| return new ResultData(ErrorCode.PAY_ORDER_ERROR, e.getMessage()); | |||||
| } | } | ||||
| Double remainPriceD = Double.valueOf(remainPrice); | |||||
| String remainPriceStr = String.format("%.2f", remainPriceD); | |||||
| return new ResultData(remainPrice); | |||||
| } | } | ||||
| } | } | ||||
| @@ -1178,6 +1178,7 @@ public class PosServiceImpl implements PosService { | |||||
| posCouponOrderVerify.setTenantId(couponOrderCVo.getTenantId()); | posCouponOrderVerify.setTenantId(couponOrderCVo.getTenantId()); | ||||
| posCouponOrderVerify.setCouponOrderId(couponOrderCVo.getId()); | posCouponOrderVerify.setCouponOrderId(couponOrderCVo.getId()); | ||||
| posCouponOrderVerify.setPosOrderId(posOrderId); | posCouponOrderVerify.setPosOrderId(posOrderId); | ||||
| posCouponOrderVerify.setOrderFrom(EnumOrderFrom.POS.getCode()); | |||||
| posCouponOrderVerify.setState(EnumEnableType.Enable.getCode()); | posCouponOrderVerify.setState(EnumEnableType.Enable.getCode()); | ||||
| posCouponOrderVerify.setCreateDate(new Date()); | posCouponOrderVerify.setCreateDate(new Date()); | ||||
| posCouponOrderVerify.setUpdateDate(new Date()); | posCouponOrderVerify.setUpdateDate(new Date()); | ||||
| @@ -1272,6 +1273,7 @@ public class PosServiceImpl implements PosService { | |||||
| posCouponOrderVerify.setTenantId(couponOrderCVo.getTenantId()); | posCouponOrderVerify.setTenantId(couponOrderCVo.getTenantId()); | ||||
| posCouponOrderVerify.setCouponOrderId(couponOrderCVo.getId()); | posCouponOrderVerify.setCouponOrderId(couponOrderCVo.getId()); | ||||
| posCouponOrderVerify.setPosOrderId(posOrderId); | posCouponOrderVerify.setPosOrderId(posOrderId); | ||||
| posCouponOrderVerify.setOrderFrom(EnumOrderFrom.POS.getCode()); | |||||
| posCouponOrderVerify.setState(EnumEnableType.Enable.getCode()); | posCouponOrderVerify.setState(EnumEnableType.Enable.getCode()); | ||||
| try { | try { | ||||
| posCouponOrderVerifyService.saveOrUpdate(posCouponOrderVerify); | posCouponOrderVerifyService.saveOrUpdate(posCouponOrderVerify); | ||||
| @@ -20,7 +20,7 @@ public class PosCouponOrderVerify extends BaseEntity { | |||||
| private Long couponOrderId; | private Long couponOrderId; | ||||
| @io.swagger.annotations.ApiModelProperty(value="POS订单ID",name="posOrderId") | @io.swagger.annotations.ApiModelProperty(value="POS订单ID",name="posOrderId") | ||||
| private Long posOrderId; | private Long posOrderId; | ||||
| @io.swagger.annotations.ApiModelProperty(value="状态,0-inside,1-POS",name="orderFrom") | |||||
| @io.swagger.annotations.ApiModelProperty(value="来源,0-inside,1-POS",name="orderFrom") | |||||
| private Integer orderFrom; | private Integer orderFrom; | ||||
| @io.swagger.annotations.ApiModelProperty(value="状态,0-使用中,1-禁用",name="state") | @io.swagger.annotations.ApiModelProperty(value="状态,0-使用中,1-禁用",name="state") | ||||
| private Integer state; | private Integer state; | ||||
| @@ -62,7 +62,7 @@ public class WxPayOrder extends BaseEntity { | |||||
| @io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:inside, 1:POS支付)",name="payFrom") | @io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:inside, 1:POS支付)",name="payFrom") | ||||
| private Integer payFrom; | private Integer payFrom; | ||||
| @io.swagger.annotations.ApiModelProperty(value="支付订单号,来源于POS",name="posPayOrderId") | |||||
| @io.swagger.annotations.ApiModelProperty(value="支付订单号,来源于POS, inside时,填写couponOrderId",name="posPayOrderId") | |||||
| private Long posPayOrderId; | private Long posPayOrderId; | ||||
| @io.swagger.annotations.ApiModelProperty(value="支付订单创建时间,来源于POS",name="posPayOrderTime") | @io.swagger.annotations.ApiModelProperty(value="支付订单创建时间,来源于POS",name="posPayOrderTime") | ||||
| private Long posPayOrderTime; | private Long posPayOrderTime; | ||||
| @@ -1,5 +1,6 @@ | |||||
| package com.iformall.service; | package com.iformall.service; | ||||
| import com.alibaba.fastjson.JSONArray; | |||||
| import com.github.pagehelper.PageInfo; | import com.github.pagehelper.PageInfo; | ||||
| import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
| import com.iformall.domain.po.WxCUser; | import com.iformall.domain.po.WxCUser; | ||||
| @@ -195,8 +196,10 @@ public interface WxCouponOrderService { | |||||
| /** | /** | ||||
| * B端-收银台-支持优惠券 | * B端-收银台-支持优惠券 | ||||
| */ | */ | ||||
| List<WxCouponOrderCVo> queryMicroPayCouponOrder(WxMerchantBUser user, WxCUser cUser, Integer price); | |||||
| JSONArray queryMicroPayCouponOrder(WxMerchantBUser user, WxCUser cUser, Integer price); | |||||
| Integer microPayVerify(WxOrder microOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer price); | |||||
| Integer microPayPreVerify(WxOrder microOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer price); | |||||
| Integer microPayVerify(WxMerchantBUser bUser, Long couponOrderId); | |||||
| } | } | ||||
| @@ -34,7 +34,7 @@ public interface WxPayOrderService { | |||||
| * 微信支付订单查询 | * 微信支付订单查询 | ||||
| * @param record 支付订单 | * @param record 支付订单 | ||||
| */ | */ | ||||
| ResultData payOrderQuery(WxPayOrder record); | |||||
| ResultData payOrderQuery(WxMerchantBUser user, WxPayOrder record); | |||||
| /** | /** | ||||
| * 微信支付关闭订单 | * 微信支付关闭订单 | ||||
| @@ -73,7 +73,7 @@ public interface WxPayOrderService { | |||||
| * @param record | * @param record | ||||
| * @param transactionId | * @param transactionId | ||||
| */ | */ | ||||
| void handleMicroOrderPaySuccess(WxPayOrder record, String transactionId, String openId, String isSubscribe); | |||||
| void handleMicroOrderPaySuccess(WxMerchantBUser user, WxPayOrder record, String transactionId, String openId, String isSubscribe); | |||||
| /** | /** | ||||
| * 支付状态处理 | * 支付状态处理 | ||||
| @@ -1,5 +1,6 @@ | |||||
| package com.iformall.service.impl; | package com.iformall.service.impl; | ||||
| import com.alibaba.fastjson.JSONArray; | |||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||||
| import com.github.pagehelper.PageHelper; | import com.github.pagehelper.PageHelper; | ||||
| @@ -20,6 +21,7 @@ import com.iformall.enums.*; | |||||
| import com.iformall.exception.MallinkException; | import com.iformall.exception.MallinkException; | ||||
| import com.iformall.mapper.*; | import com.iformall.mapper.*; | ||||
| import com.iformall.mq.MqBaseProducer; | import com.iformall.mq.MqBaseProducer; | ||||
| import com.iformall.pay.WxPayConstant; | |||||
| import com.iformall.service.*; | import com.iformall.service.*; | ||||
| import com.iformall.utils.DateUtils; | import com.iformall.utils.DateUtils; | ||||
| import com.iformall.utils.PayUtils; | import com.iformall.utils.PayUtils; | ||||
| @@ -125,6 +127,8 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { | |||||
| @Autowired | @Autowired | ||||
| WxPayOrderMapper payOrderMapper; | WxPayOrderMapper payOrderMapper; | ||||
| private final SimpleDateFormat mydateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | |||||
| @Override | @Override | ||||
| public PageInfo<WxCouponOrder> listAsPage(WxCouponOrder record, Integer pageIndex, Integer pageSize) { | public PageInfo<WxCouponOrder> listAsPage(WxCouponOrder record, Integer pageIndex, Integer pageSize) { | ||||
| return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponOrderMapper.findList(record)); | return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponOrderMapper.findList(record)); | ||||
| @@ -364,7 +368,11 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { | |||||
| logger.error("核销异常:updatete num " + num); | logger.error("核销异常:updatete num " + num); | ||||
| throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), "updatete num " + num); | throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), "updatete num " + num); | ||||
| } | } | ||||
| doAfterVerify(couponOrder, bUser, wxCoupon); | |||||
| return couponOrder; | |||||
| } | |||||
| private void doAfterVerify(WxCouponOrder couponOrder, WxMerchantBUser bUser, WxCoupon wxCoupon) { | |||||
| // 成长值 | // 成长值 | ||||
| try { | try { | ||||
| WxOrder order = wxOrderMapper.selectById(couponOrder.getOrderId()); | WxOrder order = wxOrderMapper.selectById(couponOrder.getOrderId()); | ||||
| @@ -393,8 +401,6 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { | |||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| logger.error("积分值:" + e.getMessage()); | logger.error("积分值:" + e.getMessage()); | ||||
| } | } | ||||
| return couponOrder; | |||||
| } | } | ||||
| @Override | @Override | ||||
| @@ -1042,29 +1048,106 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { | |||||
| } | } | ||||
| @Override | @Override | ||||
| public List<WxCouponOrderCVo> queryMicroPayCouponOrder(WxMerchantBUser user, WxCUser cUser, Integer payPrice) { | |||||
| public JSONArray queryMicroPayCouponOrder(WxMerchantBUser user, WxCUser cUser, Integer payPrice) { | |||||
| Map<String, Object> coQ = new HashMap<>(); | Map<String, Object> coQ = new HashMap<>(); | ||||
| coQ.put("tenantId", user.getTenantId()); | coQ.put("tenantId", user.getTenantId()); | ||||
| coQ.put("cUserId", user.getId()); | coQ.put("cUserId", user.getId()); | ||||
| coQ.put("merchantId", user.getMerchantId()); | coQ.put("merchantId", user.getMerchantId()); | ||||
| List<WxCouponOrderCVo> avaCoList = wxCouponOrderMapper.findAvailCouponOrder(coQ); | List<WxCouponOrderCVo> avaCoList = wxCouponOrderMapper.findAvailCouponOrder(coQ); | ||||
| List<WxCouponOrderCVo> avaCouponOrderList = avaCoList.stream().filter(couponOrderCVo -> { | |||||
| if (couponOrderCVo.getType().equals(EnumCouponType.COUPON_MANJIAN.getCode())) { | |||||
| if (payPrice > couponOrderCVo.getUsePrice()) { | |||||
| return true; | |||||
| } | |||||
| } else { | |||||
| return true; | |||||
| JSONArray couponList = new JSONArray(); | |||||
| for(int i=0;i<avaCoList.size();i++) { | |||||
| WxCouponOrderCVo couponOrderCVo = avaCoList.get(i); | |||||
| try { | |||||
| JSONObject couponObj = calcOneCouponPay(couponOrderCVo, payPrice); | |||||
| couponList.add(couponObj); | |||||
| } catch (MallinkException e) { | |||||
| logger.error(e.getMessage()); | |||||
| } catch (Exception e) { | |||||
| logger.error(e.getMessage()); | |||||
| } | } | ||||
| return false; | |||||
| }).collect(Collectors.toList()); | |||||
| return avaCouponOrderList; | |||||
| } | |||||
| return couponList; | |||||
| } | |||||
| /** | |||||
| * 券支付计算 | |||||
| * @param couponOrderCVo | |||||
| * @return | |||||
| */ | |||||
| private JSONObject calcOneCouponPay(WxCouponOrderCVo couponOrderCVo, Integer payPrice) { | |||||
| JSONObject retObj = new JSONObject(); | |||||
| Date curDate = new Date(); | |||||
| // 2. 检查券类型 支付可用(1, 2, 6), | |||||
| EnumCouponType couponType = EnumCouponType.getEnum(couponOrderCVo.getCouponType()); | |||||
| if (!(couponType.getCode().equals(EnumCouponType.COUPON_MULTIMCH.getCode()) || | |||||
| couponType.getCode().equals(EnumCouponType.COUPON_MANJIAN.getCode()) || | |||||
| couponType.getCode().equals(EnumCouponType.COUPON_DAIJIN.getCode()))) { | |||||
| logger.error(ErrorCode.VERIFY_COUPON_TYPE_NOT_SUPPORT.getMessage()); | |||||
| throw new MallinkException(ErrorCode.VERIFY_COUPON_TYPE_NOT_SUPPORT); | |||||
| } | |||||
| // 2. 券包状态检查 | |||||
| if (couponOrderCVo.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_OVER_TIME.getCode()) { | |||||
| logger.error("已过期: couponOrder-" + couponOrderCVo.getId()); | |||||
| throw new MallinkException(ErrorCode.COUPON_ORDER_IS_OVER_TIME); | |||||
| } | |||||
| if (couponOrderCVo.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()) { | |||||
| logger.error("已作废: couponOrder-" + couponOrderCVo.getId()); | |||||
| throw new MallinkException(ErrorCode.COUPON_ORDER_IS_INVALID); | |||||
| } | |||||
| if (couponOrderCVo.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) { | |||||
| logger.error("已经核销过的券: couponOrder-" + couponOrderCVo.getId()); | |||||
| throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED); | |||||
| } | |||||
| // 3. 检查有效期 | |||||
| if (couponOrderCVo.getValidStartDate() != null && couponOrderCVo.getValidEndDate() != null) { | |||||
| if (couponOrderCVo.getValidStartDate().getTime() > curDate.getTime()) { | |||||
| logger.error("此券有效期未开始:" + couponOrderCVo.getId()); | |||||
| throw new MallinkException(ErrorCode.COUPON_ORDER_IS_EARLIER_THAN_VALIDDATE); | |||||
| } | |||||
| if (couponOrderCVo.getValidEndDate().getTime() < curDate.getTime()) { | |||||
| logger.error("此券有效期已结束:" + couponOrderCVo.getId()); | |||||
| throw new MallinkException(ErrorCode.COUPON_ORDER_IS_EARLIER_THAN_VALIDDATE); | |||||
| } | |||||
| } | |||||
| // 4 券已过期 | |||||
| if (couponOrderCVo.getExpiredTime().before(curDate)) { | |||||
| logger.error("此券已过期:" + couponOrderCVo.getId()); | |||||
| throw new MallinkException(ErrorCode.COUPON_ORDER_IS_EARLIER_THAN_VALIDDATE); | |||||
| } | |||||
| // 5. 满减券检查使用金额 | |||||
| if (couponType.equals(EnumCouponType.COUPON_MANJIAN)) { | |||||
| if (payPrice < couponOrderCVo.getUsePrice()) { | |||||
| logger.error(ErrorCode.VERIFY_MANJIAN_USER_PRICE_NOT_TOUCH.getMessage()); | |||||
| throw new MallinkException(ErrorCode.VERIFY_MANJIAN_USER_PRICE_NOT_TOUCH); | |||||
| } | |||||
| } | |||||
| // 6. 生成优惠券抵扣信息 | |||||
| retObj.put(WxPayConstant.COUPON_ID, couponOrderCVo.getId().toString()); | |||||
| retObj.put(WxPayConstant.TITLE, couponOrderCVo.getTitle()); | |||||
| retObj.put(WxPayConstant.COUPON_TYPE, couponType.getMessage()); | |||||
| retObj.put(WxPayConstant.PRICE, couponOrderCVo.getPrice()); | |||||
| if (couponType.equals(EnumCouponType.COUPON_MANJIAN)) { | |||||
| retObj.put(WxPayConstant.USE_PRICE, couponOrderCVo.getUsePrice()); | |||||
| String des = String.format("%s-满%s元可用,可抵%s元, 过期时间: %s", | |||||
| couponType.getMessage(), couponOrderCVo.getUsePriceStr(), couponOrderCVo.getPriceStr(), | |||||
| mydateFormat.format(couponOrderCVo.getExpiredTime())); | |||||
| retObj.put(WxPayConstant.COUPON_DES, des); | |||||
| } else { | |||||
| String des = String.format("%s-可抵%s元, 过期时间: %s", | |||||
| couponType.getMessage(), couponOrderCVo.getPriceStr(), | |||||
| mydateFormat.format(couponOrderCVo.getExpiredTime())); | |||||
| retObj.put(WxPayConstant.COUPON_DES, des); | |||||
| } | |||||
| return retObj; | |||||
| } | } | ||||
| @Override | @Override | ||||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | ||||
| public Integer microPayVerify(WxOrder microOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer payPrice) { | |||||
| public Integer microPayPreVerify(WxOrder microOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer payPrice) { | |||||
| // 1. 获取券信息 | // 1. 获取券信息 | ||||
| WxCoupon wxCoupon = wxCouponMapper.selectById(couponOrder.getCouponId()); | WxCoupon wxCoupon = wxCouponMapper.selectById(couponOrder.getCouponId()); | ||||
| if (wxCoupon == null) { | if (wxCoupon == null) { | ||||
| @@ -1128,7 +1211,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { | |||||
| int num = 0; | int num = 0; | ||||
| try { | try { | ||||
| couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); //1核销 | |||||
| couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.POS_PRE_VERIFY.getCode()); //预核销 | |||||
| couponOrder.setBUserId(bUser.getId()); | couponOrder.setBUserId(bUser.getId()); | ||||
| couponOrder.setVerifyType(EnumCouponVerifyType.VERIFY_B.getCode()); | couponOrder.setVerifyType(EnumCouponVerifyType.VERIFY_B.getCode()); | ||||
| couponOrder.setUpdateDate(new Date()); | couponOrder.setUpdateDate(new Date()); | ||||
| @@ -1158,9 +1241,10 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { | |||||
| setPayOrderNo(String.valueOf(id)); | setPayOrderNo(String.valueOf(id)); | ||||
| setPayAmount(wxCoupon.getPrice()); | setPayAmount(wxCoupon.getPrice()); | ||||
| setPayVendor(EnumPayWay.PAY_WAY_WEAPP.getCode()); | setPayVendor(EnumPayWay.PAY_WAY_WEAPP.getCode()); | ||||
| setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); | |||||
| setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); | |||||
| setShare(EnumPayShare.NO.getCode()); | setShare(EnumPayShare.NO.getCode()); | ||||
| setPayFrom(EnumPayFrom.INSIDE_B.getCode()); | setPayFrom(EnumPayFrom.INSIDE_B.getCode()); | ||||
| setPosPayOrderId(couponOrder.getId()); | |||||
| }}; | }}; | ||||
| try { | try { | ||||
| @@ -1178,37 +1262,25 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { | |||||
| updateOrder.setId(microOrder.getId()); | updateOrder.setId(microOrder.getId()); | ||||
| updateOrder.setRealPayment(remainPrice); | updateOrder.setRealPayment(remainPrice); | ||||
| wxOrderMapper.updateById(updateOrder); | wxOrderMapper.updateById(updateOrder); | ||||
| // 成长值 | |||||
| try { | |||||
| WxOrder orderByCoupon = wxOrderMapper.selectById(couponOrder.getOrderId()); | |||||
| wxScoreRulesService.addScore2(EnumScoreType.CONSUMPTION, orderByCoupon, wxCoupon.getBusiness()); | |||||
| } catch (Exception e) { | |||||
| logger.error("成长值:" + e.getMessage()); | |||||
| } | |||||
| // 积分 | |||||
| try { | |||||
| //-------此处为【现金支付】记录增加积分操作------- | |||||
| WxCreditHistory creditHistory = new WxCreditHistory(); | |||||
| creditHistory.setOperatorType(EnumUserType.BUSER.getCode()); | |||||
| creditHistory.setOperatorId(bUser.getId()); | |||||
| creditHistory.setCUserId(couponOrder.getcUserId()); | |||||
| creditHistory.setCreateDate(new Date()); | |||||
| creditHistory.setTenantId(couponOrder.getTenantId()); | |||||
| creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); | |||||
| creditHistory.setCouponId(wxCoupon.getId()); | |||||
| creditHistory.setBusinessId(wxCoupon.getBusiness()); | |||||
| creditHistory.setSpend(couponOrder.getCouponPrice()); | |||||
| //如果券与商户一对一 则直接将消费商户更新为此商户 若一对多 则消费商户显示多商户 | |||||
| creditHistory.setMerchantId(bUser.getMerchantId()); | |||||
| creditHistory.setBuserId(bUser.getBuserId()); | |||||
| wxCreditHistoryService.saveOrUpdate(creditHistory); | |||||
| } catch (Exception e) { | |||||
| logger.error("积分值:" + e.getMessage()); | |||||
| } | |||||
| return remainPrice; | return remainPrice; | ||||
| } | } | ||||
| @Override | |||||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||||
| public Integer microPayVerify(WxMerchantBUser bUser, Long couponOrderId) { | |||||
| WxCouponOrder updateCouponOrder = new WxCouponOrder(); | |||||
| updateCouponOrder.setId(couponOrderId); | |||||
| updateCouponOrder.setBUserId(bUser.getId()); | |||||
| updateCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); | |||||
| updateCouponOrder.setUpdateDate(new Date()); | |||||
| // 核销状态更新 | |||||
| int num = wxCouponOrderMapper.updateById(updateCouponOrder); | |||||
| if (num == 1) { | |||||
| WxCouponOrder couponOrder = wxCouponOrderMapper.selectById(couponOrderId); | |||||
| WxCoupon coupon = wxCouponMapper.selectById(couponOrder.getCouponId()); | |||||
| doAfterVerify(couponOrder, bUser, coupon); | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| } | } | ||||
| @@ -521,7 +521,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||||
| String transactionId = returnMap.get("transaction_id"); | String transactionId = returnMap.get("transaction_id"); | ||||
| record.setTransactionId(transactionId); | record.setTransactionId(transactionId); | ||||
| record.setUpdateTime(new Date()); | record.setUpdateTime(new Date()); | ||||
| handleMicroOrderPaySuccess(record, transactionId, openId, isSubscribe); | |||||
| handleMicroOrderPaySuccess(user, record, transactionId, openId, isSubscribe); | |||||
| return new ResultData(Result.SUCCESS, "刷卡支付成功", returnMap); | return new ResultData(Result.SUCCESS, "刷卡支付成功", returnMap); | ||||
| } else { | } else { | ||||
| String err_code = returnMap.get("err_code"); | String err_code = returnMap.get("err_code"); | ||||
| @@ -592,7 +592,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||||
| String transactionId = returnMap.get("transaction_id"); | String transactionId = returnMap.get("transaction_id"); | ||||
| record.setTransactionId(transactionId); | record.setTransactionId(transactionId); | ||||
| record.setUpdateTime(new Date()); | record.setUpdateTime(new Date()); | ||||
| handleMicroOrderPaySuccess(record, transactionId, openId, isSubscribe); | |||||
| handleMicroOrderPaySuccess(user, record, transactionId, openId, isSubscribe); | |||||
| return new ResultData(Result.SUCCESS, "刷卡支付成功", returnMap); | return new ResultData(Result.SUCCESS, "刷卡支付成功", returnMap); | ||||
| } else { | } else { | ||||
| String err_code = returnMap.get("err_code"); | String err_code = returnMap.get("err_code"); | ||||
| @@ -685,7 +685,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||||
| * 微信订单查询 | * 微信订单查询 | ||||
| */ | */ | ||||
| @Override | @Override | ||||
| public ResultData payOrderQuery(WxPayOrder record) { | |||||
| public ResultData payOrderQuery(WxMerchantBUser user, WxPayOrder record) { | |||||
| try { | try { | ||||
| if (StringUtils.isBlank(record.getPayOrderNo())) { | if (StringUtils.isBlank(record.getPayOrderNo())) { | ||||
| @@ -727,7 +727,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||||
| String transactionId = returnMap.get("transaction_id"); | String transactionId = returnMap.get("transaction_id"); | ||||
| String tradeType = returnMap.get("trade_type"); | String tradeType = returnMap.get("trade_type"); | ||||
| if ("MICROPAY".equals(tradeType)) { | if ("MICROPAY".equals(tradeType)) { | ||||
| handleMicroOrderPaySuccess(record, transactionId, openId, sub_is_subscribe); | |||||
| handleMicroOrderPaySuccess(user, record, transactionId, openId, sub_is_subscribe); | |||||
| } else { | } else { | ||||
| handleOrderPaySuccess(record, transactionId, EnumPayEndFrom.QUERY.getCode()); | handleOrderPaySuccess(record, transactionId, EnumPayEndFrom.QUERY.getCode()); | ||||
| } | } | ||||
| @@ -1237,7 +1237,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||||
| @Override | @Override | ||||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | ||||
| public void handleMicroOrderPaySuccess(WxPayOrder record, String transactionId, String openId, String isSubscribe) { | |||||
| public void handleMicroOrderPaySuccess(WxMerchantBUser user, WxPayOrder record, String transactionId, String openId, String isSubscribe) { | |||||
| Date currentDate = new Date(); | Date currentDate = new Date(); | ||||
| EnumPayStatus payStatus = EnumPayStatus.getEnum(record.getPayOrderStatus()); | EnumPayStatus payStatus = EnumPayStatus.getEnum(record.getPayOrderStatus()); | ||||
| // 判断支付状态 | // 判断支付状态 | ||||
| @@ -1312,6 +1312,29 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||||
| throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "支付订单数据库更新失败: " + e.getMessage()); | throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "支付订单数据库更新失败: " + e.getMessage()); | ||||
| } | } | ||||
| // B端收银台核销券处理 | |||||
| WxPayOrder payOrderQ = new WxPayOrder(); | |||||
| payOrderQ.setOrderId(order.getId()); | |||||
| payOrderQ.setCUserId(userQ.getId()); | |||||
| payOrderQ.setPayFrom(EnumPayFrom.INSIDE_B.getCode()); | |||||
| payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); | |||||
| try { | |||||
| WxPayOrder unPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper<>(payOrderQ)); | |||||
| if (unPayOrder != null) { | |||||
| if (unPayOrder.getPosPayOrderId() != null) { | |||||
| try { | |||||
| wxCouponOrderService.microPayVerify(user, unPayOrder.getPosPayOrderId()); | |||||
| } catch (Exception e) { | |||||
| logger.error(e.getMessage()); | |||||
| } | |||||
| // 更新后处理 | |||||
| wxCouponOrderService.sendInsideCouponVerifyMsg(unPayOrder.getTenantId(), unPayOrder.getPosPayOrderId(), user.getId()); | |||||
| } | |||||
| } | |||||
| } catch (Exception e) { | |||||
| logger.error(e.getMessage()); | |||||
| } | |||||
| // 修改订单状态 | // 修改订单状态 | ||||
| order.setCUserId(userQ.getId()); | order.setCUserId(userQ.getId()); | ||||
| try { | try { | ||||
| @@ -1325,6 +1348,8 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||||
| throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "订单更新"); | throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "订单更新"); | ||||
| } | } | ||||
| // TODO B端收银台支付,核销券相关操作 | |||||
| // B端刷卡支付发券 | // B端刷卡支付发券 | ||||
| logger.info("订单刷卡发券 开始"); | logger.info("订单刷卡发券 开始"); | ||||
| try { | try { | ||||