Browse Source

[POS][修改]:code整理

release_toaliyun_real
Stormeye Wu 6 years ago
parent
commit
ccdd945933
4 changed files with 123 additions and 43 deletions
  1. +76
    -43
      mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java
  2. +29
    -0
      mallinkPosApi/src/test/java/com/iformall/pos/test/PosAppTest.java
  3. +1
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java
  4. +17
    -0
      mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml

+ 76
- 43
mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java View File

@@ -304,13 +304,13 @@ public class PosServiceImpl implements PosService {
logger.error("已经核销过的券: couponOrder-" + couponOrderCVo.getId()); logger.error("已经核销过的券: couponOrder-" + couponOrderCVo.getId());
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED); throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED);
} }
if (couponOrderCVo.getCouponOrderStatus().equals(EnumCouponOrderStatus.POS_PRE_VERIFY.getCode())) {
logger.info("券已被预核销: " + couponOrderIdStr);
if (!couponOrderCVo.getBUserId().equals(buUserId)) {
logger.error(ErrorCode.VERIFY_PRE_BUSER_NOT_EQUAL.getMessage() + ": " + buUserIdStr);
throw new MallinkException(ErrorCode.VERIFY_PRE_BUSER_NOT_EQUAL);
}
if (actionType.equals(EnumVerifyActionType.CHECK)) {
if (actionType.equals(EnumVerifyActionType.CHECK)) {
if (couponOrderCVo.getCouponOrderStatus().equals(EnumCouponOrderStatus.POS_PRE_VERIFY.getCode())) {
logger.info("券已被预核销: " + couponOrderIdStr);
if (!couponOrderCVo.getBUserId().equals(buUserId)) {
logger.error(ErrorCode.VERIFY_PRE_BUSER_NOT_EQUAL.getMessage() + ": " + buUserIdStr);
throw new MallinkException(ErrorCode.VERIFY_PRE_BUSER_NOT_EQUAL);
}
if (StringUtils.isBlank(posOrderIdStr)) { if (StringUtils.isBlank(posOrderIdStr)) {
logger.error(ErrorCode.VERIFY_PRE_POS_ORDER_IS_EMPTY.getMessage()); logger.error(ErrorCode.VERIFY_PRE_POS_ORDER_IS_EMPTY.getMessage());
throw new MallinkException(ErrorCode.VERIFY_PRE_POS_ORDER_IS_EMPTY); throw new MallinkException(ErrorCode.VERIFY_PRE_POS_ORDER_IS_EMPTY);
@@ -322,41 +322,45 @@ public class PosServiceImpl implements PosService {
throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(),
ErrorCode.SYS_PARAMETER_CAST_ERROR.getMessage() + ", pos_order_id:" + posOrderIdStr); ErrorCode.SYS_PARAMETER_CAST_ERROR.getMessage() + ", pos_order_id:" + posOrderIdStr);
} }
}
// check pos order是否一致
PosCouponOrderVerify posCouponOrderVerifyQ = new PosCouponOrderVerify();
posCouponOrderVerifyQ.setTenantId(tenantId);
posCouponOrderVerifyQ.setCouponOrderId(couponOrderId);
posCouponOrderVerifyQ.setPosOrderId(posOrderId);
posCouponOrderVerifyQ.setState(EnumEnableType.Enable.getCode());
List<PosCouponOrderVerify> posCouponOrderVerifyList = posCouponOrderVerifyService.getList(posCouponOrderVerifyQ);
if (posCouponOrderVerifyList.size() != 1) {
logger.error(ErrorCode.VERIFY_PRE_POS_ORDER_NOT_EQUAL.getMessage() + ": " + posOrderIdStr);
throw new MallinkException(ErrorCode.VERIFY_PRE_POS_ORDER_NOT_EQUAL);
}
logger.info("券可以核销: " + couponOrderIdStr);
if (actionType.equals(EnumVerifyActionType.CHECK)) {
// check pos order是否一致
PosCouponOrderVerify posCouponOrderVerifyQ = new PosCouponOrderVerify();
posCouponOrderVerifyQ.setTenantId(tenantId);
posCouponOrderVerifyQ.setCouponOrderId(couponOrderId);
posCouponOrderVerifyQ.setPosOrderId(posOrderId);
posCouponOrderVerifyQ.setState(EnumEnableType.Enable.getCode());
List<PosCouponOrderVerify> posCouponOrderVerifyList = posCouponOrderVerifyService.getList(posCouponOrderVerifyQ);
if (posCouponOrderVerifyList.size() != 1) {
logger.error(ErrorCode.VERIFY_PRE_POS_ORDER_NOT_EQUAL.getMessage() + ": " + posOrderIdStr);
throw new MallinkException(ErrorCode.VERIFY_PRE_POS_ORDER_NOT_EQUAL);
}
logger.info("券可以被核销: " + couponOrderIdStr);
return retMap;
} else if (couponOrderCVo.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode())) {
logger.info("券可以被核销: " + couponOrderIdStr);
return retMap; return retMap;
} }
if (actionType.equals(EnumVerifyActionType.VERIFY_INDEPENT) || actionType.equals(EnumVerifyActionType.VERIFY_PAY)) {
try {
doVerify(couponOrderCVo, wxCoupon, merchantId, buUserId, posOrderId, retMap);
return retMap;
} catch (MallinkException e) {
logger.error(e.getMessage());
throw new MallinkException(e.getErrorCode(), e.getMessage());
} catch (Exception e) {
logger.error(e.getMessage());
throw new MallinkException(500, e.getMessage());
} else if (actionType.equals(EnumVerifyActionType.PRE_VERIFY)) {
if (couponOrderCVo.getCouponOrderStatus().equals(EnumCouponOrderStatus.POS_PRE_VERIFY.getCode())) {
logger.info("券已被预核销: " + couponOrderIdStr);
if (!couponOrderCVo.getBUserId().equals(buUserId)) {
logger.error(ErrorCode.VERIFY_PRE_BUSER_NOT_EQUAL.getMessage() + ": " + buUserIdStr);
throw new MallinkException(ErrorCode.VERIFY_PRE_BUSER_NOT_EQUAL);
}
// check pos order是否一致
PosCouponOrderVerify posCouponOrderVerifyQ = new PosCouponOrderVerify();
posCouponOrderVerifyQ.setTenantId(tenantId);
posCouponOrderVerifyQ.setCouponOrderId(couponOrderId);
posCouponOrderVerifyQ.setPosOrderId(posOrderId);
posCouponOrderVerifyQ.setState(EnumEnableType.Enable.getCode());
List<PosCouponOrderVerify> posCouponOrderVerifyList = posCouponOrderVerifyService.getList(posCouponOrderVerifyQ);
if (posCouponOrderVerifyList.size() != 1) {
logger.error(ErrorCode.VERIFY_PRE_POS_ORDER_NOT_EQUAL.getMessage() + ": " + posOrderIdStr);
throw new MallinkException(ErrorCode.VERIFY_PRE_POS_ORDER_NOT_EQUAL);
} }
}
}
if (couponOrderCVo.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode())) {
logger.info("券可以核销: " + couponOrderIdStr);
if (actionType.equals(EnumVerifyActionType.CHECK)) {
return retMap; return retMap;
} }
if (actionType.equals(EnumVerifyActionType.PRE_VERIFY)) {
if (couponOrderCVo.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode())) {
logger.info("券可以被预核销: " + couponOrderIdStr);
try { try {
doPreVerify(couponOrderCVo, buUserId, posOrderId); doPreVerify(couponOrderCVo, buUserId, posOrderId);
return retMap; return retMap;
@@ -368,7 +372,32 @@ public class PosServiceImpl implements PosService {
throw new MallinkException(500, e.getMessage()); throw new MallinkException(500, e.getMessage());
} }
} }
if (actionType.equals(EnumVerifyActionType.VERIFY_INDEPENT) || actionType.equals(EnumVerifyActionType.VERIFY_PAY)) {
} else {
// if (actionType.equals(EnumVerifyActionType.VERIFY_INDEPENT ) ||actionType.equals(EnumVerifyActionType.VERIFY_PAY))
boolean blVerify = false;
if (couponOrderCVo.getCouponOrderStatus().equals(EnumCouponOrderStatus.POS_PRE_VERIFY.getCode())) {
logger.info("券已被预核销: " + couponOrderIdStr);
if (!couponOrderCVo.getBUserId().equals(buUserId)) {
logger.error(ErrorCode.VERIFY_PRE_BUSER_NOT_EQUAL.getMessage() + ": " + buUserIdStr);
throw new MallinkException(ErrorCode.VERIFY_PRE_BUSER_NOT_EQUAL);
}
// check pos order是否一致
PosCouponOrderVerify posCouponOrderVerifyQ = new PosCouponOrderVerify();
posCouponOrderVerifyQ.setTenantId(tenantId);
posCouponOrderVerifyQ.setCouponOrderId(couponOrderId);
posCouponOrderVerifyQ.setPosOrderId(posOrderId);
posCouponOrderVerifyQ.setState(EnumEnableType.Enable.getCode());
List<PosCouponOrderVerify> posCouponOrderVerifyList = posCouponOrderVerifyService.getList(posCouponOrderVerifyQ);
if (posCouponOrderVerifyList.size() != 1) {
logger.error(ErrorCode.VERIFY_PRE_POS_ORDER_NOT_EQUAL.getMessage() + ": " + posOrderIdStr);
throw new MallinkException(ErrorCode.VERIFY_PRE_POS_ORDER_NOT_EQUAL);
}
blVerify = true;
} else if (couponOrderCVo.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode())) {
logger.info("券可以被预核销: " + couponOrderIdStr);
blVerify = true;
}
if (blVerify) {
try { try {
doVerify(couponOrderCVo, wxCoupon, merchantId, buUserId, posOrderId, retMap); doVerify(couponOrderCVo, wxCoupon, merchantId, buUserId, posOrderId, retMap);
return retMap; return retMap;
@@ -381,7 +410,7 @@ public class PosServiceImpl implements PosService {
} }
} }
} }
String errMessage = "核销异常:未知的核销状态" + couponOrderCVo.getCouponOrderStatus();
String errMessage = "核销异常:未知的核销状态-" + couponOrderCVo.getCouponOrderStatus() + ", 核销action-" + actionType.getCode();
logger.error(errMessage); logger.error(errMessage);
throw new MallinkException(500, errMessage); throw new MallinkException(500, errMessage);
} }
@@ -501,7 +530,7 @@ public class PosServiceImpl implements PosService {
throw new MallinkException(e.getErrorCode(), e.getMessage()); throw new MallinkException(e.getErrorCode(), e.getMessage());
} }
} }
String errMessage = "取消异常:未知的核销状态" + couponOrderCVo.getCouponOrderStatus();
String errMessage = "取消异常:未知的核销状态-" + couponOrderCVo.getCouponOrderStatus()+ ", 核销action-" + actionType.getCode();
logger.error(errMessage); logger.error(errMessage);
throw new MallinkException(500, errMessage); throw new MallinkException(500, errMessage);
} }
@@ -538,15 +567,16 @@ public class PosServiceImpl implements PosService {
couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.POS_PRE_VERIFY.getCode()); couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.POS_PRE_VERIFY.getCode());
couponOrder.setBUserId(buUserId); couponOrder.setBUserId(buUserId);
couponOrder.setUpdateDate(new Date()); couponOrder.setUpdateDate(new Date());
num = couponOrderMapper.updateVerifyCouponOrder(couponOrder);
num = couponOrderMapper.updateVerifyCouponOrderStatus(couponOrder);
} catch (Exception e) { } catch (Exception e) {
logger.error("db failed: couponOrder-" + couponOrderCVo.getId() + ", e:" + e.getMessage()); logger.error("db failed: couponOrder-" + couponOrderCVo.getId() + ", e:" + e.getMessage());
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage());
} }
if (num != 1) { if (num != 1) {
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);
} }
logger.info("预核销已完成: " + couponOrderCVo.getId());
} }


