From c2412d8b45fb0b4da316baeb1bf60e17c3af12c8 Mon Sep 17 00:00:00 2001 From: xiaohanzi Date: Tue, 30 Nov 2021 19:30:26 +0800 Subject: [PATCH] fix jmnotify --- .../migration/V2021112900001__dynamicId.sql | 2 + .../controller/callback/JinMaoController.java | 88 +++++++++---------- .../iformall/common/SysConfigConstant.java | 1 + .../service/WxCouponOrderService.java | 3 + .../impl/WxCouponOrderServiceImpl.java | 85 ++++++++++++++++++ .../impl/haikangweishi/HaiKangWeiShiUtil.java | 51 +---------- 6 files changed, 139 insertions(+), 91 deletions(-) diff --git a/mallinkAdmin/src/main/resources/db/migration/V2021112900001__dynamicId.sql b/mallinkAdmin/src/main/resources/db/migration/V2021112900001__dynamicId.sql index c43b08290..5daba6b39 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V2021112900001__dynamicId.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V2021112900001__dynamicId.sql @@ -23,6 +23,8 @@ CREATE TABLE `sys_config_value` ( insert into `sys_config`(`id`,`config_item_key`,`config_item_remark`,`create_date`,`update_date`,`status`) values (1,'vierfySeconds','核销过期时间,秒','2021-11-29 17:53:23','2021-11-29 17:53:23',0); +insert into `sys_config`(`id`,`config_item_key`,`config_item_remark`,`create_date`,`update_date`,`status`) values +(2,'defaultMerchantBUserId','外部设备核销默认商户员工编号','2021-11-29 17:53:23','2021-11-29 17:53:23',0); insert into `sys_config_value`(`id`,`config_item_id`,`config_item_value`,`tenant_id`,`parent_tenant_id`,`create_date`,`update_date`) values (1,1,'60','789',NULL,'2021-11-29 17:54:07','2021-11-29 17:54:07'); diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/JinMaoController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/JinMaoController.java index 3fa65aa81..a97d8672d 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/JinMaoController.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/JinMaoController.java @@ -1,13 +1,23 @@ package com.iformall.controller.callback; +import com.iformall.common.ErrorCode; +import com.iformall.common.ResultData; +import com.iformall.common.SysConfigConstant; import com.iformall.controller.base.BaseController; import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.WxCouponOrderCVo; import com.iformall.enums.EnumAssignTagsTrigger; +import com.iformall.enums.EnumCouponType; +import com.iformall.enums.EnumCouponValidType; +import com.iformall.enums.EnumCouponVerifyType; +import com.iformall.enums.EnumCreditLockedStatus; +import com.iformall.exception.MallinkException; import com.iformall.service.*; import com.iformall.service.tags.jinmao.JinMaoOrderTagsDeveloper; import com.iformall.service.tags.jinmao.JinMaoUserTagsDeveloper; +import com.iformall.utils.DateUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -56,8 +66,8 @@ public class JinMaoController extends BaseController { @Autowired private JinMaoUserTagsDeveloper jinMaoUserTagsDeveloper; - - + @Autowired + private WxCouponOrderService wxCouponOrderService; /** * 金茂东风湖运动公园用户数据推送。 @@ -197,54 +207,44 @@ public class JinMaoController extends BaseController { } @RequestMapping(value = "/dfh/verify") - public void dfhVerify(@RequestBody Map param) throws Exception { + public ResultData dfhVerify(@RequestBody Map param) throws Exception { logger.info("dfh verify:"+param); try { - String price = param.get("price")==null?"":param.get("price").toString(); - Integer payment = 0; - if(StringUtils.isNotBlank(price)) { - payment = new BigDecimal(price) - .multiply(new BigDecimal(100)) - .intValue(); - } - Integer num = param.get("num")==null?1:Integer.parseInt(param.get("num").toString()); - String userPhone = param.get("userPhone")==null?"":param.get("userPhone").toString(); - String gymName = param.get("gymName")==null?"":param.get("gymName").toString(); - String payWay = param.get("payWay")==null?"":param.get("payWay").toString(); - String orderId = param.get("ID")==null?"":param.get("ID").toString(); - String timeStr = param.get("time")==null?"":param.get("time").toString(); - Date paymentTime = null; - if(StringUtils.isNotBlank(timeStr)){ - paymentTime = sdf.parse(timeStr); + String couponOrderIdStr = param.get("couponOrderId")==null?"":param.get("couponOrderId").toString(); + if (StringUtils.isBlank(couponOrderIdStr)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); } - String productName = param.get("productName")==null?"":param.get("productName").toString(); - if(StringUtils.isNotBlank(userPhone) && userPhone.matches("^1[0-9]{10}$") - && StringUtils.isNotBlank(orderId)){ - WxCUserBasicInfo basicInfo = new WxCUserBasicInfo(); - basicInfo.setPhone(userPhone); - wxCUserBasicInfoService.registerJinmao(tenantEntity,basicInfo); - - JmSportOrder order = new JmSportOrder(); - order.updateTenantInfo(tenantEntity); - order.setOrderId(orderId); - order.setUserPhone(userPhone); - order.setUserId(basicInfo.getId()); - order.setProductName(productName); - order.setNum(num); - order.setPrice(price); - order.setPayment(payment); - order.setPaymentTime(paymentTime); - order.setPayWay(payWay); - order.setGymName(gymName); - jmSportOrderService.saveOrUpdate(order); - - wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_DEV, basicInfo,tenantEntity,jinMaoOrderTagsDeveloper); - - }else{ - logger.error("JinMaoController --dfhOrder--订单手机号为空或者订单号为空-userPhone{}"+userPhone+"-orderId{}"+orderId); + + String _decodeCouponOrderId = WxCouponOrderCVo.getDecodeExpiredCouponOrderId(couponOrderIdStr); + if (_decodeCouponOrderId.contains(WxCouponOrderCVo.arg)) { + String[] decodeids = _decodeCouponOrderId.split(WxCouponOrderCVo.arg); + couponOrderIdStr = decodeids[0]; + String expiredtimeStr = decodeids[1]; + Date expiredtime = DateUtils.string2Date(expiredtimeStr).getTime(); + if (expiredtime.before(new Date())) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"码已失效,请更新二维码后重试"); + } } + + Long couponOrderId = 0L; + try { + couponOrderId = Long.valueOf(couponOrderIdStr); + } catch (NumberFormatException e) { + couponOrderId = 0L; + logger.error("couponOrderId参数不正确: " + param.toString()); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + + try { + WxCouponOrder couponOrder = wxCouponOrderService.verifyByEquiment(couponOrderId, "1035", "1037", "闸机扫码核销"); + return new ResultData(couponOrder); + }catch(Exception e) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),e.getMessage()); + } + }catch(Exception e){ logger.error("JinMaoController --dfhOrder",e); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),e.getMessage()); } } diff --git a/mallinkService/src/main/java/com/iformall/common/SysConfigConstant.java b/mallinkService/src/main/java/com/iformall/common/SysConfigConstant.java index 72c7dbd86..88f0adc65 100644 --- a/mallinkService/src/main/java/com/iformall/common/SysConfigConstant.java +++ b/mallinkService/src/main/java/com/iformall/common/SysConfigConstant.java @@ -3,4 +3,5 @@ package com.iformall.common; public class SysConfigConstant { public static final String vierfy_seconds_key="vierfySeconds"; + public static final String default_merchant_b_user = "defaultMerchantBUserId"; } diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java index 94b1e0b70..6b2292519 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java @@ -57,6 +57,9 @@ public interface WxCouponOrderService { * @param bUser 核销人(登录用户) */ WxCouponOrder verify(WxCouponOrder couponOrder, WxMerchantBUser bUser, EnumCouponVerifyType couponVerifyType); + + WxCouponOrder verifyByEquiment(Long couponOrderId,String tenantId,String parentTenantId,String remark); + /** * 核销后发送消息 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java index e95689f7d..ab42e6544 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java @@ -12,6 +12,7 @@ import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.common.SysConfigConstant; import com.iformall.domain.dto.WxSharingOrderDto; import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; @@ -163,6 +164,13 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Autowired OrderFactory orderFactory; + + @Autowired + WxCUserBasicInfoService wxCUserBasicInfoService; + @Autowired + SysConfigService sysConfigService; + @Autowired + WxMerchantBUserService wxMerchantBUserService; private final SimpleDateFormat mydateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -543,6 +551,83 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { couponOrder.setMerchantId(merchantId); return couponOrder; } + + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public WxCouponOrder verifyByEquiment(Long couponOrderId,String tenantId,String parentTenantId,String remark) { + + TenantEntity tenantEntity = new TenantEntity(); + tenantEntity.setTenantId(tenantId); + tenantEntity.setParentTenantId(parentTenantId); + + WxCouponOrderCVo wxCouponOrderCVo = this.detailCUserVo(String.valueOf(couponOrderId),tenantEntity); + if (wxCouponOrderCVo == null) { + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); + } + + WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(wxCouponOrderCVo.getcUserId(),wxCouponOrderCVo.getFinalTenantId()); + if (wxCUserBasicInfo != null && EnumCreditLockedStatus.CLOSE.getCode().equals(wxCUserBasicInfo.getStatus())) { + throw new MallinkException(ErrorCode.MEMBER_IS_LOCKED); + } + + Date now = new Date(); + if (wxCouponOrderCVo.getValidType().equals(EnumCouponValidType.BETWEEN_TWO_TIME.getCode())){ +// && !wxCouponOrderCVo.getType().equals(EnumCouponType.COUPON_PREORDER.getCode())) { + if(wxCouponOrderCVo.getType().equals(EnumCouponType.COUPON_PREORDER.getCode())){ + if (wxCouponOrderCVo.getPickStartDate().after(now)) { + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_EARLIER_THAN_VALIDDATE); + } + if (wxCouponOrderCVo.getPickEndDate().before(now)) { + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_LATER_THAN_VALIDDATE); + } + }else{ + if (wxCouponOrderCVo.getValidStartDate().after(now)) { + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_EARLIER_THAN_VALIDDATE); + } + if (wxCouponOrderCVo.getValidEndDate().before(now)) { + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_LATER_THAN_VALIDDATE); + } + } + + } else { + if (wxCouponOrderCVo.getExpiredTime().before(now)) { + throw new MallinkException(ErrorCode.COUPON_IS_EXPIRED); + } + } + + WxCouponOrder wxCouponOrder = this.getById(couponOrderId,tenantEntity.getTenantId()); + if (wxCouponOrder == null) { + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); + } + + SysConfig sysConfig = sysConfigService.getByKey(SysConfigConstant.default_merchant_b_user, tenantEntity); + if (null == sysConfig) { + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL.getCode(),"系统配置【外部设备核销默认商户员工编号】为空"); + } + + WxMerchantBUser wxMerchantBUser = wxMerchantBUserService.getById(Long.parseLong(sysConfig.getConfigItemValue())); + if (wxMerchantBUser == null) { + throw new MallinkException(ErrorCode.USER_IS_EMPTY.getCode(), "核销员ID不存在"); + } + + WxCouponOrder couponOrder = null; + try { + wxCouponOrder.setVerifyRemark(remark); + couponOrder = this.verify(wxCouponOrder, wxMerchantBUser, EnumCouponVerifyType.VERIFY_B); + } catch (MallinkException e) { + logger.error("核销异常: " ,e); + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error("核销异常: " ,e); + throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), e.getMessage()); + } + + if (couponOrder != null && couponOrder.getMerchantId() != null) { + this.sendInsideCouponVerifyMsg(couponOrder, couponOrderId, couponOrder.getMerchantId()); + } + + return couponOrder; + } /** * B端核销卷增加成长值,积分 diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java index 1ef431fc0..d1d691440 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java @@ -41,8 +41,7 @@ import java.util.Map; public class HaiKangWeiShiUtil { public static final String TOKEN_URL = "https://open.hikyun.com/artemis/oauth/token"; - public static final String CAR_STOP_INFO = "https://open.hikyun.com/api/pmsc/v1/tempCarInRecords/page"; - public static final String GET_FEE = "https://open.hikyun.com/api/pmsc/v1/pay/getVehicleBill"; + public static final String GET_FEE = "https://open.hikyun.com/api/pmsc/v1/pay/ quickGetVehicleBill"; public static final String COUPON_USE = "https://open.hikyun.com/api/pmsc/v1/coupon/addition"; @@ -91,58 +90,16 @@ public class HaiKangWeiShiUtil { } /** - * 3.5.7 查询临时车停车信息 - */ - private JSONObject getCarStopInfo(WxPark wxPark,String carNumber,String token) { - String vendroParams = wxPark.getVendorParams(); - JSONObject vp = JSON.parseObject(vendroParams); - ArrayList list = new ArrayList(); - list.add(new BasicNameValuePair("pageNo", "1")); - list.add(new BasicNameValuePair("pageSize", "1")); - list.add(new BasicNameValuePair("parkId", wxPark.getParkId())); - list.add(new BasicNameValuePair("plateNo", carNumber));// - String carStopInfo = ProcBussiness(CAR_STOP_INFO, list, token); - if (StringUtils.isBlank(carStopInfo)) { - throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "haikang getCarStopInfo error. has no result"); - } - JSONObject carStopInfoResult = JSON.parseObject(carStopInfo); - if (carStopInfoResult.getInteger("code") != 0 ) { - String message = carStopInfoResult.getString("msg"); - throw new MallinkException(carStopInfoResult.getInteger("code"), "haikang getCarStopInfo error."+message); - } - JSONObject carStopInfoAttribute = carStopInfoResult.getJSONObject("data"); - if (null == carStopInfoAttribute) { - throw new MallinkException(carStopInfoResult.getInteger("code"), "haikang getCarStopInfo error. no result"+carNumber); - } - - JSONArray carStopInfoList = carStopInfoResult.getJSONArray("list"); - if (null == carStopInfoList || carStopInfoList.size() <= 0 ) { - throw new MallinkException(carStopInfoResult.getInteger("code"), "haikang getCarStopInfo error. no result"+carNumber); - } - - return carStopInfoList.getJSONObject(0); - } - - - /** - * 查询停车费 3.5.3 获取账单接口 + * 查询停车费 3.5.5 快速获取账单接口 * @return */ public JSONObject getFee(WxPark wxPark,String carNumber,String token) { - JSONObject carStopInfo = getCarStopInfo(wxPark,carNumber,token); String vendroParams = wxPark.getVendorParams(); JSONObject vp = JSON.parseObject(vendroParams); ArrayList list = new ArrayList(); list.add(new BasicNameValuePair("chargeSource", "THIRD"));//商户编号 - - Map vehicle = new HashMap(); - vehicle.put("parkId", wxPark.getParkId()); - vehicle.put("plateNo", carNumber); - vehicle.put("vehicleType", 1); - vehicle.put("plateType", 1); - vehicle.put("groupId", 1); - vehicle.put("freeTime", new Object[] {}); - list.add(new BasicNameValuePair("vehicle", "["+JSON.toJSONString(vehicle)+"]") );//商户编号 + list.add(new BasicNameValuePair("parkId", wxPark.getParkId())); + list.add(new BasicNameValuePair("plateNo", carNumber)); String retCode= ProcBussiness(GET_FEE, list, token); if (StringUtils.isBlank(retCode)) { throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "haikang getFee error. has no result");