Explorar el Código

[POS][修改]:核销取消支持强制

release_toaliyun_real
Stormeye Wu hace 6 años
padre
commit
d93c645e68
Se han modificado 4 ficheros con 88 adiciones y 15 borrados
  1. +4
    -3
      mallinkPosApi/src/main/java/com/iformall/controller/PosController.java
  2. +31
    -12
      mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java
  3. +52
    -0
      mallinkPosApi/src/test/java/com/iformall/pos/test/PosAppTest.java
  4. +1
    -0
      mallinkService/src/main/java/com/iformall/pay/WxPayConstant.java

+ 4
- 3
mallinkPosApi/src/main/java/com/iformall/controller/PosController.java Ver fichero

@@ -284,9 +284,10 @@ public class PosController extends BaseController {
"\"tenant_id\":\"string(必填)\"," +
"\"merchant_id\":\"string(必填)\"," +
"\"bu_user_id\":\"string(必填)\"," +
"\"coupon_order_id\":\"string(必填)\" +" +
"\"nonce_str\":\"string(必填)\" +" +
"\"pos_order_id\":\"string(必填)\" }")
"\"coupon_order_id\":\"string(必填)\"" +
"\"nonce_str\":\"string(必填)\"" +
"\"pos_order_id\":\"string(必填)\"" +
"\"force\":\"string(选填true/false)\" }")
@PostMapping("/couponOrderVerifyCancel")
public Map<String, String> couponOrderIndependentVerifyCancel(@RequestBody Map<String, String> params) {
JSONObject payContent = new JSONObject();


+ 31
- 12
mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java Ver fichero

@@ -396,6 +396,7 @@ public class PosServiceImpl implements PosService {
String buUserIdStr = params.get(WxPayConstant.BUSER_ID); // POS操作员ID
String couponOrderIdStr = params.get(WxPayConstant.COUPON_ORDER_ID); // 券ID
String posOrderIdStr = params.get(WxPayConstant.COUPON_ORDER_ID); // POS订单ID
String forceStr = params.get(WxPayConstant.FORCE); // 是否强制

if (StringUtils.isBlank(tenantId)) {
String errMessage = "request params[tenant_id] error.";
@@ -486,6 +487,12 @@ public class PosServiceImpl implements PosService {
if (couponOrderCVo.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) &&
actionType.equals(EnumVerifyActionType.VERIFY_CANCEL)) {
logger.info("券已被核销: " + couponOrderIdStr);
boolean force = false;
if (StringUtils.isNotBlank(forceStr)) {
force = Boolean.valueOf(forceStr);
}
// 检查是否有发放的券, 有则无法退券

try {
cancelVerify(couponOrderCVo, buUserId, posOrderId);
return retMap;
@@ -527,6 +534,7 @@ public class PosServiceImpl implements PosService {
try {
WxCouponOrder couponOrder = new WxCouponOrder();
couponOrder.setId(couponOrderCVo.getId());
couponOrder.setTenantId(couponOrderCVo.getTenantId());
couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.POS_PRE_VERIFY.getCode());
couponOrder.setBUserId(buUserId);
couponOrder.setUpdateDate(new Date());
@@ -558,15 +566,20 @@ public class PosServiceImpl implements PosService {
posCouponOrderVerify.setState(EnumEnableType.Enable.getCode());
List<PosCouponOrderVerify> 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 {
PosCouponOrderVerify updateCouponOrderVerify = new PosCouponOrderVerify();
updateCouponOrderVerify.setId(posCouponOrderVerify.getId());
updateCouponOrderVerify.setTenantId(posCouponOrderVerify.getTenantId());
updateCouponOrderVerify.setState(EnumEnableType.Disable.getCode());
updateCouponOrderVerify.setUpdateDate(new Date());
posCouponOrderVerifyService.saveOrUpdate(updateCouponOrderVerify);
// 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);
@@ -577,10 +590,10 @@ public class PosServiceImpl implements PosService {
try {
WxCouponOrder couponOrder = new WxCouponOrder();
couponOrder.setId(couponOrderCVo.getId());
couponOrder.setTenantId(couponOrderCVo.getTenantId());
couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode());
couponOrder.setBUserId(buUserId);
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());
@@ -725,7 +738,13 @@ public class PosServiceImpl implements PosService {
posCouponOrderVerify = posCouponOrderVerifyList.get(0);
if (posCouponOrderVerify != null) {
try {
posCouponOrderVerifyService.deleteById(posCouponOrderVerify.getId());
PosCouponOrderVerify updateCouponOrderVerify = new PosCouponOrderVerify();
updateCouponOrderVerify.setId(posCouponOrderVerify.getId());
updateCouponOrderVerify.setTenantId(posCouponOrderVerify.getTenantId());
updateCouponOrderVerify.setState(EnumEnableType.Disable.getCode());
updateCouponOrderVerify.setUpdateDate(new Date());
posCouponOrderVerifyService.saveOrUpdate(updateCouponOrderVerify);
//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());


+ 52
- 0
mallinkPosApi/src/test/java/com/iformall/pos/test/PosAppTest.java Ver fichero

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

@Test
public void couponOrderPreVerifyTest() 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("/couponOrderPreVerify")
.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);
}

@Test
public void couponOrderPreVerifyCancelTest() 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("/couponOrderPreVerifyCancel")
.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/pay/WxPayConstant.java Ver fichero

@@ -15,6 +15,7 @@ public class WxPayConstant {
public final static String NONCE_STR = "nonce_str";
public final static String DEV_ID = "dev_id";
public final static String SIGN = "sign";
public final static String FORCE = "force";


public final static String TENANT_ID = "tenant_id";


Cargando…
Cancelar
Guardar