devrelease_toaliyun_real
| @@ -200,24 +200,27 @@ public class WxCarController extends BaseController { | |||||
| logger.info(coupon.toString()); | logger.info(coupon.toString()); | ||||
| // Save to wx_counpon | // Save to wx_counpon | ||||
| Date curDate = new Date(); | 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 | // check End | ||||
| coupon.setTenantId(getTenantId()); | coupon.setTenantId(getTenantId()); | ||||
| @@ -231,8 +234,6 @@ public class WxCarController extends BaseController { | |||||
| WxCouponCar couponCar = new WxCouponCar(); | WxCouponCar couponCar = new WxCouponCar(); | ||||
| couponCar.setId(coupon.getId()); | couponCar.setId(coupon.getId()); | ||||
| couponCar.setTenantId(getTenantId()); | couponCar.setTenantId(getTenantId()); | ||||
| WxPark park = getCurrentPark(); | |||||
| couponCar.setParkId(park.getId()); | couponCar.setParkId(park.getId()); | ||||
| couponCar.setVendorType(park.getVendorType()); | couponCar.setVendorType(park.getVendorType()); | ||||
| couponCar.setVendorParams(coupon.getVendorParams()); | couponCar.setVendorParams(coupon.getVendorParams()); | ||||
| @@ -9,12 +9,8 @@ import com.iformall.controller.app.WxAppinfoController; | |||||
| import com.iformall.controller.base.BaseController; | import com.iformall.controller.base.BaseController; | ||||
| import com.iformall.domain.dto.WxCouponChannelDto; | import com.iformall.domain.dto.WxCouponChannelDto; | ||||
| import com.iformall.domain.po.*; | import com.iformall.domain.po.*; | ||||
| import com.iformall.domain.vo.WxCouponChannelAddVo; | |||||
| import com.iformall.domain.vo.WxCouponChannelVo; | 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.mapper.WxCouponChannelMapper; | ||||
| import com.iformall.service.QrCodeService; | import com.iformall.service.QrCodeService; | ||||
| import com.iformall.service.WxCouponChannelService; | import com.iformall.service.WxCouponChannelService; | ||||
| @@ -24,7 +20,6 @@ import io.swagger.annotations.Api; | |||||
| import io.swagger.annotations.ApiImplicitParam; | import io.swagger.annotations.ApiImplicitParam; | ||||
| import io.swagger.annotations.ApiImplicitParams; | import io.swagger.annotations.ApiImplicitParams; | ||||
| import io.swagger.annotations.ApiOperation; | import io.swagger.annotations.ApiOperation; | ||||
| import org.apache.commons.collections.CollectionUtils; | |||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| @@ -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<String, String > 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) { | private String getETCPBusinessID(Long merchantId) { | ||||
| String businessId; | String businessId; | ||||
| WxMerchant wxMerchant = wxMerchantService.getById(merchantId); | 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") | @PostMapping("/getCoupon") | ||||
| public ResultData getCoupon(@RequestBody Map<String, String > paramMap) { | public ResultData getCoupon(@RequestBody Map<String, String > paramMap) { | ||||
| /// 1, get mall's park | /// 1, get mall's park | ||||
| WxPark park = getCurrentPark(getTenantId()); | 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<WxCouponOrderCarCVo> list = wxCouponOrderService.carListCUserVo(userCarQ); | |||||
| if (list.size() > 0) { | |||||
| userCar = list.get(0); | |||||
| } | |||||
| if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) { | if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) { | ||||
| String etcpToken = paramMap.get("etcpToken"); | String etcpToken = paramMap.get("etcpToken"); | ||||
| String carNumber = paramMap.get("carNumber"); | |||||
| String couponOrderIdStr = paramMap.get("couponOrderId"); | |||||
| if (StringUtils.isBlank(etcpToken)) { | if (StringUtils.isBlank(etcpToken)) { | ||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "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<WxCouponOrderCarCVo> list = wxCouponOrderService.carListCUserVo(userCarQ); | |||||
| if (list.size() > 0) { | |||||
| userCar = list.get(0); | |||||
| } | |||||
| String params = park.getVendorParams(); | String params = park.getVendorParams(); | ||||
| JSONObject objParams = JSON.parseObject(params); | JSONObject objParams = JSON.parseObject(params); | ||||
| String url = objParams.getString("url"); | String url = objParams.getString("url"); | ||||
| @@ -800,6 +758,34 @@ public class WxCarController extends BaseController { | |||||
| } else { | } else { | ||||
| return new ResultData(ErrorCode.ETCP_QUAN_SEND_FAIL.getCode(), retObj.getString("message")); | 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(), "优免券领取失败"); | return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "优免券领取失败"); | ||||
| } | } | ||||
| @@ -1,6 +1,7 @@ | |||||
| package com.iformall.utils.car; | package com.iformall.utils.car; | ||||
| import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
| import com.alibaba.fastjson.JSONArray; | |||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
| import com.iformall.domain.po.WxCoupon; | import com.iformall.domain.po.WxCoupon; | ||||
| import com.iformall.domain.po.WxCouponOrder; | import com.iformall.domain.po.WxCouponOrder; | ||||
| @@ -385,22 +386,24 @@ public class TJDUtil { | |||||
| paramMap.put(TJD_ACCOUNT_ID, accountId); | paramMap.put(TJD_ACCOUNT_ID, accountId); | ||||
| paramMap.put(TJD_PREPAY_TYPE, TJD_PREPAY_TYPE_3); | paramMap.put(TJD_PREPAY_TYPE, TJD_PREPAY_TYPE_3); | ||||
| Map<String, String> 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 = "会员优惠券"; | String memo = "会员优惠券"; | ||||
| if (coupon.getUnit().equals(0)) { | 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 += "-金额"; | memo += "-金额"; | ||||
| } else { | } 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 += "-时长"; | 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_CHARSET, TJD_UTF_8); | ||||
| paramMap.put(TJD_ACCOUNT, partner); | paramMap.put(TJD_ACCOUNT, partner); | ||||
| @@ -639,6 +642,7 @@ public class TJDUtil { | |||||
| paramMap.put("signType", "md5"); | paramMap.put("signType", "md5"); | ||||
| String jsonstr = JSON.toJSONString(paramMap); | String jsonstr = JSON.toJSONString(paramMap); | ||||
| logger.info(jsonstr); | |||||
| try { | try { | ||||
| StringEntity se = new StringEntity(jsonstr, Consts.UTF_8); | StringEntity se = new StringEntity(jsonstr, Consts.UTF_8); | ||||
| @@ -141,7 +141,7 @@ | |||||
| (select count(*) as coupon_count,coupon_id from wx_coupon_password | (select count(*) as coupon_count,coupon_id from wx_coupon_password | ||||
| where tenant_id=#{tenantId} and status=0 group by coupon_id) cp | where tenant_id=#{tenantId} and status=0 group by coupon_id) cp | ||||
| inner join wx_coupon c on cp.coupon_id = c.id | 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) | |||||
| <if test=" null != couponId "> | <if test=" null != couponId "> | ||||
| and cp.`coupon_id` = #{couponId} | and cp.`coupon_id` = #{couponId} | ||||
| </if> | </if> | ||||