分账功能

dev
胡锐 7 days ago
parent 604a476e74
commit 1d6ed5bce8
  1. 80
      bweb/src/main/java/com/bweb/controller/BsOrderSettleController.java
  2. 40
      bweb/src/main/java/com/bweb/controller/SecMenuController.java
  3. 21
      bweb/src/main/java/com/bweb/controller/TestController.java
  4. 4
      cweb/src/main/java/com/cweb/controller/TestController.java
  5. 3
      cweb/src/main/java/com/cweb/controller/order/OrderPayController.java
  6. 1
      schedule/src/main/java/com/hfkj/consumer/OrderProfitSharingConsumer.java
  7. 68
      schedule/src/main/java/com/hfkj/schedule/OrderSettleSchedule.java
  8. 19
      service/src/main/java/com/hfkj/dao/BsOrderSettleMapper.java
  9. 44
      service/src/main/java/com/hfkj/dao/BsOrderSettleMapperExt.java
  10. 14
      service/src/main/java/com/hfkj/dao/BsOrderSettleSqlProvider.java
  11. 18
      service/src/main/java/com/hfkj/entity/BsOrderSettle.java
  12. 70
      service/src/main/java/com/hfkj/entity/BsOrderSettleExample.java
  13. 32
      service/src/main/java/com/hfkj/pay/HuiPayService.java
  14. 6
      service/src/main/java/com/hfkj/service/order/BsOrderSettleService.java
  15. 18
      service/src/main/java/com/hfkj/service/order/impl/BsOrderRefundServiceImpl.java
  16. 63
      service/src/main/java/com/hfkj/service/order/impl/BsOrderSettleServiceImpl.java
  17. 12
      service/src/main/java/com/hfkj/sysenum/order/OrderSettleLedgerStatusEnum.java

@ -0,0 +1,80 @@
package com.bweb.controller;
import com.alibaba.fastjson.JSONObject;
import com.hfkj.common.exception.ErrorCode;
import com.hfkj.common.exception.ErrorHelp;
import com.hfkj.common.exception.SysCode;
import com.hfkj.common.security.UserCenter;
import com.hfkj.common.utils.ResponseMsgUtil;
import com.hfkj.entity.BsOrderSettle;
import com.hfkj.model.ResponseData;
import com.hfkj.service.order.BsOrderSettleLedgerService;
import com.hfkj.service.order.BsOrderSettleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
@Controller
@RequestMapping(value="/orderSettle")
@Api(value="订单退款业务")
public class BsOrderSettleController {
Logger log = LoggerFactory.getLogger(BsOrderSettleController.class);
@Resource
private BsOrderSettleService orderSettleService;
@Resource
private BsOrderSettleLedgerService orderSettleLedgerService;
@RequestMapping(value="/getDetailByOrderNo",method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "查询交易详情")
public ResponseData getDetailByOrderNo(@RequestParam(name = "orderNo", required = true) String orderNo) {
try {
// 查询结算信息
BsOrderSettle orderSettle = orderSettleService.getData(orderNo);
if (orderSettle == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到数据");
}
Map<String,Object> map = new HashMap<>();
map.put("orderSettle", orderSettle);
map.put("orderSettleLedger", orderSettleLedgerService.getListBySettleId(orderSettle.getId()));
return ResponseMsgUtil.success(map);
} catch (Exception e) {
log.error("error!",e);
return ResponseMsgUtil.exception(e);
}
}
@RequestMapping(value="/revokeLedger",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "撤销分账")
public ResponseData revokeLedger(@RequestBody JSONObject body) {
try {
if (body == null || StringUtils.isBlank(body.getString("orderNo"))) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "");
}
// 查询结算信息
BsOrderSettle orderSettle = orderSettleService.getData(body.getString("orderNo"));
if (orderSettle == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到数据");
}
orderSettleService.revokeLedger(orderSettle);
return ResponseMsgUtil.success("操作成功");
} catch (Exception e) {
log.error("error!",e);
return ResponseMsgUtil.exception(e);
}
}
}

