| @@ -5,6 +5,7 @@ import com.github.pagehelper.PageInfo; | |||||
| import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
| import com.iformall.domain.po.MallUserInfo; | import com.iformall.domain.po.MallUserInfo; | ||||
| import com.iformall.domain.po.WxCardSpend; | import com.iformall.domain.po.WxCardSpend; | ||||
| import com.iformall.domain.po.WxCouponOrder; | |||||
| import com.iformall.domain.vo.WxCardSpendVo; | import com.iformall.domain.vo.WxCardSpendVo; | ||||
| import com.iformall.service.WxCardSpendService; | import com.iformall.service.WxCardSpendService; | ||||
| import com.iformall.service.WxMerchantService; | import com.iformall.service.WxMerchantService; | ||||
| @@ -39,18 +40,29 @@ public class WxCardPayController extends BaseController { | |||||
| @Autowired | @Autowired | ||||
| WxCardSpendService wxCardSpendService; | WxCardSpendService wxCardSpendService; | ||||
| // 售卡记录 | |||||
| // 消费记录 | |||||
| @ApiOperation("C端扫B端储值卡交易流水列表接口") | |||||
| @ApiOperation("售卡记录列表接口") | |||||
| @GetMapping("list") | @GetMapping("list") | ||||
| @ApiImplicitParams({ | @ApiImplicitParams({ | ||||
| @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | ||||
| @ApiImplicitParam(name = "pageSize", 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(); | String ipStr = getIpAddr(); | ||||
| logger.info("cardOrderList: " + ipStr + " :" + wxCardSpend.toString()); | |||||
| logger.info("cardSpendlist: " + ipStr); | |||||
| if (wxCardSpend == null) wxCardSpend = new WxCardSpend(); | if (wxCardSpend == null) wxCardSpend = new WxCardSpend(); | ||||
| MallUserInfo user = getUser(); | MallUserInfo user = getUser(); | ||||
| wxCardSpend.setTenantId(user.getTenantId()); | wxCardSpend.setTenantId(user.getTenantId()); | ||||
| @@ -4,10 +4,33 @@ import com.iformall.domain.po.WxCardSpend; | |||||
| public class WxCardSpendVo extends WxCardSpend { | public class WxCardSpendVo extends WxCardSpend { | ||||
| /**卡信息*/ | |||||
| /**券名称**/ | |||||
| @io.swagger.annotations.ApiModelProperty(value="券名称",name="title") | |||||
| private String title; | |||||
| /**使用商户名**/ | /**使用商户名**/ | ||||
| @io.swagger.annotations.ApiModelProperty(value="商户名",name="name") | @io.swagger.annotations.ApiModelProperty(value="商户名",name="name") | ||||
| private String merchantName; | 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() { | public String getMerchantName() { | ||||
| return merchantName; | return merchantName; | ||||
| } | } | ||||
| @@ -15,4 +38,28 @@ public class WxCardSpendVo extends WxCardSpend { | |||||
| public void setMerchantName(String merchantName) { | public void setMerchantName(String merchantName) { | ||||
| this.merchantName = 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 | // 7.1 update coupon card status | ||||
| if(cardInfo.getRemainingAmount().equals(0)) { | 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 更新出错!"); | return new ResultData(ErrorCode.DB_FAIL.getCode(), "couponOrder status 更新出错!"); | ||||
| } | } | ||||
| } | } | ||||
| @@ -200,6 +191,22 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { | |||||
| return new ResultData(record); | 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 | @Override | ||||
| public PageInfo<WxCardSpendVo> listAsPage(WxCardSpend record, Integer pageIndex, Integer pageSize) { | public PageInfo<WxCardSpendVo> listAsPage(WxCardSpend record, Integer pageIndex, Integer pageSize) { | ||||
| @@ -244,7 +251,6 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { | |||||
| logger.error("微信分账已超过限制次数-20次"); | logger.error("微信分账已超过限制次数-20次"); | ||||
| return; | return; | ||||
| } | } | ||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| logger.error(e.getMessage()); | logger.error(e.getMessage()); | ||||
| } | } | ||||
| @@ -266,7 +272,7 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { | |||||
| shareOrder.setMerchantId(cardSpend.getMerchantId()); | shareOrder.setMerchantId(cardSpend.getMerchantId()); | ||||
| shareOrder.setType(EnumProfitSharingOrderType.PROFIT_SHARING_MULTI.getCode()); | shareOrder.setType(EnumProfitSharingOrderType.PROFIT_SHARING_MULTI.getCode()); | ||||
| shareOrder.setPayAmount(cardSpend.getPayment()); | shareOrder.setPayAmount(cardSpend.getPayment()); | ||||
| shareOrder.setOrderId(cardSpend.getOrderId()); | |||||
| shareOrder.setOrderId(cardSpendId); | |||||
| shareOrder.setPayTimeStart(cardSpend.getCreateDate()); | shareOrder.setPayTimeStart(cardSpend.getCreateDate()); | ||||
| shareOrder.setPayTimeEnd(cardSpend.getUpdateDate()); | shareOrder.setPayTimeEnd(cardSpend.getUpdateDate()); | ||||
| shareOrder.setTenantId(tenantId); | shareOrder.setTenantId(tenantId); | ||||
| @@ -274,13 +280,9 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { | |||||
| shareOrder.setShareAmount(cardSpend.getRealPayment()); | shareOrder.setShareAmount(cardSpend.getRealPayment()); | ||||
| profitSharingOrderService.createSharingOrder(shareOrder); | profitSharingOrderService.createSharingOrder(shareOrder); | ||||
| if(cardSpend.getCardRemainAmount().equals(0)) { | if(cardSpend.getCardRemainAmount().equals(0)) { | ||||
| // 卡已被抵扣,但是分账还有余额 | |||||
| if (cardSpend.getCardRemainRealAmount() > 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 { | } else { | ||||
| @@ -290,8 +292,56 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { | |||||
| logger.error("微信分账: " + e.getMessage()); | 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="create_date" jdbcType="TIMESTAMP" property="createDate" /> | ||||
| <result column="update_date" jdbcType="TIMESTAMP" property="updateDate" /> | <result column="update_date" jdbcType="TIMESTAMP" property="updateDate" /> | ||||
| <result column="title" jdbcType="VARCHAR" property="title"/> | |||||
| <result column="name" jdbcType="VARCHAR" property="merchantName"/> | <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> | </resultMap> | ||||
| <sql id="allVoColumns"> | <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.`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`, | 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> | ||||
| <sql id="dynamicVoWhereConditions"> | <sql id="dynamicVoWhereConditions"> | ||||
| @@ -171,7 +178,10 @@ | |||||
| select | select | ||||
| <include refid="allVoColumns"/> | <include refid="allVoColumns"/> | ||||
| from wx_card_spend cs | 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 m on m.id = cs.merchant_id | ||||
| left join wx_merchant_subsidy ms on ms.order_id = cs.order_id | |||||
| <include refid="dynamicVoWhereConditions" /> | <include refid="dynamicVoWhereConditions" /> | ||||
| </select> | </select> | ||||