Просмотр исходного кода

[储值卡][新增]:分账完结处理,card spend添加一条记录,更新card info数据

release_toaliyun_real
Stormeye Wu 7 лет назад
Родитель
Сommit
86a5d85c5b
4 измененных файлов: 149 добавлений и 30 удалений
  1. +19
    -7
      mallinkAdmin/src/main/java/com/iformall/controller/WxCardPayController.java
  2. +47
    -0
      mallinkService/src/main/java/com/iformall/domain/vo/WxCardSpendVo.java
  3. +72
    -22
      mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java
  4. +11
    -1
      mallinkService/src/main/resources/mapper/WxCardSpendMapper.xml

+ 19
- 7
mallinkAdmin/src/main/java/com/iformall/controller/WxCardPayController.java Просмотреть файл

@@ -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());


+ 47
- 0
mallinkService/src/main/java/com/iformall/domain/vo/WxCardSpendVo.java Просмотреть файл

@@ -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;
}
}

+ 72
- 22
mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java Просмотреть файл

@@ -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);
}


}

+ 11
- 1
mallinkService/src/main/resources/mapper/WxCardSpendMapper.xml Просмотреть файл

@@ -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>


Загрузка…
Отмена
Сохранить