@ -168,7 +168,7 @@ public class SecMenuController {
try { try {
// 查询角色菜单权限 // 查询角色菜单权限
Map<Long, SecMenu> roleMenu = secMenuService.queryRoleMenu(roleId, SecMenuTypeEnum.type1).stream() Map<Long, SecMenu> roleMenu = secMenuService.queryRoleMenu(roleId,null).stream()
.collect(Collectors.toMap(SecMenu::getId, Function.identity())); .collect(Collectors.toMap(SecMenu::getId, Function.identity()));
// 系统菜单叶节点 // 系统菜单叶节点
@ -187,9 +187,9 @@ public class SecMenuController {
.collect(Collectors.toList()); .collect(Collectors.toList());
// 递归获取系统菜单叶子节点 // 递归获取系统菜单叶子节点
for (SecMenu topLevelMenu : topLevelMenuList) { for (SecMenu topLevelMenu : topLevelMenuList) {
if (topLevelMenu.getMenuType().equals(SecMenuTypeEnum.type1.getCode())) { //if (topLevelMenu.getMenuType().equals(SecMenuTypeEnum.type1.getCode())) {
recursionMenu(menuList, topLevelMenu.getId(), menuLeafList); recursionMenu(menuList, topLevelMenu.getId(), menuLeafList);
} //}
} }
// 筛选角色菜单叶节点 // 筛选角色菜单叶节点
@ -240,14 +240,16 @@ public class SecMenuController {
.collect(Collectors.toList()); .collect(Collectors.toList());
for (SecMenu topLevelMenu : topLevelMenuList) { for (SecMenu topLevelMenu : topLevelMenuList) {
map = new LinkedHashMap<>();
map.put("key", ""+topLevelMenu.getId());
if (topLevelMenu.getMenuType().equals(SecMenuTypeEnum.type1.getCode())) { if (topLevelMenu.getMenuType().equals(SecMenuTypeEnum.type1.getCode())) {
map = new LinkedHashMap<>();
map.put("key", ""+topLevelMenu.getId());
map.put("title", topLevelMenu.getMenuName()); map.put("title", topLevelMenu.getMenuName());
// 获取下级菜单 } else {
map.put("children", recursionMenu(menuList, topLevelMenu.getId(), new ArrayList<>())); map.put("title", "【按钮】"+topLevelMenu.getMenuName());
mapList.add(map);
} }
// 获取下级菜单
map.put("children", recursionMenu(menuList, topLevelMenu.getId(), new ArrayList<>()));
mapList.add(map);
} }
return ResponseMsgUtil.success(mapList); return ResponseMsgUtil.success(mapList);
@ -273,20 +275,22 @@ public class SecMenuController {
.sorted(Comparator.comparing(SecMenu::getMenuSort)) .sorted(Comparator.comparing(SecMenu::getMenuSort))
.collect(Collectors.toList()); .collect(Collectors.toList());
for (SecMenu menu : collect) { for (SecMenu menu : collect) {
map = new LinkedHashMap<>();
map.put("key", ""+menu.getId());
if (menu.getMenuType().equals(SecMenuTypeEnum.type1.getCode())) { if (menu.getMenuType().equals(SecMenuTypeEnum.type1.getCode())) {
map = new LinkedHashMap<>();
map.put("key", ""+menu.getId());
map.put("title", menu.getMenuName()); map.put("title", menu.getMenuName());
} else {
map.put("title", "【按钮】"+menu.getMenuName());
}
// 获取下级菜单 // 获取下级菜单
List<Map<String, Object>> recursioned = recursionMenu(dataSource, menu.getId(), leaf); List<Map<String, Object>> recursioned = recursionMenu(dataSource, menu.getId(), leaf);
if (recursioned.isEmpty()) { if (recursioned.isEmpty()) {
leaf.add(""+menu.getId()); leaf.add(""+menu.getId());
map.put("isLeaf", true); map.put("isLeaf", true);
} else { } else {
map.put("children", recursioned); map.put("children", recursioned);
}
mapList.add(map);
} }
mapList.add(map);
} }
return mapList; return mapList;
} }

@ -23,12 +23,14 @@ import com.hfkj.device.sanmisen.PrinterTemplate;
import com.hfkj.entity.*; import com.hfkj.entity.*;
import com.hfkj.model.GasClassGroupTaskDataCount; import com.hfkj.model.GasClassGroupTaskDataCount;
import com.hfkj.model.ResponseData; import com.hfkj.model.ResponseData;
import com.hfkj.pay.HuiPayService;
import com.hfkj.service.BsDeviceService; import com.hfkj.service.BsDeviceService;
import com.hfkj.service.CommonService; import com.hfkj.service.CommonService;
import com.hfkj.service.gas.BsGasClassGroupTaskService; import com.hfkj.service.gas.BsGasClassGroupTaskService;
import com.hfkj.service.gas.BsGasOrderService; import com.hfkj.service.gas.BsGasOrderService;
import com.hfkj.service.gas.BsGasService; import com.hfkj.service.gas.BsGasService;
import com.hfkj.service.merchant.BsMerchantService; import com.hfkj.service.merchant.BsMerchantService;
import com.hfkj.service.order.BsOrderSettleService;
import com.hfkj.service.sec.SecUserLoginLogService; import com.hfkj.service.sec.SecUserLoginLogService;
import com.hfkj.service.sec.SecUserService; import com.hfkj.service.sec.SecUserService;
import com.hfkj.sysenum.SecUserObjectTypeEnum; import com.hfkj.sysenum.SecUserObjectTypeEnum;
@ -239,6 +241,25 @@ public class TestController {
} }
} }
@Resource
private BsOrderSettleService orderSettleService;
@RequestMapping(value="separate",method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "分账")
public ResponseData separate(@RequestParam(name = "orderNo", required = true) String orderNo) {
try {
//orderSettleService.separate(orderSettleService.getData("250731141540888578"));
orderSettleService.separate(orderSettleService.getData(orderNo));
//return ResponseMsgUtil.success(HuiPayService.profitSharingCancel(orderSettleService.getData("250731141540888578")));
return ResponseMsgUtil.success(null);
} catch (Exception e) {
log.error("error!",e);
return ResponseMsgUtil.exception(e);
}
}
} }

@ -5,10 +5,13 @@ import com.alibaba.fastjson.JSONObject;
import com.hfkj.common.security.UserCenter; import com.hfkj.common.security.UserCenter;
import com.hfkj.common.utils.ResponseMsgUtil; import com.hfkj.common.utils.ResponseMsgUtil;
import com.hfkj.common.utils.WxUtils; import com.hfkj.common.utils.WxUtils;
import com.hfkj.entity.BsOrderSettle;
import com.hfkj.entity.BsUserSpreadAccount; import com.hfkj.entity.BsUserSpreadAccount;
import com.hfkj.model.ResponseData; import com.hfkj.model.ResponseData;
import com.hfkj.model.UserSessionObject; import com.hfkj.model.UserSessionObject;
import com.hfkj.pay.HuiPayService;
import com.hfkj.service.gas.BsGasOrderSpreadService; import com.hfkj.service.gas.BsGasOrderSpreadService;
import com.hfkj.service.order.BsOrderSettleService;
import com.hfkj.service.spread.BsUserSpreadAccountRecordService; import com.hfkj.service.spread.BsUserSpreadAccountRecordService;
import com.hfkj.service.spread.BsUserSpreadAccountService; import com.hfkj.service.spread.BsUserSpreadAccountService;
import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder; import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
@ -24,6 +27,7 @@ import org.apache.http.util.EntityUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;

@ -36,6 +36,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
@ -135,7 +136,7 @@ public class OrderPayController {
orderSettle.setSettleAmount(order.getPayRealPrice()); orderSettle.setSettleAmount(order.getPayRealPrice());
orderSettle.setLedgerFlag(ledgerAccountFlag); orderSettle.setLedgerFlag(ledgerAccountFlag);
if (orderSettle.getLedgerFlag()) { if (orderSettle.getLedgerFlag()) {
orderSettle.setLedgerAmount(order.getPayRealPrice()); orderSettle.setLedgerAmount(new BigDecimal("0"));
orderSettle.setLedgerOrderNo("L"+ DateUtil.date2String(new Date(), "yyMMddHHmmss") + RandomUtils.number(3, false)); orderSettle.setLedgerOrderNo("L"+ DateUtil.date2String(new Date(), "yyMMddHHmmss") + RandomUtils.number(3, false));
orderSettle.setLedgerStatus(OrderSettleLedgerStatusEnum.status0.getCode()); orderSettle.setLedgerStatus(OrderSettleLedgerStatusEnum.status0.getCode());
} }

@ -21,6 +21,5 @@ public class OrderProfitSharingConsumer implements RocketMQListener<OrderModel>
@Override @Override
public void onMessage(OrderModel order) { public void onMessage(OrderModel order) {
orderSettleService.separate(orderSettleService.getData(order.getOrderNo())); orderSettleService.separate(orderSettleService.getData(order.getOrderNo()));
} }
} }

