diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/car/WxCarController.java b/mallinkAdmin/src/main/java/com/iformall/controller/car/WxCarController.java index 5932cd627..2b6eddba0 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/car/WxCarController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/car/WxCarController.java @@ -200,24 +200,27 @@ public class WxCarController extends BaseController { logger.info(coupon.toString()); // Save to wx_counpon Date curDate = new Date(); - // check 同一个模板的券分配额是否超了 - if (StringUtils.isBlank(coupon.getVendorParams())) { - logger.error("请填充停车厂商优免券参数"); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "停车厂商参数为空"); - } - JSONObject vendorParamsObj = JSON.parseObject(coupon.getVendorParams()); - Long templateId = vendorParamsObj.getLong("id"); - Integer amount = vendorParamsObj.getInteger("amount"); - Integer avaliavleNum = vendorParamsObj.getInteger("avaliavleNum"); - Integer amtCount = wxCouponCarService.getAmtCountByTemplateId(templateId); - Integer availCount = wxCouponCarService.getAvaibleCountByTemplateId(templateId); - if (amtCount >= amount) { - logger.error("总库存已达到停车厂商优免券数量限制"); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "总库存已达到停车厂商优免券数量限制"); - } - if (availCount >= avaliavleNum) { - logger.error("可用库存已达到停车厂商优免券数量限制"); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "可用库存已达到停车厂商优免券数量限制"); + WxPark park = getCurrentPark(); + if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) { + // check 同一个模板的券分配额是否超了 + if (StringUtils.isBlank(coupon.getVendorParams())) { + logger.error("请填充停车厂商优免券参数"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "停车厂商参数为空"); + } + JSONObject vendorParamsObj = JSON.parseObject(coupon.getVendorParams()); + Long templateId = vendorParamsObj.getLong("id"); + Integer amount = vendorParamsObj.getInteger("amount"); + Integer avaliavleNum = vendorParamsObj.getInteger("avaliavleNum"); + Integer amtCount = wxCouponCarService.getAmtCountByTemplateId(templateId); + Integer availCount = wxCouponCarService.getAvaibleCountByTemplateId(templateId); + if (amtCount >= amount) { + logger.error("总库存已达到停车厂商优免券数量限制"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "总库存已达到停车厂商优免券数量限制"); + } + if (availCount >= avaliavleNum) { + logger.error("可用库存已达到停车厂商优免券数量限制"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "可用库存已达到停车厂商优免券数量限制"); + } } // check End coupon.setTenantId(getTenantId()); @@ -231,8 +234,6 @@ public class WxCarController extends BaseController { WxCouponCar couponCar = new WxCouponCar(); couponCar.setId(coupon.getId()); couponCar.setTenantId(getTenantId()); - - WxPark park = getCurrentPark(); couponCar.setParkId(park.getId()); couponCar.setVendorType(park.getVendorType()); couponCar.setVendorParams(coupon.getVendorParams()); diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponChannelController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponChannelController.java index cfa4b8594..f68ff413e 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponChannelController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponChannelController.java @@ -9,12 +9,8 @@ import com.iformall.controller.app.WxAppinfoController; import com.iformall.controller.base.BaseController; import com.iformall.domain.dto.WxCouponChannelDto; import com.iformall.domain.po.*; -import com.iformall.domain.vo.WxCouponChannelAddVo; import com.iformall.domain.vo.WxCouponChannelVo; -import com.iformall.enums.EnumCouponChannelStatus; -import com.iformall.enums.EnumFlowRecordStatus; -import com.iformall.enums.EnumRentContractAppStatus; -import com.iformall.enums.EnumRentContractStatus; +import com.iformall.enums.*; import com.iformall.mapper.WxCouponChannelMapper; import com.iformall.service.QrCodeService; import com.iformall.service.WxCouponChannelService; @@ -24,7 +20,6 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; -import org.apache.commons.collections.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 59a030c5e..e8fd6799a 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -660,48 +660,6 @@ public class WxCarController extends BaseController { } } - /** - * 停车费抵扣 - * - */ - @ApiOperation(value = "停车费抵扣", notes ="TJD: {\"tradeId\":\"string\",\"accountId\":\"string\",\"couponOrderId\":\"string\"}") - @PostMapping("/deductionFee") - public ResultData deductionFee(@RequestBody Map paramMap) { - /// 1, get mall's park - WxPark park = getCurrentPark(getTenantId()); - if (park.getVendorType() == EnumCarVendor.CAR_TJD.getCode()) { - String tradeId = paramMap.get("tradeId"); - String accountId = paramMap.get("accountId"); - String outTradeNo = paramMap.get("couponOrderId"); - if (StringUtils.isBlank(tradeId)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "tradeId为空"); - } - if (StringUtils.isBlank(accountId)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "accountId为空"); - } - if (StringUtils.isBlank(outTradeNo)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponOrderId为空"); - } - WxCouponOrder couponOrder = wxCouponOrderService.getById(Long.valueOf(outTradeNo)); - WxCoupon coupon = couponService.getById(couponOrder.getCouponId()); - String params = park.getVendorParams(); - JSONObject objParams = JSON.parseObject(params); - String url = objParams.getString("url"); - String partner = objParams.getString("partner"); - String key = objParams.getString("key"); - String version = objParams.getString("version"); - String ret = tjd.deductionForDetail(url, partner, key, version, - tradeId, accountId, couponOrder, coupon); - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getString(TJDUtil.TJD_RETURN_CODE).equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) { - return new ResultData(); - } else { - return new ResultData(ErrorCode.TJD_DEDUCE_FEE_FAIL.getCode(), "停车费抵扣失败"); - } - } - return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "停车费抵扣失败"); - } - private String getETCPBusinessID(Long merchantId) { String businessId; WxMerchant wxMerchant = wxMerchantService.getById(merchantId); @@ -715,44 +673,44 @@ public class WxCarController extends BaseController { * 优免券领取 * 优免券不可退 */ - @ApiOperation(value = "优免券领取", notes="ETCP:={\"etcpToken\":\"string\",\"carNumber\":\"string\",\"couponOrderId\"=\"String\"},输出\n{}") + @ApiOperation(value = "停车券使用", notes="ETCP:={\"etcpToken\":\"string(ETCP专用)\",\"carNumber\":\"string\",\"couponOrderId\"=\"String\"},输出\n{}\n" + + "TJD:{\"carNumber\":\"string\",\"tradeId\":\"string\",\"accountId\":\"string\",\"couponOrderId\":\"string\"}") @PostMapping("/getCoupon") public ResultData getCoupon(@RequestBody Map paramMap) { /// 1, get mall's park WxPark park = getCurrentPark(getTenantId()); + String carNumber = paramMap.get("carNumber"); + String couponOrderIdStr = paramMap.get("couponOrderId"); + if (StringUtils.isBlank(carNumber)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); + } + if (StringUtils.isBlank(couponOrderIdStr)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponOrderId为空"); + } + Long couponOrderId = 0L; + try { + couponOrderId = Long.valueOf(couponOrderIdStr); + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponOrderId转化失败"); + } + + WxCouponOrderCarCVo userCar = null; + WxCouponOrder userCarQ = new WxCouponOrder(); + userCarQ.setTenantId(getTenantId()); + userCarQ.setCUserId(getUserId()); + userCarQ.setId(couponOrderId); + userCarQ.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); + List list = wxCouponOrderService.carListCUserVo(userCarQ); + if (list.size() > 0) { + userCar = list.get(0); + } + if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) { String etcpToken = paramMap.get("etcpToken"); - String carNumber = paramMap.get("carNumber"); - String couponOrderIdStr = paramMap.get("couponOrderId"); if (StringUtils.isBlank(etcpToken)) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "etcpToken为空"); } - if (StringUtils.isBlank(carNumber)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - if (StringUtils.isBlank(couponOrderIdStr)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponOrderId为空"); - } - - Long couponOrderId = 0L; - try { - couponOrderId = Long.valueOf(couponOrderIdStr); - } catch (NumberFormatException e) { - logger.error(e.getMessage()); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponOrderId转化失败"); - } - - WxCouponOrderCarCVo userCar = null; - WxCouponOrder userCarQ = new WxCouponOrder(); - userCarQ.setTenantId(getTenantId()); - userCarQ.setCUserId(getUserId()); - userCarQ.setId(couponOrderId); - userCarQ.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); - List list = wxCouponOrderService.carListCUserVo(userCarQ); - if (list.size() > 0) { - userCar = list.get(0); - } - String params = park.getVendorParams(); JSONObject objParams = JSON.parseObject(params); String url = objParams.getString("url"); @@ -800,6 +758,34 @@ public class WxCarController extends BaseController { } else { return new ResultData(ErrorCode.ETCP_QUAN_SEND_FAIL.getCode(), retObj.getString("message")); } + } else if (park.getVendorType() == EnumCarVendor.CAR_TJD.getCode()){ + String tradeId = paramMap.get("tradeId"); + String accountId = paramMap.get("accountId"); + if (StringUtils.isBlank(tradeId)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "tradeId为空"); + } + if (StringUtils.isBlank(accountId)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "accountId为空"); + } + WxCoupon coupon = couponService.getById(userCar.getCouponId()); + if (coupon == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "券为空"); + } + String params = park.getVendorParams(); + JSONObject objParams = JSON.parseObject(params); + String url = objParams.getString(TJDUtil.TJD_URL); + String partner = objParams.getString(TJDUtil.TJD_ACCOUNT); + String key = objParams.getString(TJDUtil.TJD_ACCOUNT_KEY); + String version = objParams.getString(TJDUtil.TJD_VERSION); + + String ret = tjd.deductionForDetail(url, partner, key, version, + tradeId, accountId, userCar, coupon); + JSONObject retObj = JSON.parseObject(ret); + if (retObj.getString(TJDUtil.TJD_RETURN_CODE).equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) { + return new ResultData(); + } else { + return new ResultData(ErrorCode.TJD_DEDUCE_FEE_FAIL.getCode(), "停车费抵扣失败"); + } } return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "优免券领取失败"); } diff --git a/mallinkService/src/main/java/com/iformall/utils/car/TJDUtil.java b/mallinkService/src/main/java/com/iformall/utils/car/TJDUtil.java index 16627273b..62089fd95 100644 --- a/mallinkService/src/main/java/com/iformall/utils/car/TJDUtil.java +++ b/mallinkService/src/main/java/com/iformall/utils/car/TJDUtil.java @@ -1,6 +1,7 @@ package com.iformall.utils.car; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxCouponOrder; @@ -385,22 +386,24 @@ public class TJDUtil { paramMap.put(TJD_ACCOUNT_ID, accountId); paramMap.put(TJD_PREPAY_TYPE, TJD_PREPAY_TYPE_3); - Map detailMap = MapUtil.getOrderMap(); - detailMap.put(TJD_OUT_TRADE_NO, String.valueOf(couponOrder.getId())); - detailMap.put(TJD_TYPE, TJD_TYPE_COUPON); - detailMap.put(TJD_CHANNEL, "2204"); + JSONArray detailArr = new JSONArray(); + JSONObject detailObj = new JSONObject(); + detailObj.put(TJD_OUT_TRADE_NO, String.valueOf(couponOrder.getId())); + detailObj.put(TJD_TYPE, TJD_TYPE_COUPON); + detailObj.put(TJD_CHANNEL, "2204"); String memo = "会员优惠券"; if (coupon.getUnit().equals(0)) { - detailMap.put(TJD_COUPON_TYPE, "0"); - detailMap.put(TJD_AMOUNT, coupon.getPriceStr()); + detailObj.put(TJD_COUPON_TYPE, "0"); + detailObj.put(TJD_AMOUNT, coupon.getPriceStr()); memo += "-金额"; } else { - detailMap.put(TJD_COUPON_TYPE, "1"); - detailMap.put(TJD_MINUTES, String.valueOf(coupon.getPrice()*60)); + detailObj.put(TJD_COUPON_TYPE, "1"); + detailObj.put(TJD_MINUTES, String.valueOf(coupon.getPrice()*60)); memo += "-时长"; } - detailMap.put(TJD_MEMO, memo); - paramMap.put(TJD_DETAIL_LIST, JSON.toJSONString(detailMap)); + detailObj.put(TJD_MEMO, memo); + detailArr.add(detailObj); + paramMap.put(TJD_DETAIL_LIST, JSON.toJSONString(detailArr)); paramMap.put(TJD_CHARSET, TJD_UTF_8); paramMap.put(TJD_ACCOUNT, partner); @@ -639,6 +642,7 @@ public class TJDUtil { paramMap.put("signType", "md5"); String jsonstr = JSON.toJSONString(paramMap); + logger.info(jsonstr); try { StringEntity se = new StringEntity(jsonstr, Consts.UTF_8); diff --git a/mallinkService/src/main/resources/mapper/WxCouponPasswordMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponPasswordMapper.xml index 933ce1e89..83749cb13 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponPasswordMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponPasswordMapper.xml @@ -141,7 +141,7 @@ (select count(*) as coupon_count,coupon_id from wx_coupon_password where tenant_id=#{tenantId} and status=0 group by coupon_id) cp inner join wx_coupon c on cp.coupon_id = c.id - where c.tenant_id=#{tenantId} and c.status=0 + where c.tenant_id=#{tenantId} and c.status=0 and c.put_apply_status in(0,2) and cp.`coupon_id` = #{couponId}