| @@ -5,6 +5,7 @@ import com.github.pagehelper.PageInfo; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.MallUserInfo; | |||
| import com.iformall.domain.po.WxCardSpend; | |||
| import com.iformall.domain.po.WxCouponOrder; | |||
| import com.iformall.domain.vo.WxCardSpendVo; | |||
| import com.iformall.service.WxCardSpendService; | |||
| import com.iformall.service.WxMerchantService; | |||
| @@ -39,18 +40,29 @@ public class WxCardPayController extends BaseController { | |||
| @Autowired | |||
| WxCardSpendService wxCardSpendService; | |||
| // 售卡记录 | |||
| // 消费记录 | |||
| @ApiOperation("C端扫B端储值卡交易流水列表接口") | |||
| @ApiOperation("售卡记录列表接口") | |||
| @GetMapping("list") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | |||
| @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) | |||
| public ResultData cardOrderList(@ModelAttribute WxCardSpend wxCardSpend, Integer pageNum, Integer pageSize) { | |||
| public ResultData cardOrderList(@ModelAttribute WxCouponOrder wxCouponOrder, Integer pageNum, Integer pageSize) { | |||
| String ipStr = getIpAddr(); | |||
| logger.info("cardOrderList: " + ipStr); | |||
| if (wxCouponOrder == null) wxCouponOrder = new WxCouponOrder(); | |||
| MallUserInfo user = getUser(); | |||
| wxCouponOrder.setTenantId(user.getTenantId()); | |||
| //final PageInfo<WxCardSpendVo> page = wxCardSpendService.listAsPage(wxCardSpend, pageNum, pageSize); | |||
| return new ResultData(); | |||
| } | |||
| @ApiOperation("C端扫B端储值卡交易流水(消费记录 + 补贴)列表接口") | |||
| @GetMapping("cardSpendlist") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | |||
| @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) | |||
| public ResultData cardSpendlist(@ModelAttribute WxCardSpend wxCardSpend, Integer pageNum, Integer pageSize) { | |||
| String ipStr = getIpAddr(); | |||
| logger.info("cardOrderList: " + ipStr + " :" + wxCardSpend.toString()); | |||
| logger.info("cardSpendlist: " + ipStr); | |||
| if (wxCardSpend == null) wxCardSpend = new WxCardSpend(); | |||
| MallUserInfo user = getUser(); | |||
| wxCardSpend.setTenantId(user.getTenantId()); | |||
| @@ -4,10 +4,33 @@ import com.iformall.domain.po.WxCardSpend; | |||
| public class WxCardSpendVo extends WxCardSpend { | |||
| /**卡信息*/ | |||
| /**券名称**/ | |||
| @io.swagger.annotations.ApiModelProperty(value="券名称",name="title") | |||
| private String title; | |||
| /**使用商户名**/ | |||
| @io.swagger.annotations.ApiModelProperty(value="商户名",name="name") | |||
| private String merchantName; | |||
| /**补贴额(包含通道费)*/ | |||
| @io.swagger.annotations.ApiModelProperty(value="补贴额(包含通道费)",name="subsidy") | |||
| private Integer subsidy; | |||
| /**线上补贴额/实收补贴额(通道费扣除)*/ | |||
| @io.swagger.annotations.ApiModelProperty(value="线上补贴额/实收补贴额(通道费扣除)",name="realSubsidy") | |||
| private Integer realSubsidy; | |||
| /**状态(0:未补贴, 1:已补贴)*/ | |||
| @io.swagger.annotations.ApiModelProperty(value="状态(0:未补贴, 1:已补贴)",name="status") | |||
| private Integer status; | |||
| public String getTitle() { | |||
| return title; | |||
| } | |||
| public void setTitle(String title) { | |||
| this.title = title; | |||
| } | |||
| public String getMerchantName() { | |||
| return merchantName; | |||
| } | |||
| @@ -15,4 +38,28 @@ public class WxCardSpendVo extends WxCardSpend { | |||
| public void setMerchantName(String merchantName) { | |||
| this.merchantName = merchantName; | |||
| } | |||
| public Integer getSubsidy() { | |||
| return subsidy; | |||
| } | |||
| public void setSubsidy(Integer subsidy) { | |||
| this.subsidy = subsidy; | |||
| } | |||
| public Integer getRealSubsidy() { | |||
| return realSubsidy; | |||
| } | |||
| public void setRealSubsidy(Integer realSubsidy) { | |||
| this.realSubsidy = realSubsidy; | |||
| } | |||
| public Integer getStatus() { | |||
| return status; | |||
| } | |||
| public void setStatus(Integer status) { | |||
| this.status = status; | |||
| } | |||
| } | |||
| @@ -147,16 +147,7 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { | |||
| } | |||
| // 7.1 update coupon card status | |||
| if(cardInfo.getRemainingAmount().equals(0)) { | |||
| WxCouponOrder couponOrder = new WxCouponOrder(); | |||
| couponOrder.setId(cardInfo.getId()); | |||
| couponOrder.setCouponId(cardInfo.getCouponId()); | |||
| couponOrder.setOrderId(order.getId()); | |||
| couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.CARD_COMPLETE.getCode()); | |||
| couponOrder.setUpdateDate(curDate); | |||
| try { | |||
| wxCouponOrderMapper.updateByPrimaryKeySelective(couponOrder); | |||
| } catch (Exception e) { | |||
| logger.error("couponOrder status update error"); | |||
| if (cardFinished(order, curDate, cardInfo)) { | |||
| return new ResultData(ErrorCode.DB_FAIL.getCode(), "couponOrder status 更新出错!"); | |||
| } | |||
| } | |||
| @@ -200,6 +191,22 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { | |||
| return new ResultData(record); | |||
| } | |||
| private boolean cardFinished(WxOrder order, Date curDate, WxCardInfo cardInfo) { | |||
| WxCouponOrder couponOrder = new WxCouponOrder(); | |||
| couponOrder.setId(cardInfo.getId()); | |||
| couponOrder.setCouponId(cardInfo.getCouponId()); | |||
| couponOrder.setOrderId(order.getId()); | |||
| couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.CARD_COMPLETE.getCode()); | |||
| couponOrder.setUpdateDate(curDate); | |||
| try { | |||
| wxCouponOrderMapper.updateByPrimaryKeySelective(couponOrder); | |||
| } catch (Exception e) { | |||
| logger.error("couponOrder status update error"); | |||
| return true; | |||
| } | |||
| return false; | |||
| } | |||
| @Override | |||
| public PageInfo<WxCardSpendVo> listAsPage(WxCardSpend record, Integer pageIndex, Integer pageSize) { | |||
| @@ -244,7 +251,6 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { | |||
| logger.error("微信分账已超过限制次数-20次"); | |||
| return; | |||
| } | |||
| } catch (Exception e) { | |||
| logger.error(e.getMessage()); | |||
| } | |||
| @@ -266,7 +272,7 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { | |||
| shareOrder.setMerchantId(cardSpend.getMerchantId()); | |||
| shareOrder.setType(EnumProfitSharingOrderType.PROFIT_SHARING_MULTI.getCode()); | |||
| shareOrder.setPayAmount(cardSpend.getPayment()); | |||
| shareOrder.setOrderId(cardSpend.getOrderId()); | |||
| shareOrder.setOrderId(cardSpendId); | |||
| shareOrder.setPayTimeStart(cardSpend.getCreateDate()); | |||
| shareOrder.setPayTimeEnd(cardSpend.getUpdateDate()); | |||
| shareOrder.setTenantId(tenantId); | |||
| @@ -274,13 +280,9 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { | |||
| shareOrder.setShareAmount(cardSpend.getRealPayment()); | |||
| profitSharingOrderService.createSharingOrder(shareOrder); | |||
| if(cardSpend.getCardRemainAmount().equals(0)) { | |||
| // 卡已被抵扣,但是分账还有余额 | |||
| if (cardSpend.getCardRemainRealAmount() > 0) { | |||
| shareOrder.setOrderId(null); | |||
| shareOrder.setPayAmount(0); | |||
| shareOrder.setShareAmount(cardInfo.getRemainingShareFeeAmount()); | |||
| shareOrder.setType(EnumProfitSharingOrderType.PROFIT_SHARING_FINISH.getCode()); | |||
| profitSharingOrderService.finishSharingOrder(shareOrder); | |||
| // 卡已被抵扣,但是分账还有余额 | |||
| cardShareFinished(cardInfo, shareOrder); | |||
| } | |||
| } | |||
| } else { | |||
| @@ -290,8 +292,56 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { | |||
| logger.error("微信分账: " + e.getMessage()); | |||
| } | |||
| } | |||
| /** | |||
| * 卡分账完结 | |||
| * @param cardInfo | |||
| * @param shareOrder | |||
| */ | |||
| private void cardShareFinished(WxCardInfo cardInfo, WxSharingOrderDto shareOrder) { | |||
| Date curDate = new Date(); | |||
| // card spend 添加一条 记录] | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| WxCardSpend cardSpend = new WxCardSpend(); | |||
| cardSpend.setTenantId(cardInfo.getTenantId()); | |||
| cardSpend.setId(idWorker.nextId()); | |||
| cardSpend.setCardId(cardInfo.getId()); | |||
| cardSpend.setOrderId(null); | |||
| cardSpend.setDeductionAmount(0); | |||
| cardSpend.setPayment(cardInfo.getRemainingShareFeeAmount()); | |||
| cardSpend.setRealPayment(cardInfo.getRemainingShareFeeAmount()); | |||
| cardSpend.setCardBeforeAmount(cardInfo.getRemainingAmount()); | |||
| cardSpend.setCardRemainAmount(0); | |||
| cardSpend.setCardBeforeRealAmount(cardInfo.getRemainingShareFeeAmount()); | |||
| cardSpend.setCardRemainRealAmount(cardInfo.getRemainingShareFeeAmount()); | |||
| cardSpend.setCreateDate(curDate); | |||
| cardSpend.setUpdateDate(curDate); | |||
| try { | |||
| wxCardSpendMapper.insertSelective(cardSpend); | |||
| } catch (Exception e) { | |||
| logger.error("card spend insert error"); | |||
| return; | |||
| } | |||
| // card info 更新 余额 | |||
| WxCardInfo cardInfo1 = new WxCardInfo(); | |||
| cardInfo1.setId(cardInfo.getId()); | |||
| cardInfo1.setRemainingShareFeeAmount(0); | |||
| cardInfo1.setUpdateDate(curDate); | |||
| try { | |||
| wxCardInfoMapper.updateByPrimaryKeySelective(cardInfo1); | |||
| } catch (Exception e) { | |||
| logger.error("card info remaining error"); | |||
| return; | |||
| } | |||
| // 分账完结 | |||
| shareOrder.setOrderId(cardSpend.getId()); | |||
| shareOrder.setPayAmount(0); | |||
| shareOrder.setOrderId(cardSpend.getId()); | |||
| shareOrder.setShareAmount(cardInfo.getRemainingShareFeeAmount()); | |||
| shareOrder.setType(EnumProfitSharingOrderType.PROFIT_SHARING_FINISH.getCode()); | |||
| profitSharingOrderService.finishSharingOrder(shareOrder); | |||
| } | |||
| } | |||
| @@ -103,13 +103,20 @@ | |||
| <result column="create_date" jdbcType="TIMESTAMP" property="createDate" /> | |||
| <result column="update_date" jdbcType="TIMESTAMP" property="updateDate" /> | |||
| <result column="title" jdbcType="VARCHAR" property="title"/> | |||
| <result column="name" jdbcType="VARCHAR" property="merchantName"/> | |||
| <result column="subsidy" jdbcType="INTEGER" property="subsidy" /> | |||
| <result column="real_subsidy" jdbcType="INTEGER" property="realSubsidy" /> | |||
| <result column="status" jdbcType="INTEGER" property="status" /> | |||
| </resultMap> | |||
| <sql id="allVoColumns"> | |||
| cs.`id`,cs.`tenant_id`,cs.`card_id`,cs.`owner_id`,cs.`merchant_id`,cs.`order_id`,cs.`deduction_amount`,cs.`payment`,cs.`real_payment`, | |||
| cs.`card_remain_amount`,cs.`card_before_amount`,cs.`card_remain_real_amount`,cs.`card_before_real_amount`,cs.`create_date`,cs.`update_date`, | |||
| m.`name` | |||
| m.`name`, c.`title`, | |||
| ms.`subsidy`,ms.`real_subsidy`,ms.`status` | |||
| </sql> | |||
| <sql id="dynamicVoWhereConditions"> | |||
| @@ -171,7 +178,10 @@ | |||
| select | |||
| <include refid="allVoColumns"/> | |||
| from wx_card_spend cs | |||
| left join wx_coupon_order co on co.id = ms.coupon_order_id | |||
| left join wx_coupon c on c.id = co.coupon_id | |||
| left join wx_merchant m on m.id = cs.merchant_id | |||
| left join wx_merchant_subsidy ms on ms.order_id = cs.order_id | |||
| <include refid="dynamicVoWhereConditions" /> | |||
| </select> | |||