@ -1,6 +1,7 @@
package com.hfkj.schedule; package com.hfkj.schedule;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.hfkj.common.utils.DateUtil;
import com.hfkj.entity.BsOrderSettle; import com.hfkj.entity.BsOrderSettle;
import com.hfkj.entity.BsOrderSettleLedger; import com.hfkj.entity.BsOrderSettleLedger;
import com.hfkj.entity.BsUserSpreadAccount; import com.hfkj.entity.BsUserSpreadAccount;
@ -10,10 +11,12 @@ import com.hfkj.service.order.BsOrderSettleLedgerService;
import com.hfkj.service.order.BsOrderSettleService; import com.hfkj.service.order.BsOrderSettleService;
import com.hfkj.service.spread.BsUserSpreadAccountService; import com.hfkj.service.spread.BsUserSpreadAccountService;
import com.hfkj.sysenum.order.OrderSettleLedgerStatusEnum; import com.hfkj.sysenum.order.OrderSettleLedgerStatusEnum;
import com.hfkj.sysenum.order.OrderStatusEnum;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Calendar;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -47,8 +50,36 @@ public class OrderSettleSchedule {
} }
} }
@Scheduled(cron="0 0/3 * * * ?") //每3分钟执行一次 /**
public void getBlxCoupon() { * 发起分账补偿
* 默认支付回调后发起MQ分账消费端不一定100%能消费到
*/
@Scheduled(cron="0 0/1 * * * ?") //每1分钟执行一次
public void startSeparate() {
Calendar createTimeE = Calendar.getInstance();
createTimeE.add(Calendar.MINUTE,-3);
Map<String,Object> param = new HashMap<>();
param.put("ledgerStatus", OrderSettleLedgerStatusEnum.status0.getCode());
param.put("orderStatus", OrderStatusEnum.status3.getCode());
param.put("createTimeE", createTimeE.getTime());
List<BsOrderSettle> orderSettleList = orderSettleService.getList(param);
for (BsOrderSettle orderSettle : orderSettleList) {
try {
orderSettleService.separate(orderSettle);
} catch (Exception e){
}
}
}
/**
* 分账结果
*/
@Scheduled(cron="0 0/1 * * * ?") //每1分钟执行一次
public void separateResult() {
Map<String,Object> param = new HashMap<>(); Map<String,Object> param = new HashMap<>();
param.put("ledgerStatus", OrderSettleLedgerStatusEnum.status2.getCode()); param.put("ledgerStatus", OrderSettleLedgerStatusEnum.status2.getCode());
List<BsOrderSettle> orderSettleList = orderSettleService.getList(param); List<BsOrderSettle> orderSettleList = orderSettleService.getList(param);
@ -56,8 +87,9 @@ public class OrderSettleSchedule {
// 查询分账处理结果 // 查询分账处理结果
JSONObject obj = HuiPayService.profitSharingQuery(orderSettle); JSONObject obj = HuiPayService.profitSharingQuery(orderSettle);
if (obj.getString("return_code").equals("000000")) { if (obj.getString("return_code").equals("000000")) {
JSONObject data = obj.getJSONObject("return_data");
// 1:已完成 2:处理中 3:已受理 4:失败 // 1:已完成 2:处理中 3:已受理 4:失败
if (obj.getInteger("status") == 1) { if (data.getInteger("status") == 1) {
orderSettle.setLedgerStatus(OrderSettleLedgerStatusEnum.status1.getCode()); orderSettle.setLedgerStatus(OrderSettleLedgerStatusEnum.status1.getCode());
orderSettleService.editData(orderSettle); orderSettleService.editData(orderSettle);
// 分账接收方 // 分账接收方
@ -67,7 +99,35 @@ public class OrderSettleSchedule {
orderSettleLedgerService.editData(ledger); orderSettleLedgerService.editData(ledger);
} }
} else if (obj.getInteger("status") == 4) { } else if (data.getInteger("status") == 4) {
orderSettle.setLedgerStatus(OrderSettleLedgerStatusEnum.status4.getCode());
orderSettleService.editData(orderSettle);
}
}
}
}
/**
* 分账撤销结果
*/
@Scheduled(cron="0 0/1 * * * ?") //每1分钟执行一次
public void revokeLedgerResult() {
Map<String,Object> param = new HashMap<>();
param.put("ledgerStatus", OrderSettleLedgerStatusEnum.status5.getCode());
List<BsOrderSettle> orderSettleList = orderSettleService.getList(param);
for (BsOrderSettle orderSettle : orderSettleList) {
// 查询分账处理结果
// 重新设置请求单号
orderSettle.setLedgerOrderNo(orderSettle.getRevokeOrderNo());
JSONObject obj = HuiPayService.profitSharingQuery(orderSettle);
if (obj.getString("return_code").equals("000000")) {
JSONObject data = obj.getJSONObject("return_data");
// 1:已完成 2:处理中 3:已受理 4:失败
if (data.getInteger("status") == 1) {
orderSettle.setLedgerStatus(OrderSettleLedgerStatusEnum.status6.getCode());
orderSettleService.editData(orderSettle);
} else if (data.getInteger("status") == 4) {
orderSettle.setLedgerStatus(OrderSettleLedgerStatusEnum.status4.getCode()); orderSettle.setLedgerStatus(OrderSettleLedgerStatusEnum.status4.getCode());
orderSettleService.editData(orderSettle); orderSettleService.editData(orderSettle);
} }

@ -43,16 +43,16 @@ public interface BsOrderSettleMapper extends BsOrderSettleMapperExt {
"settle_mer_no, settle_mer_key, ", "settle_mer_no, settle_mer_key, ",
"settle_amount, ledger_flag, ", "settle_amount, ledger_flag, ",
"ledger_order_no, ledger_amount, ", "ledger_order_no, ledger_amount, ",
"ledger_status, create_time, ", "ledger_status, revoke_order_no, ",
"update_time, ext_1, ", "create_time, update_time, ",
"ext_2, ext_3)", "ext_1, ext_2, ext_3)",
"values (#{merNo,jdbcType=VARCHAR}, #{orderNo,jdbcType=VARCHAR}, ", "values (#{merNo,jdbcType=VARCHAR}, #{orderNo,jdbcType=VARCHAR}, ",
"#{settleMerNo,jdbcType=VARCHAR}, #{settleMerKey,jdbcType=VARCHAR}, ", "#{settleMerNo,jdbcType=VARCHAR}, #{settleMerKey,jdbcType=VARCHAR}, ",
"#{settleAmount,jdbcType=DECIMAL}, #{ledgerFlag,jdbcType=BIT}, ", "#{settleAmount,jdbcType=DECIMAL}, #{ledgerFlag,jdbcType=BIT}, ",
"#{ledgerOrderNo,jdbcType=VARCHAR}, #{ledgerAmount,jdbcType=DECIMAL}, ", "#{ledgerOrderNo,jdbcType=VARCHAR}, #{ledgerAmount,jdbcType=DECIMAL}, ",
"#{ledgerStatus,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, ", "#{ledgerStatus,jdbcType=INTEGER}, #{revokeOrderNo,jdbcType=VARCHAR}, ",
"#{updateTime,jdbcType=TIMESTAMP}, #{ext1,jdbcType=VARCHAR}, ", "#{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}, ",
"#{ext2,jdbcType=VARCHAR}, #{ext3,jdbcType=VARCHAR})" "#{ext1,jdbcType=VARCHAR}, #{ext2,jdbcType=VARCHAR}, #{ext3,jdbcType=VARCHAR})"
}) })
@Options(useGeneratedKeys=true,keyProperty="id") @Options(useGeneratedKeys=true,keyProperty="id")
int insert(BsOrderSettle record); int insert(BsOrderSettle record);
@ -73,6 +73,7 @@ public interface BsOrderSettleMapper extends BsOrderSettleMapperExt {
@Result(column="ledger_order_no", property="ledgerOrderNo", jdbcType=JdbcType.VARCHAR), @Result(column="ledger_order_no", property="ledgerOrderNo", jdbcType=JdbcType.VARCHAR),
@Result(column="ledger_amount", property="ledgerAmount", jdbcType=JdbcType.DECIMAL), @Result(column="ledger_amount", property="ledgerAmount", jdbcType=JdbcType.DECIMAL),
@Result(column="ledger_status", property="ledgerStatus", jdbcType=JdbcType.INTEGER), @Result(column="ledger_status", property="ledgerStatus", jdbcType=JdbcType.INTEGER),
@Result(column="revoke_order_no", property="revokeOrderNo", jdbcType=JdbcType.VARCHAR),
@Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP), @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="ext_1", property="ext1", jdbcType=JdbcType.VARCHAR), @Result(column="ext_1", property="ext1", jdbcType=JdbcType.VARCHAR),
@ -84,8 +85,8 @@ public interface BsOrderSettleMapper extends BsOrderSettleMapperExt {
@Select({ @Select({
"select", "select",
"id, mer_no, order_no, settle_mer_no, settle_mer_key, settle_amount, ledger_flag, ", "id, mer_no, order_no, settle_mer_no, settle_mer_key, settle_amount, ledger_flag, ",
"ledger_order_no, ledger_amount, ledger_status, create_time, update_time, ext_1, ", "ledger_order_no, ledger_amount, ledger_status, revoke_order_no, create_time, ",
"ext_2, ext_3", "update_time, ext_1, ext_2, ext_3",
"from bs_order_settle", "from bs_order_settle",
"where id = #{id,jdbcType=BIGINT}" "where id = #{id,jdbcType=BIGINT}"
}) })
@ -100,6 +101,7 @@ public interface BsOrderSettleMapper extends BsOrderSettleMapperExt {
@Result(column="ledger_order_no", property="ledgerOrderNo", jdbcType=JdbcType.VARCHAR), @Result(column="ledger_order_no", property="ledgerOrderNo", jdbcType=JdbcType.VARCHAR),
@Result(column="ledger_amount", property="ledgerAmount", jdbcType=JdbcType.DECIMAL), @Result(column="ledger_amount", property="ledgerAmount", jdbcType=JdbcType.DECIMAL),
@Result(column="ledger_status", property="ledgerStatus", jdbcType=JdbcType.INTEGER), @Result(column="ledger_status", property="ledgerStatus", jdbcType=JdbcType.INTEGER),
@Result(column="revoke_order_no", property="revokeOrderNo", jdbcType=JdbcType.VARCHAR),
@Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP), @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="ext_1", property="ext1", jdbcType=JdbcType.VARCHAR), @Result(column="ext_1", property="ext1", jdbcType=JdbcType.VARCHAR),
@ -128,6 +130,7 @@ public interface BsOrderSettleMapper extends BsOrderSettleMapperExt {
"ledger_order_no = #{ledgerOrderNo,jdbcType=VARCHAR},", "ledger_order_no = #{ledgerOrderNo,jdbcType=VARCHAR},",
"ledger_amount = #{ledgerAmount,jdbcType=DECIMAL},", "ledger_amount = #{ledgerAmount,jdbcType=DECIMAL},",
"ledger_status = #{ledgerStatus,jdbcType=INTEGER},", "ledger_status = #{ledgerStatus,jdbcType=INTEGER},",
"revoke_order_no = #{revokeOrderNo,jdbcType=VARCHAR},",
"create_time = #{createTime,jdbcType=TIMESTAMP},", "create_time = #{createTime,jdbcType=TIMESTAMP},",
"update_time = #{updateTime,jdbcType=TIMESTAMP},", "update_time = #{updateTime,jdbcType=TIMESTAMP},",
"ext_1 = #{ext1,jdbcType=VARCHAR},", "ext_1 = #{ext1,jdbcType=VARCHAR},",

@ -1,7 +1,49 @@
package com.hfkj.dao; package com.hfkj.dao;
import com.hfkj.entity.BsOrderSettle;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.type.JdbcType;
import java.util.List;
import java.util.Map;
/** /**
* mapper扩展类 * mapper扩展类
*/ */
public interface BsOrderSettleMapperExt { public interface BsOrderSettleMapperExt {
}
@Select(" <script>" +
" SELECT a.* " +
" FROM `bs_order_settle` a " +
" LEFT JOIN bs_order b on b.order_no = a.order_no " +
" where 1 = 1 " +
" <if test='param.ledgerFlag != null'> and a.ledger_flag = #{param.ledgerFlag} </if>" +
" <if test='param.ledgerStatus != null'> and a.ledger_status = #{param.ledgerStatus} </if>" +
" <if test='param.orderStatus != null'> and b.order_status = #{param.orderStatus} </if>" +
" <if test='param.createTimeS != null'> <![CDATA[ and a.create_time >= #{param.createTimeS} ]]></if>" +
" <if test='param.createTimeE != null'> <![CDATA[ and a.create_time <= #{param.createTimeE} ]]></if>" +
"ORDER BY a.create_time desc" +
" </script>")
@Results({
@Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true),
@Result(column="mer_no", property="merNo", jdbcType=JdbcType.VARCHAR),
@Result(column="order_no", property="orderNo", jdbcType=JdbcType.VARCHAR),
@Result(column="settle_mer_no", property="settleMerNo", jdbcType=JdbcType.VARCHAR),
@Result(column="settle_mer_key", property="settleMerKey", jdbcType=JdbcType.VARCHAR),
@Result(column="settle_amount", property="settleAmount", jdbcType=JdbcType.DECIMAL),
@Result(column="ledger_flag", property="ledgerFlag", jdbcType=JdbcType.BIT),
@Result(column="ledger_order_no", property="ledgerOrderNo", jdbcType=JdbcType.VARCHAR),
@Result(column="ledger_amount", property="ledgerAmount", jdbcType=JdbcType.DECIMAL),
@Result(column="ledger_status", property="ledgerStatus", jdbcType=JdbcType.INTEGER),
@Result(column="revoke_order_no", property="revokeOrderNo", jdbcType=JdbcType.VARCHAR),
@Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="ext_1", property="ext1", jdbcType=JdbcType.VARCHAR),
@Result(column="ext_2", property="ext2", jdbcType=JdbcType.VARCHAR),
@Result(column="ext_3", property="ext3", jdbcType=JdbcType.VARCHAR)
})
List<BsOrderSettle> queryList(@Param("param") Map<String,Object> param);
}