/** /**
@@ -602,6 +632,7 @@ public class PosServiceImpl implements PosService {
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);
} }
logger.info("预核销已取消: " + couponOrderCVo.getId());
} }


/** /**
@@ -641,7 +672,7 @@ public class PosServiceImpl implements PosService {
couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); //1核销 couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); //1核销
couponOrder.setBUserId(buUserId); couponOrder.setBUserId(buUserId);
couponOrder.setUpdateDate(new Date()); couponOrder.setUpdateDate(new Date());
num = couponOrderMapper.updateVerifyCouponOrder(couponOrder);
num = couponOrderMapper.updateVerifyCouponOrderStatus(couponOrder);
} catch (Exception e) { } catch (Exception e) {
logger.error("db failed: couponOrder-" + couponOrderCVo.getId() + ", e:" + e.getMessage()); logger.error("db failed: couponOrder-" + couponOrderCVo.getId() + ", e:" + e.getMessage());
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage());
@@ -682,6 +713,7 @@ public class PosServiceImpl implements PosService {
} catch (Exception e) { } catch (Exception e) {
logger.error("核销积分值异常:" + e.getMessage()); logger.error("核销积分值异常:" + e.getMessage());
} }
logger.info("核销已完成: " + couponOrderCVo.getId());
} }


/** /**
@@ -771,5 +803,6 @@ public class PosServiceImpl implements PosService {
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);
} }
logger.info("核销已取消: " + couponOrderCVo.getId());
} }
} }

+ 29
- 0
mallinkPosApi/src/test/java/com/iformall/pos/test/PosAppTest.java View File

@@ -6,8 +6,10 @@ import com.iformall.PosApplication;
import com.iformall.pay.WxPayConstant; import com.iformall.pay.WxPayConstant;
import com.iformall.pay.WxPayment; import com.iformall.pay.WxPayment;
import org.junit.Assert; import org.junit.Assert;
import org.junit.FixMethodOrder;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
@@ -33,6 +35,7 @@ import java.util.Map;
@SpringBootTest(classes = { PosApplication.class}) @SpringBootTest(classes = { PosApplication.class})
@ActiveProfiles("dev") @ActiveProfiles("dev")
@AutoConfigureMockMvc @AutoConfigureMockMvc
@FixMethodOrder(MethodSorters.JVM)
public class PosAppTest { public class PosAppTest {


@Autowired @Autowired
@@ -251,4 +254,30 @@ public class PosAppTest {
System.out.println("response sign: " + resSigned); System.out.println("response sign: " + resSigned);
Assert.assertEquals(resSigned, true); Assert.assertEquals(resSigned, true);
} }

@Test
public void couponOrderPayVerifyTest() throws Exception {
Map<String, String> 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("/couponOrderPayVerify")
.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<String,String> respMap = mapper.readValue(responseStr, Map.class);
boolean resSigned = WxPayment.verifyNotifyHMAC(respMap, devResKey);
System.out.println("response sign: " + resSigned);
Assert.assertEquals(resSigned, true);
}
} }

+ 1
- 0
mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java View File

@@ -23,6 +23,7 @@ public interface WxCouponOrderMapper extends CommonMapper<WxCouponOrder, Long> {


// 券包核销 // 券包核销
int updateVerifyCouponOrder(WxCouponOrder wxCouponOrder); int updateVerifyCouponOrder(WxCouponOrder wxCouponOrder);
int updateVerifyCouponOrderStatus(WxCouponOrder wxCouponOrder);
int cancelVerifyCouponOrder(WxCouponOrder wxCouponOrder); int cancelVerifyCouponOrder(WxCouponOrder wxCouponOrder);


//统一的计数接口 //统一的计数接口


+ 17
- 0
mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml View File

@@ -103,6 +103,23 @@
where `tenant_id`=#{tenantId} and id=#{id} and `b_user_id` is null where `tenant_id`=#{tenantId} and id=#{id} and `b_user_id` is null
</update> </update>


<update id="updateVerifyCouponOrderStatus" parameterType="com.iformall.domain.po.WxCouponOrder">
update wx_coupon_order
set `coupon_order_status` = #{couponOrderStatus},
`b_user_id` = #{bUserId},
`update_date` = #{updateDate}
where 1=1
and `tenant_id`=#{tenantId}
and id=#{id}
<if test=" null == #{bUserId} ">
and `b_user_id` is null
</if>
<if test=" null != #{bUserId} ">
and `b_user_id` = #{bUserId}
</if>

</update>

<update id="cancelVerifyCouponOrder" parameterType="com.iformall.domain.po.WxCouponOrder"> <update id="cancelVerifyCouponOrder" parameterType="com.iformall.domain.po.WxCouponOrder">
update wx_coupon_order update wx_coupon_order
set `coupon_order_status` = #{couponOrderStatus}, set `coupon_order_status` = #{couponOrderStatus},


Loading…
Cancel
Save