diff --git a/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java b/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java index c9823c4d2..57aee9586 100644 --- a/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java +++ b/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java @@ -476,6 +476,7 @@ public class PosServiceImpl implements PosService { } try { cancelPreVerify(couponOrderCVo, buUserId, posOrderId); + return retMap; } catch (MallinkException e) { logger.error(e.getMessage()); throw new MallinkException(e.getErrorCode(), e.getMessage()); @@ -487,6 +488,7 @@ public class PosServiceImpl implements PosService { logger.info("券已被核销: " + couponOrderIdStr); try { cancelVerify(couponOrderCVo, buUserId, posOrderId); + return retMap; } catch (MallinkException e) { logger.error(e.getMessage()); throw new MallinkException(e.getErrorCode(), e.getMessage()); @@ -688,11 +690,12 @@ public class PosServiceImpl implements PosService { creditHistory.setCouponId(couponOrderCVo.getCouponId()); int num = creditHistoryService.cancelCredit(creditHistory); if (num <= 1) { - logger.error("核销积分历史回退失败: " + creditHistory.toString()); - return; + logger.warn("核销积分历史回退: " + creditHistory.toString()); } } catch (Exception e) { - logger.error("核销积分历史回退:" + e.getMessage()); + String errMessage = "核销积分历史回退:" + e.getMessage(); + logger.error(errMessage); + throw new MallinkException(500, errMessage); } // 2. 成长值历史回退 try { @@ -703,11 +706,12 @@ public class PosServiceImpl implements PosService { scoreHistory.setOrderId(couponOrderCVo.getOrderId()); int num = scoreRulesService.cancelScore(scoreHistory); if (num <= 1) { - logger.error("核销成长值历史回退失败: " + scoreHistory.toString()); - return; + logger.warn("核销成长值历史回退: " + scoreHistory.toString()); } } catch (Exception e) { - logger.error("核销成长值历史回退:" + e.getMessage()); + String errMessage = "核销成长值历史回退:" + e.getMessage(); + logger.error(errMessage); + throw new MallinkException(500, errMessage); } // 3. update posOrderId @@ -718,29 +722,28 @@ public class PosServiceImpl implements PosService { posCouponOrderVerify.setState(EnumEnableType.Enable.getCode()); List posCouponOrderVerifyList = posCouponOrderVerifyService.getList(posCouponOrderVerify); if (posCouponOrderVerifyList.size() == 1) { - try { - PosCouponOrderVerify updateOrder = new PosCouponOrderVerify(); - updateOrder.setId(posCouponOrderVerify.getId()); - updateOrder.setState(EnumEnableType.Disable.getCode()); - updateOrder.setUpdateDate(new Date()); - posCouponOrderVerifyService.saveOrUpdate(updateOrder); - } catch (Exception e) { - logger.error("db failed: couponOrder-" + couponOrderCVo.getId() + ", e:" + e.getMessage()); - throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + posCouponOrderVerify = posCouponOrderVerifyList.get(0); + if (posCouponOrderVerify != null) { + try { + posCouponOrderVerifyService.deleteById(posCouponOrderVerify.getId()); + } catch(Exception e){ + logger.error("db failed: couponOrder-" + couponOrderCVo.getId() + ", e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } } } else { - logger.error(ErrorCode.VERIFY_PRE_POS_ORDER_NOT_EQUAL.getMessage() + ": " + posOrderId); - throw new MallinkException(ErrorCode.VERIFY_PRE_POS_ORDER_NOT_EQUAL); + logger.error(ErrorCode.VERIFY_POS_ORDER_NOT_EQUAL.getMessage() + ": " + posOrderId); + throw new MallinkException(ErrorCode.VERIFY_POS_ORDER_NOT_EQUAL); } // 4. update couponOrder int num = 0; try { WxCouponOrder couponOrder = new WxCouponOrder(); couponOrder.setId(couponOrderCVo.getId()); - couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); //1核销 - couponOrder.setBUserId(buUserId); + couponOrder.setTenantId(couponOrderCVo.getTenantId()); + couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); couponOrder.setUpdateDate(new Date()); - num = couponOrderMapper.updateVerifyCouponOrder(couponOrder); + num = couponOrderMapper.cancelVerifyCouponOrder(couponOrder); } catch (Exception e) { logger.error("db failed: couponOrder-" + couponOrderCVo.getId() + ", e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); diff --git a/mallinkPosApi/src/test/java/com/iformall/pos/test/PosAppTest.java b/mallinkPosApi/src/test/java/com/iformall/pos/test/PosAppTest.java index 647ec61b4..90c130d63 100644 --- a/mallinkPosApi/src/test/java/com/iformall/pos/test/PosAppTest.java +++ b/mallinkPosApi/src/test/java/com/iformall/pos/test/PosAppTest.java @@ -149,7 +149,7 @@ public class PosAppTest { } @Test - public void couponOrderIndependForVerifyTest() throws Exception { + public void couponOrderIndependentVerifyTest() throws Exception { Map reqObj = new HashMap<>(); reqObj.put(WxPayConstant.DEV_ID, devId); reqObj.put(WxPayConstant.TENANT_ID, "456"); @@ -173,4 +173,30 @@ public class PosAppTest { System.out.println("response sign: " + resSigned); Assert.assertEquals(resSigned, true); } + + @Test + public void couponOrderVerifyCancelTest() throws Exception { + Map reqObj = new HashMap<>(); + reqObj.put(WxPayConstant.DEV_ID, devId); + reqObj.put(WxPayConstant.TENANT_ID, "456"); + reqObj.put(WxPayConstant.MERCHANT_ID, "317109453987631104"); + reqObj.put(WxPayConstant.BUSER_ID, "317111133332426752"); + reqObj.put(WxPayConstant.COUPON_ORDER_ID, "318978990426783744"); + reqObj.put(WxPayConstant.NONCE_STR, "1"); + reqObj.put(WxPayConstant.POS_ORDER_ID, "1"); + reqObj.put(WxPayConstant.SIGN, WxPayment.createSignHMAC(reqObj, devReqKey)); + String reqJsonStr = JSONObject.toJSONString(reqObj); + RequestBuilder request = MockMvcRequestBuilders.post("/couponOrderVerifyCancel") + .contentType(MediaType.APPLICATION_JSON) + .content(reqJsonStr); + MvcResult result = mockMvc.perform(request).andReturn(); + String responseStr = result.getResponse().getContentAsString(); + System.out.println(responseStr); + + ObjectMapper mapper = new ObjectMapper(); + Map respMap = mapper.readValue(responseStr, Map.class); + boolean resSigned = WxPayment.verifyNotifyHMAC(respMap, devResKey); + System.out.println("response sign: " + resSigned); + Assert.assertEquals(resSigned, true); + } } diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index b1d877c5d..8573f2652 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -281,6 +281,7 @@ public enum ErrorCode{ VERIFY_PRE_POS_ORDER_IS_EMPTY(12052, "预核销POS订单ID为空"), VERIFY_PRE_POS_ORDER_NOT_EQUAL(12053, "预核销POS订单不一致,请先取消上次预核销"), VERIFY_BUSER_MERCHANT_NOT_BELONG(12054, "核销员不属于此商户"), + VERIFY_POS_ORDER_NOT_EQUAL(12055, "核销POS订单不一致,请先取消上次预核销"), MSG_REPEAT_SEND(12061, "短信重复发送"), VERIFY_COUPON_ORDER_MERCHANT_IS_NULL(12062, "卡券核销失败,请查看适用门店"), diff --git a/mallinkService/src/main/java/com/iformall/domain/po/ThDevInfo.java b/mallinkService/src/main/java/com/iformall/domain/po/ThDevInfo.java index 1b02cecb2..5fc34ee85 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/ThDevInfo.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/ThDevInfo.java @@ -1,6 +1,8 @@ package com.iformall.domain.po; import lombok.Data; +import lombok.EqualsAndHashCode; + import javax.persistence.*; import java.util.*; import javax.persistence.Transient; @@ -9,6 +11,7 @@ import javax.persistence.Id; @Table(name = "th_dev_info") @Data +@EqualsAndHashCode(callSuper = true) public class ThDevInfo extends BaseEntity { @Id diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java index 318b5178e..4c6980b6a 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java @@ -23,6 +23,7 @@ public interface WxCouponOrderMapper extends CommonMapper { // 券包核销 int updateVerifyCouponOrder(WxCouponOrder wxCouponOrder); + int cancelVerifyCouponOrder(WxCouponOrder wxCouponOrder); //统一的计数接口 int findCount(WxCouponOrder wxCouponOrder); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCreditHistoryServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCreditHistoryServiceImpl.java index 11edc21b8..5b5f98239 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCreditHistoryServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCreditHistoryServiceImpl.java @@ -246,10 +246,12 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { if (wxCreditHistory != null) { num = wxCreditHistoryMapper.deleteByPrimaryKey(wxCreditHistory.getId()); if (num != 1) { - logger.error("删除积分历史出错"+ wxCreditHistory.toString()); + String errMessage = "删除积分历史出错"; + logger.error(errMessage + wxCreditHistory.toString()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), errMessage); } } else { - logger.error("未找到积分历史"); + logger.info("未找到积分历史"); return 0; } // 2. user diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java index a601c0384..0b33a4146 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java @@ -2,11 +2,13 @@ package com.iformall.service.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.domain.po.*; import com.iformall.enums.EnumBusiness; import com.iformall.enums.EnumScoreRules; import com.iformall.enums.EnumScoreType; +import com.iformall.exception.MallinkException; import com.iformall.mapper.WxCUserBasicInfoMapper; import com.iformall.mapper.WxCUserMapper; import com.iformall.mapper.WxScoreHistoryMapper; @@ -198,6 +200,7 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { num = wxScoreHistoryMapper.deleteByPrimaryKey(history.getId()); if (num != 1) { logger.error("删除成长值历史出错"+ history.toString()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "删除成长值历史出错"); } } else { logger.error("未找到成长值历史"); diff --git a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml index c18eca8b2..c1b2aeba4 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml @@ -103,6 +103,14 @@ where `tenant_id`=#{tenantId} and id=#{id} and `b_user_id` is null + + update wx_coupon_order + set `coupon_order_status` = #{couponOrderStatus}, + `b_user_id` = null, + `update_date` = #{updateDate} + where `tenant_id`=#{tenantId} and id=#{id} + +