@ -64,6 +64,10 @@ public class BsOrderSettleSqlProvider {
sql.VALUES("ledger_status", "#{ledgerStatus,jdbcType=INTEGER}"); sql.VALUES("ledger_status", "#{ledgerStatus,jdbcType=INTEGER}");
} }
if (record.getRevokeOrderNo() != null) {
sql.VALUES("revoke_order_no", "#{revokeOrderNo,jdbcType=VARCHAR}");
}
if (record.getCreateTime() != null) { if (record.getCreateTime() != null) {
sql.VALUES("create_time", "#{createTime,jdbcType=TIMESTAMP}"); sql.VALUES("create_time", "#{createTime,jdbcType=TIMESTAMP}");
} }
@ -103,6 +107,7 @@ public class BsOrderSettleSqlProvider {
sql.SELECT("ledger_order_no"); sql.SELECT("ledger_order_no");
sql.SELECT("ledger_amount"); sql.SELECT("ledger_amount");
sql.SELECT("ledger_status"); sql.SELECT("ledger_status");
sql.SELECT("revoke_order_no");
sql.SELECT("create_time"); sql.SELECT("create_time");
sql.SELECT("update_time"); sql.SELECT("update_time");
sql.SELECT("ext_1"); sql.SELECT("ext_1");
@ -165,6 +170,10 @@ public class BsOrderSettleSqlProvider {
sql.SET("ledger_status = #{record.ledgerStatus,jdbcType=INTEGER}"); sql.SET("ledger_status = #{record.ledgerStatus,jdbcType=INTEGER}");
} }
if (record.getRevokeOrderNo() != null) {
sql.SET("revoke_order_no = #{record.revokeOrderNo,jdbcType=VARCHAR}");
}
if (record.getCreateTime() != null) { if (record.getCreateTime() != null) {
sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}"); sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}");
} }
@ -203,6 +212,7 @@ public class BsOrderSettleSqlProvider {
sql.SET("ledger_order_no = #{record.ledgerOrderNo,jdbcType=VARCHAR}"); sql.SET("ledger_order_no = #{record.ledgerOrderNo,jdbcType=VARCHAR}");
sql.SET("ledger_amount = #{record.ledgerAmount,jdbcType=DECIMAL}"); sql.SET("ledger_amount = #{record.ledgerAmount,jdbcType=DECIMAL}");
sql.SET("ledger_status = #{record.ledgerStatus,jdbcType=INTEGER}"); sql.SET("ledger_status = #{record.ledgerStatus,jdbcType=INTEGER}");
sql.SET("revoke_order_no = #{record.revokeOrderNo,jdbcType=VARCHAR}");
sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}"); sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}");
sql.SET("update_time = #{record.updateTime,jdbcType=TIMESTAMP}"); sql.SET("update_time = #{record.updateTime,jdbcType=TIMESTAMP}");
sql.SET("ext_1 = #{record.ext1,jdbcType=VARCHAR}"); sql.SET("ext_1 = #{record.ext1,jdbcType=VARCHAR}");
@ -254,6 +264,10 @@ public class BsOrderSettleSqlProvider {
sql.SET("ledger_status = #{ledgerStatus,jdbcType=INTEGER}"); sql.SET("ledger_status = #{ledgerStatus,jdbcType=INTEGER}");
} }
if (record.getRevokeOrderNo() != null) {
sql.SET("revoke_order_no = #{revokeOrderNo,jdbcType=VARCHAR}");
}
if (record.getCreateTime() != null) { if (record.getCreateTime() != null) {
sql.SET("create_time = #{createTime,jdbcType=TIMESTAMP}"); sql.SET("create_time = #{createTime,jdbcType=TIMESTAMP}");
} }

@ -60,10 +60,15 @@ public class BsOrderSettle implements Serializable {
private BigDecimal ledgerAmount; private BigDecimal ledgerAmount;
/** /**
* 分账状态 0待处理 1已完成 2处理中 3已受理 4失败 * 分账状态 0待处理 1已完成 2处理中 3已受理 4失败 5撤销中 6撤销成功 7撤销失败
*/ */
private Integer ledgerStatus; private Integer ledgerStatus;
/**
* 撤销单号
*/
private String revokeOrderNo;
/** /**
* 创建时间 * 创建时间
*/ */
@ -162,6 +167,14 @@ public class BsOrderSettle implements Serializable {
this.ledgerStatus = ledgerStatus; this.ledgerStatus = ledgerStatus;
} }
public String getRevokeOrderNo() {
return revokeOrderNo;
}
public void setRevokeOrderNo(String revokeOrderNo) {
this.revokeOrderNo = revokeOrderNo;
}
public Date getCreateTime() { public Date getCreateTime() {
return createTime; return createTime;
} }
@ -224,6 +237,7 @@ public class BsOrderSettle implements Serializable {
&& (this.getLedgerOrderNo() == null ? other.getLedgerOrderNo() == null : this.getLedgerOrderNo().equals(other.getLedgerOrderNo())) && (this.getLedgerOrderNo() == null ? other.getLedgerOrderNo() == null : this.getLedgerOrderNo().equals(other.getLedgerOrderNo()))
&& (this.getLedgerAmount() == null ? other.getLedgerAmount() == null : this.getLedgerAmount().equals(other.getLedgerAmount())) && (this.getLedgerAmount() == null ? other.getLedgerAmount() == null : this.getLedgerAmount().equals(other.getLedgerAmount()))
&& (this.getLedgerStatus() == null ? other.getLedgerStatus() == null : this.getLedgerStatus().equals(other.getLedgerStatus())) && (this.getLedgerStatus() == null ? other.getLedgerStatus() == null : this.getLedgerStatus().equals(other.getLedgerStatus()))
&& (this.getRevokeOrderNo() == null ? other.getRevokeOrderNo() == null : this.getRevokeOrderNo().equals(other.getRevokeOrderNo()))
&& (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime())) && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()))
&& (this.getUpdateTime() == null ? other.getUpdateTime() == null : this.getUpdateTime().equals(other.getUpdateTime())) && (this.getUpdateTime() == null ? other.getUpdateTime() == null : this.getUpdateTime().equals(other.getUpdateTime()))
&& (this.getExt1() == null ? other.getExt1() == null : this.getExt1().equals(other.getExt1())) && (this.getExt1() == null ? other.getExt1() == null : this.getExt1().equals(other.getExt1()))
@ -245,6 +259,7 @@ public class BsOrderSettle implements Serializable {
result = prime * result + ((getLedgerOrderNo() == null) ? 0 : getLedgerOrderNo().hashCode()); result = prime * result + ((getLedgerOrderNo() == null) ? 0 : getLedgerOrderNo().hashCode());
result = prime * result + ((getLedgerAmount() == null) ? 0 : getLedgerAmount().hashCode()); result = prime * result + ((getLedgerAmount() == null) ? 0 : getLedgerAmount().hashCode());
result = prime * result + ((getLedgerStatus() == null) ? 0 : getLedgerStatus().hashCode()); result = prime * result + ((getLedgerStatus() == null) ? 0 : getLedgerStatus().hashCode());
result = prime * result + ((getRevokeOrderNo() == null) ? 0 : getRevokeOrderNo().hashCode());
result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode()); result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
result = prime * result + ((getUpdateTime() == null) ? 0 : getUpdateTime().hashCode()); result = prime * result + ((getUpdateTime() == null) ? 0 : getUpdateTime().hashCode());
result = prime * result + ((getExt1() == null) ? 0 : getExt1().hashCode()); result = prime * result + ((getExt1() == null) ? 0 : getExt1().hashCode());
@ -269,6 +284,7 @@ public class BsOrderSettle implements Serializable {
sb.append(", ledgerOrderNo=").append(ledgerOrderNo); sb.append(", ledgerOrderNo=").append(ledgerOrderNo);
sb.append(", ledgerAmount=").append(ledgerAmount); sb.append(", ledgerAmount=").append(ledgerAmount);
sb.append(", ledgerStatus=").append(ledgerStatus); sb.append(", ledgerStatus=").append(ledgerStatus);
sb.append(", revokeOrderNo=").append(revokeOrderNo);
sb.append(", createTime=").append(createTime); sb.append(", createTime=").append(createTime);
sb.append(", updateTime=").append(updateTime); sb.append(", updateTime=").append(updateTime);
sb.append(", ext1=").append(ext1); sb.append(", ext1=").append(ext1);

@ -776,6 +776,76 @@ public class BsOrderSettleExample {
return (Criteria) this; return (Criteria) this;
} }
public Criteria andRevokeOrderNoIsNull() {
addCriterion("revoke_order_no is null");
return (Criteria) this;
}
public Criteria andRevokeOrderNoIsNotNull() {
addCriterion("revoke_order_no is not null");
return (Criteria) this;
}
public Criteria andRevokeOrderNoEqualTo(String value) {
addCriterion("revoke_order_no =", value, "revokeOrderNo");
return (Criteria) this;
}
public Criteria andRevokeOrderNoNotEqualTo(String value) {
addCriterion("revoke_order_no <>", value, "revokeOrderNo");
return (Criteria) this;
}
public Criteria andRevokeOrderNoGreaterThan(String value) {
addCriterion("revoke_order_no >", value, "revokeOrderNo");
return (Criteria) this;
}
public Criteria andRevokeOrderNoGreaterThanOrEqualTo(String value) {
addCriterion("revoke_order_no >=", value, "revokeOrderNo");
return (Criteria) this;
}
public Criteria andRevokeOrderNoLessThan(String value) {
addCriterion("revoke_order_no <", value, "revokeOrderNo");
return (Criteria) this;
}
public Criteria andRevokeOrderNoLessThanOrEqualTo(String value) {
addCriterion("revoke_order_no <=", value, "revokeOrderNo");
return (Criteria) this;
}
public Criteria andRevokeOrderNoLike(String value) {
addCriterion("revoke_order_no like", value, "revokeOrderNo");
return (Criteria) this;
}
public Criteria andRevokeOrderNoNotLike(String value) {
addCriterion("revoke_order_no not like", value, "revokeOrderNo");
return (Criteria) this;
}
public Criteria andRevokeOrderNoIn(List<String> values) {
addCriterion("revoke_order_no in", values, "revokeOrderNo");
return (Criteria) this;
}
public Criteria andRevokeOrderNoNotIn(List<String> values) {
addCriterion("revoke_order_no not in", values, "revokeOrderNo");
return (Criteria) this;
}
public Criteria andRevokeOrderNoBetween(String value1, String value2) {
addCriterion("revoke_order_no between", value1, value2, "revokeOrderNo");
return (Criteria) this;
}
public Criteria andRevokeOrderNoNotBetween(String value1, String value2) {
addCriterion("revoke_order_no not between", value1, value2, "revokeOrderNo");
return (Criteria) this;
}
public Criteria andCreateTimeIsNull() { public Criteria andCreateTimeIsNull() {
addCriterion("create_time is null"); addCriterion("create_time is null");
return (Criteria) this; return (Criteria) this;

@ -134,13 +134,13 @@ public class HuiPayService {
param.put("merchantNo", orderSettle.getSettleMerNo()); param.put("merchantNo", orderSettle.getSettleMerNo());
param.put("outTradeNo", orderSettle.getOrderNo()); param.put("outTradeNo", orderSettle.getOrderNo());
param.put("outSeparateNo", orderSettle.getLedgerOrderNo()); param.put("outSeparateNo", orderSettle.getLedgerOrderNo());
param.put("totalAmount", orderSettle.getLedgerAmount()); param.put("totalAmount", orderSettle.getLedgerAmount().toString());
JSONArray recvDatas = new JSONArray(); JSONArray recvDatas = new JSONArray();
for (BsOrderSettleLedger settleLedger : settleLedgerList) { for (BsOrderSettleLedger settleLedger : settleLedgerList) {
JSONObject obj = new JSONObject(); JSONObject obj = new JSONObject();
obj.put("recvMerchantNo", settleLedger.getReceiverMerNo()); obj.put("recvMerchantNo", settleLedger.getReceiverMerNo());
obj.put("separateAmount", settleLedger.getReceiverAmount()); obj.put("separateAmount", settleLedger.getReceiverAmount().toString());
recvDatas.add(obj); recvDatas.add(obj);
} }
param.put("recvDatas", recvDatas); param.put("recvDatas", recvDatas);
@ -197,7 +197,7 @@ public class HuiPayService {
Map<String,Object> param = new HashMap<>(); Map<String,Object> param = new HashMap<>();
param.put("merchantNo", orderSettle.getSettleMerNo()); param.put("merchantNo", orderSettle.getSettleMerNo());
param.put("originOutSeparateNo", orderSettle.getLedgerOrderNo()); param.put("originOutSeparateNo", orderSettle.getLedgerOrderNo());
param.put("outSeparateNo", "LC"+ DateUtil.date2String(new Date(), "yyMMddHHmmss") + RandomUtils.number(3, false)); param.put("outSeparateNo", orderSettle.getRevokeOrderNo());
param.put("totalAmount", orderSettle.getLedgerAmount()); param.put("totalAmount", orderSettle.getLedgerAmount());
param.put("sign" , SignatureUtil.createSign(param, orderSettle.getSettleMerKey())); param.put("sign" , SignatureUtil.createSign(param, orderSettle.getSettleMerKey()));
log.info("请求地址:" + (REQUEST_URL + "profitSharing/cancel")); log.info("请求地址:" + (REQUEST_URL + "profitSharing/cancel"));
@ -214,5 +214,31 @@ public class HuiPayService {
} }
} }
/**
* 查询可分账余额
* @param orderSettle
* @return
*/
public static JSONObject queryAmt(BsOrderSettle orderSettle) {
try {
log.info("=============== start 惠支付查询可分账余额 start ==================");
Map<String,Object> param = new HashMap<>();
param.put("merchantNo", orderSettle.getSettleMerNo());
param.put("outTradeNo", orderSettle.getOrderNo());
param.put("sign" , SignatureUtil.createSign(param, orderSettle.getSettleMerKey()));
log.info("请求地址:" + (REQUEST_URL + "profitSharing/queryAmt"));
log.info("请求参数:" + JSONObject.toJSONString(param));
JSONObject response = HttpsUtils.doPost(REQUEST_URL + "profitSharing/queryAmt", param, new HashMap<>());
log.info("响应参数:" + response.toJSONString());
return response;
} catch (Exception e) {
log.info("出现异常"+ e.getMessage());
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "查询异常");
} finally {
log.info("=============== end 惠支付查询可分账余额 end ==================");
}
}
} }

@ -32,6 +32,12 @@ public interface BsOrderSettleService {
*/ */
void separate(BsOrderSettle orderSettle); void separate(BsOrderSettle orderSettle);
/**
* 撤销分账
* @param orderSettle
*/
void revokeLedger(BsOrderSettle orderSettle);
/** /**
* 查询列表 * 查询列表
* @param param * @param param

@ -87,6 +87,8 @@ public class BsOrderRefundServiceImpl implements BsOrderRefundService {
orderRefund.setRefundStatus(OrderRefundStatusEnum.status3.getCode()); orderRefund.setRefundStatus(OrderRefundStatusEnum.status3.getCode());
orderRefund.setRefundFailReason(refund.getString("return_msg")); orderRefund.setRefundFailReason(refund.getString("return_msg"));
editData(orderRefund); editData(orderRefund);
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, orderRefund.getRefundFailReason());
} }
} else { } else {
@ -97,12 +99,15 @@ public class BsOrderRefundServiceImpl implements BsOrderRefundService {
orderRefund.setRefundFailReason(e.getErrorMsg()); orderRefund.setRefundFailReason(e.getErrorMsg());
editData(orderRefund); editData(orderRefund);
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, e.getErrorMsg());
} catch (Exception e) { } catch (Exception e) {
orderRefund.setRefundStatus(OrderRefundStatusEnum.status3.getCode()); orderRefund.setRefundStatus(OrderRefundStatusEnum.status3.getCode());
orderRefund.setRefundFailReason("未知问题"); orderRefund.setRefundFailReason("未知问题");
editData(orderRefund); editData(orderRefund);
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "退款失败!");
} }
return false;
} }
@Override @Override
@ -123,12 +128,13 @@ public class BsOrderRefundServiceImpl implements BsOrderRefundService {
try { try {
BsOrderRefund orderRefund = tradeOrderChildRefund(orderChild.getChildOrderNo(), true, orderChild.getProductCount(), remark); BsOrderRefund orderRefund = tradeOrderChildRefund(orderChild.getChildOrderNo(), true, orderChild.getProductCount(), remark);
if (orderRefund.getRefundStatus().equals(OrderRefundStatusEnum.status3.getCode())) { if (orderRefund.getRefundStatus().equals(OrderRefundStatusEnum.status3.getCode())) {
refundSuccess = false; throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, orderRefund.getRefundFailReason());
} }
} catch (Exception e) { } catch (Exception e) {
refundSuccess = false; throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "退款失败");
} }
} }
order.setOrderStatus(refundSuccess ? OrderStatusEnum.status4.getCode() : order.getOrderStatus()); order.setOrderStatus(refundSuccess ? OrderStatusEnum.status4.getCode() : order.getOrderStatus());
order.setRefundTime(refundSuccess ? new Date() : null); order.setRefundTime(refundSuccess ? new Date() : null);
orderService.editData(order); orderService.editData(order);
@ -250,7 +256,11 @@ public class BsOrderRefundServiceImpl implements BsOrderRefundService {
if (orderChild.getProductType().equals(OrderChildProductTypeEnum.type1.getCode())) { if (orderChild.getProductType().equals(OrderChildProductTypeEnum.type1.getCode())) {
try { try {
orderRefundBusiness.gasOrder(orderRefund); orderRefundBusiness.gasOrder(orderRefund);
} catch (Exception e) { } } catch (BaseException e) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, e.getErrorMsg());
} catch (Exception e) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "退款失败");
}
} }
} }

@ -2,6 +2,11 @@ package com.hfkj.service.order.impl;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.hfkj.common.exception.ErrorCode;
import com.hfkj.common.exception.ErrorHelp;
import com.hfkj.common.exception.SysCode;
import com.hfkj.common.utils.DateUtil;
import com.hfkj.common.utils.RandomUtils;
import com.hfkj.dao.BsOrderSettleMapper; import com.hfkj.dao.BsOrderSettleMapper;
import com.hfkj.entity.*; import com.hfkj.entity.*;
import com.hfkj.pay.HuiPayService; import com.hfkj.pay.HuiPayService;
@ -65,6 +70,10 @@ public class BsOrderSettleServiceImpl implements BsOrderSettleService {
@Override @Override
public void separate(BsOrderSettle orderSettle) { public void separate(BsOrderSettle orderSettle) {
// 可分账余额
BigDecimal canSeparateAmt = HuiPayService.queryAmt(orderSettle).getJSONObject("return_data").getBigDecimal("canSeparateAmt");
// 总分账金额
BigDecimal totalLedgerAmount = new BigDecimal("0");
// 查询商户 // 查询商户
BsMerchant merchant = merchantService.getMerchant(orderSettle.getMerNo()); BsMerchant merchant = merchantService.getMerchant(orderSettle.getMerNo());
if (merchant != null) { if (merchant != null) {
@ -83,17 +92,22 @@ public class BsOrderSettleServiceImpl implements BsOrderSettleService {
settleLedger.setRatio(ledgerAccount.getBigDecimal("receiverRatio")); settleLedger.setRatio(ledgerAccount.getBigDecimal("receiverRatio"));
settleLedger.setReceiverMerNo(ledgerAccount.getString("receiverMerNo")); settleLedger.setReceiverMerNo(ledgerAccount.getString("receiverMerNo"));
settleLedger.setReceiverMerName(ledgerAccount.getString("receiverMerName")); settleLedger.setReceiverMerName(ledgerAccount.getString("receiverMerName"));
settleLedger.setReceiverAmount(settleLedger.getSharingAmount().multiply(settleLedger.getRatio().divide(new BigDecimal("100")))); settleLedger.setReceiverAmount(settleLedger.getSharingAmount().multiply(settleLedger.getRatio().divide(new BigDecimal("100"))).setScale(2, BigDecimal.ROUND_DOWN));
settleLedger.setStatus(0); settleLedger.setStatus(0);
orderSettleLedgerService.editData(settleLedger); orderSettleLedgerService.editData(settleLedger);
settleLedgerList.add(settleLedger); settleLedgerList.add(settleLedger);
// 累加分账金额
totalLedgerAmount = totalLedgerAmount.add(settleLedger.getReceiverAmount());
} }
} }
} else if (merchant.getSourceType().equals(MerchantSourceTypeEnum.type2.getNumber())) { } else if (merchant.getSourceType().equals(MerchantSourceTypeEnum.type2.getNumber())
|| merchant.getSourceType().equals(MerchantSourceTypeEnum.type3.getNumber())) {
// 查询商户配置 // 查询商户配置
BsGasChannelConfig gasChannelConfig = gasChannelConfigService.getDetail(MerchantSourceTypeEnum.type2); BsGasChannelConfig gasChannelConfig = gasChannelConfigService.getDetail(MerchantSourceTypeEnum.getDataByType(merchant.getSourceType()));
if (gasChannelConfig != null && StringUtils.isNotBlank(gasChannelConfig.getLedgerAccountData())) { if (gasChannelConfig != null && StringUtils.isNotBlank(gasChannelConfig.getLedgerAccountData())) {
// 分账接收方数据 // 分账接收方数据
JSONArray ledgerAccountData = JSONArray.parseArray(gasChannelConfig.getLedgerAccountData()); JSONArray ledgerAccountData = JSONArray.parseArray(gasChannelConfig.getLedgerAccountData());
for (Object obj : ledgerAccountData) { for (Object obj : ledgerAccountData) {
@ -104,13 +118,29 @@ public class BsOrderSettleServiceImpl implements BsOrderSettleService {
settleLedger.setRatio(ledgerAccount.getBigDecimal("receiverRatio")); settleLedger.setRatio(ledgerAccount.getBigDecimal("receiverRatio"));
settleLedger.setReceiverMerNo(ledgerAccount.getString("receiverMerNo")); settleLedger.setReceiverMerNo(ledgerAccount.getString("receiverMerNo"));
settleLedger.setReceiverMerName(ledgerAccount.getString("receiverMerName")); settleLedger.setReceiverMerName(ledgerAccount.getString("receiverMerName"));
settleLedger.setReceiverAmount(settleLedger.getSharingAmount().multiply(settleLedger.getRatio().divide(new BigDecimal("100")))); settleLedger.setReceiverAmount(settleLedger.getSharingAmount().multiply(settleLedger.getRatio().divide(new BigDecimal("100"))).setScale(2, BigDecimal.ROUND_DOWN));
settleLedger.setStatus(0); settleLedger.setStatus(0);
orderSettleLedgerService.editData(settleLedger); orderSettleLedgerService.editData(settleLedger);
settleLedgerList.add(settleLedger); settleLedgerList.add(settleLedger);
// 累加分账金额
totalLedgerAmount = totalLedgerAmount.add(settleLedger.getReceiverAmount());
} }
} }
} }
orderSettle.setLedgerAmount(canSeparateAmt);
editData(orderSettle);
// 收款账户也需要设置分账人
BsOrderSettleLedger settleLedger = new BsOrderSettleLedger();
settleLedger.setOrderSettleId(orderSettle.getId());
settleLedger.setSharingAmount(orderSettle.getSettleAmount());
settleLedger.setReceiverMerNo(orderSettle.getSettleMerNo());
settleLedger.setReceiverMerName(orderSettle.getSettleMerNo());
// 可分账余额 - 全部分账接收方总额 = 收款商户金额
settleLedger.setReceiverAmount(canSeparateAmt.subtract(totalLedgerAmount));
settleLedger.setStatus(0);
orderSettleLedgerService.editData(settleLedger);
settleLedgerList.add(settleLedger);
// 请求分账 // 请求分账
JSONObject separate = HuiPayService.profitSharingSeparate(orderSettle, settleLedgerList); JSONObject separate = HuiPayService.profitSharingSeparate(orderSettle, settleLedgerList);
@ -121,15 +151,30 @@ public class BsOrderSettleServiceImpl implements BsOrderSettleService {
} }
} }
@Override
public void revokeLedger(BsOrderSettle orderSettle) {
// 请求撤销分账
orderSettle.setRevokeOrderNo("LC"+ DateUtil.date2String(new Date(), "yyMMddHHmmss") + RandomUtils.number(3, false));
JSONObject separate = HuiPayService.profitSharingCancel(orderSettle);
if (separate.getString("return_code").equals("000000")) {
orderSettle.setLedgerStatus(OrderSettleLedgerStatusEnum.status5.getCode());
editData(orderSettle);
} else {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, separate.getString("return_msg"));
}
}
@Override @Override
public List<BsOrderSettle> getList(Map<String, Object> param) { public List<BsOrderSettle> getList(Map<String, Object> param) {
BsOrderSettleExample example = new BsOrderSettleExample();
BsOrderSettleExample.Criteria criteria = example.createCriteria();
if (MapUtils.getInteger(param, "ledgerStatus") != null) { if (MapUtils.getLong(param, "createTimeS") != null) {
criteria.andLedgerStatusEqualTo(MapUtils.getInteger(param, "ledgerStatus")); param.put("createTimeS", DateUtil.date2String(new Date(MapUtils.getLong(param, "createTimeS")), DateUtil.Y_M_D_HMS));
}
if (MapUtils.getLong(param, "createTimeE") != null) {
param.put("createTimeE", DateUtil.date2String(new Date(MapUtils.getLong(param, "createTimeE")), DateUtil.Y_M_D_HMS));
} }
return orderSettleMapper.selectByExample(example); return orderSettleMapper.queryList(param);
} }
} }

@ -29,6 +29,18 @@ public enum OrderSettleLedgerStatusEnum {
* 失败 * 失败
*/ */
status4(4, "失败"), status4(4, "失败"),
/**
* 撤销中
*/
status5(5, "撤销中"),
/**
* 撤销成功
*/
status6(6, "撤销成功"),
/**
* 撤销失败
*/
status7(7, "撤销失败"),
; ;
private final int code; private final int code;

Loading…
Cancel
Save