|
@@ -38,6 +38,7 @@ import com.zhongzheng.modules.inform.service.IInformSysUserService;
|
|
import com.zhongzheng.modules.inform.vo.InformRemindVo;
|
|
import com.zhongzheng.modules.inform.vo.InformRemindVo;
|
|
import com.zhongzheng.modules.order.domain.Order;
|
|
import com.zhongzheng.modules.order.domain.Order;
|
|
import com.zhongzheng.modules.order.domain.OrderGoods;
|
|
import com.zhongzheng.modules.order.domain.OrderGoods;
|
|
|
|
+import com.zhongzheng.modules.order.service.IOrderGoodsRefundService;
|
|
import com.zhongzheng.modules.order.service.IOrderGoodsService;
|
|
import com.zhongzheng.modules.order.service.IOrderGoodsService;
|
|
import com.zhongzheng.modules.system.domain.SysOldOrg;
|
|
import com.zhongzheng.modules.system.domain.SysOldOrg;
|
|
import com.zhongzheng.modules.system.domain.SysTenant;
|
|
import com.zhongzheng.modules.system.domain.SysTenant;
|
|
@@ -45,10 +46,8 @@ import com.zhongzheng.modules.system.service.ISysOldOrgService;
|
|
import com.zhongzheng.modules.system.service.ISysTenantService;
|
|
import com.zhongzheng.modules.system.service.ISysTenantService;
|
|
import com.zhongzheng.modules.system.service.ISysUserService;
|
|
import com.zhongzheng.modules.system.service.ISysUserService;
|
|
import com.zhongzheng.modules.top.financial.bo.TopDivideLogQueryBo;
|
|
import com.zhongzheng.modules.top.financial.bo.TopDivideLogQueryBo;
|
|
-import com.zhongzheng.modules.top.financial.bo.TopOrderProceedsBo;
|
|
|
|
-import com.zhongzheng.modules.top.financial.bo.TopOrderRemindBo;
|
|
|
|
-import com.zhongzheng.modules.top.financial.bo.TopOrderRevocationBo;
|
|
|
|
-import com.zhongzheng.modules.top.financial.bo.TopSellerDiscountBo;
|
|
|
|
|
|
+import com.zhongzheng.modules.system.vo.SysTenantAccountVo;
|
|
|
|
+import com.zhongzheng.modules.top.financial.bo.*;
|
|
import com.zhongzheng.modules.top.financial.domain.*;
|
|
import com.zhongzheng.modules.top.financial.domain.*;
|
|
import com.zhongzheng.modules.order.service.IOrderService;
|
|
import com.zhongzheng.modules.order.service.IOrderService;
|
|
import com.zhongzheng.modules.top.financial.domain.TopCostTp;
|
|
import com.zhongzheng.modules.top.financial.domain.TopCostTp;
|
|
@@ -183,6 +182,12 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
@Autowired
|
|
@Autowired
|
|
private ITopDivideLogService iTopDivideLogService;
|
|
private ITopDivideLogService iTopDivideLogService;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private ITopOrderBankPayService topOrderBankPayService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private IOrderGoodsRefundService orderGoodsRefundService;
|
|
|
|
+
|
|
@Value("${oldOrder.studyRecord}")
|
|
@Value("${oldOrder.studyRecord}")
|
|
private String ORDER_STUDY;
|
|
private String ORDER_STUDY;
|
|
|
|
|
|
@@ -201,6 +206,10 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
@Value("${oldOrder.inputOrderSn}")
|
|
@Value("${oldOrder.inputOrderSn}")
|
|
private String INPUT_ORDER;
|
|
private String INPUT_ORDER;
|
|
|
|
|
|
|
|
+ @Value("${oldOrder.checkOrderStudent}")
|
|
|
|
+ private String CHECK_ORDER_STUDENT;
|
|
|
|
+
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public TopOldOrderVo queryById(String orderSn) {
|
|
public TopOldOrderVo queryById(String orderSn) {
|
|
//查询视图 v_top_order
|
|
//查询视图 v_top_order
|
|
@@ -309,6 +318,14 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
add.setStatus(1);
|
|
add.setStatus(1);
|
|
add.setCreateTime(DateUtils.getNowTime());
|
|
add.setCreateTime(DateUtils.getNowTime());
|
|
add.setUpdateTime(DateUtils.getNowTime());
|
|
add.setUpdateTime(DateUtils.getNowTime());
|
|
|
|
+ //佣金计算
|
|
|
|
+ BigDecimal brokerage = new BigDecimal("0.0000");
|
|
|
|
+ if (ObjectUtils.isNotNull(bo.getPretaxBrokerage()) && ObjectUtils.isNotNull(bo.getPretax())){
|
|
|
|
+ BigDecimal multiply = bo.getPretaxBrokerage().multiply(bo.getPretax());
|
|
|
|
+ //总佣金
|
|
|
|
+ brokerage = bo.getPretaxBrokerage().subtract(multiply);
|
|
|
|
+ add.setBrokerage(brokerage);
|
|
|
|
+ }
|
|
// 获取企业默认成本模板
|
|
// 获取企业默认成本模板
|
|
TopCostTp costTp = topCostTpService.getOne(new LambdaQueryWrapper<TopCostTp>()
|
|
TopCostTp costTp = topCostTpService.getOne(new LambdaQueryWrapper<TopCostTp>()
|
|
.eq(TopCostTp::getTenantId, bo.getTenantId()).eq(TopCostTp::getDefaultStatus, 1).last("limit 1"));
|
|
.eq(TopCostTp::getTenantId, bo.getTenantId()).eq(TopCostTp::getDefaultStatus, 1).last("limit 1"));
|
|
@@ -317,18 +334,30 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
//成本项
|
|
//成本项
|
|
BigDecimal costTotal = new BigDecimal("0.00");//成本
|
|
BigDecimal costTotal = new BigDecimal("0.00");//成本
|
|
BigDecimal profitTotal = new BigDecimal("0.00"); //盈亏
|
|
BigDecimal profitTotal = new BigDecimal("0.00"); //盈亏
|
|
|
|
+ //平摊佣金
|
|
|
|
+ BigDecimal halveBrokerage = new BigDecimal("0.0000");
|
|
|
|
+ if (brokerage.compareTo(BigDecimal.ZERO) != 0){
|
|
|
|
+ halveBrokerage = brokerage.divide(new BigDecimal(bo.getOrderGoodsList().size()),4,BigDecimal.ROUND_DOWN);
|
|
|
|
+ }
|
|
for (TopOldOrderGoodsAddBo orderGoods : bo.getOrderGoodsList()) {
|
|
for (TopOldOrderGoodsAddBo orderGoods : bo.getOrderGoodsList()) {
|
|
- BigDecimal goodsPrice = orderGoods.getGoodsRealPrice();
|
|
|
|
|
|
+ //扣除平摊佣金
|
|
|
|
+ BigDecimal goodsPrice = orderGoods.getGoodsRealPrice().subtract(halveBrokerage);
|
|
|
|
+
|
|
|
|
+ //查找业务ID
|
|
List<TopCostTpItem> items = topCostTpItemService.getCostByBusiness(orderGoods.getBusinessFullName(), costTp.getTpId());
|
|
List<TopCostTpItem> items = topCostTpItemService.getCostByBusiness(orderGoods.getBusinessFullName(), costTp.getTpId());
|
|
if (CollectionUtils.isEmpty(items)) {
|
|
if (CollectionUtils.isEmpty(items)) {
|
|
//匹配不到成本项
|
|
//匹配不到成本项
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
//根据订单金额匹配成本阶梯
|
|
//根据订单金额匹配成本阶梯
|
|
- List<TopCostTpItem> tpItems = items.stream().filter(x ->
|
|
|
|
- (ObjectUtils.isNull(x.getMinValue()) && ObjectUtils.isNull(x.getMaxValue()))
|
|
|
|
- || (goodsPrice.compareTo(x.getMinValue()) > 0 && goodsPrice.compareTo(x.getMaxValue()) < 0)
|
|
|
|
- || (goodsPrice.compareTo(x.getMinValue()) == 0 && goodsPrice.compareTo(x.getMaxValue()) == 0)).collect(Collectors.toList());
|
|
|
|
|
|
+ List<TopCostTpItem> tpItems = new ArrayList<>();
|
|
|
|
+ for (TopCostTpItem x : items) {
|
|
|
|
+ if ((ObjectUtils.isNull(x.getMinValue()) && ObjectUtils.isNull(x.getMaxValue()))
|
|
|
|
+ || (goodsPrice.compareTo(x.getMinValue()) > 0 && goodsPrice.compareTo(x.getMaxValue()) < 0)
|
|
|
|
+ || (goodsPrice.compareTo(x.getMinValue()) == 0 && goodsPrice.compareTo(x.getMaxValue()) == 0)){
|
|
|
|
+ tpItems.add(x);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
if (CollectionUtils.isEmpty(tpItems)) {
|
|
if (CollectionUtils.isEmpty(tpItems)) {
|
|
//匹配不到成本项阶梯值
|
|
//匹配不到成本项阶梯值
|
|
continue;
|
|
continue;
|
|
@@ -338,10 +367,28 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
throw new CustomException(String.format("成本项阶梯匹配有误!(有多个)请检查【%s,价格:%s】", orderGoods.getBusinessFullName(), goodsPrice.toString()));
|
|
throw new CustomException(String.format("成本项阶梯匹配有误!(有多个)请检查【%s,价格:%s】", orderGoods.getBusinessFullName(), goodsPrice.toString()));
|
|
}
|
|
}
|
|
//换算订单成本和盈亏
|
|
//换算订单成本和盈亏
|
|
- TopCostTpItem topCostTpItem = tpItems.stream().findFirst().get();
|
|
|
|
BigDecimal cost = new BigDecimal("0.00");//成本
|
|
BigDecimal cost = new BigDecimal("0.00");//成本
|
|
BigDecimal profit = new BigDecimal("0.00"); //盈亏
|
|
BigDecimal profit = new BigDecimal("0.00"); //盈亏
|
|
BigDecimal bigDecimal = new BigDecimal("100");
|
|
BigDecimal bigDecimal = new BigDecimal("100");
|
|
|
|
+ TopCostTpItem topCostTpItem = tpItems.stream().findFirst().get();
|
|
|
|
+ if (topCostTpItem.getDockStatus() == 1){
|
|
|
|
+ //启用成本扣除项
|
|
|
|
+ switch (topCostTpItem.getDockType()){
|
|
|
|
+ case 1://百分比
|
|
|
|
+ //成本扣除金额
|
|
|
|
+ BigDecimal divide = topCostTpItem.getDockValue().divide(bigDecimal);
|
|
|
|
+ BigDecimal multiply = goodsPrice.multiply(divide);
|
|
|
|
+ goodsPrice = goodsPrice.subtract(multiply);
|
|
|
|
+ break;
|
|
|
|
+ case 2://固定金额
|
|
|
|
+ goodsPrice = goodsPrice.subtract(topCostTpItem.getDockValue());
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
switch (topCostTpItem.getItemType()) {
|
|
switch (topCostTpItem.getItemType()) {
|
|
case 1://百分比
|
|
case 1://百分比
|
|
BigDecimal divide = topCostTpItem.getTypeValue().divide(bigDecimal);
|
|
BigDecimal divide = topCostTpItem.getTypeValue().divide(bigDecimal);
|
|
@@ -415,7 +462,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
if (ObjectUtils.isNotNull(x.getUserCard())) {
|
|
if (ObjectUtils.isNotNull(x.getUserCard())) {
|
|
x.setUserCard(EncryptHandler.encrypt(x.getUserCard()));
|
|
x.setUserCard(EncryptHandler.encrypt(x.getUserCard()));
|
|
}
|
|
}
|
|
- x.setCheckStatus(0);//待审核
|
|
|
|
|
|
+ x.setCheckStatus(add.getCheckStatus());//待审核
|
|
x.setStatus(1);
|
|
x.setStatus(1);
|
|
x.setTenantId(add.getTenantId());
|
|
x.setTenantId(add.getTenantId());
|
|
});
|
|
});
|
|
@@ -483,25 +530,45 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
} else {
|
|
} else {
|
|
edit.setOrderUncollected(bo.getPayPrice().subtract(bo.getOrderReceived()));
|
|
edit.setOrderUncollected(bo.getPayPrice().subtract(bo.getOrderReceived()));
|
|
}
|
|
}
|
|
|
|
+ //佣金计算
|
|
|
|
+ if (ObjectUtils.isNotNull(bo.getPretaxBrokerage()) && ObjectUtils.isNotNull(bo.getPretax())){
|
|
|
|
+ BigDecimal multiply = bo.getPretaxBrokerage().multiply(bo.getPretax());
|
|
|
|
+ //总佣金
|
|
|
|
+ BigDecimal brokerage = bo.getPretaxBrokerage().subtract(multiply);
|
|
|
|
+ edit.setBrokerage(brokerage);
|
|
|
|
+ }
|
|
//订单商品
|
|
//订单商品
|
|
if (CollectionUtils.isNotEmpty(bo.getOrderGoodsList())) {
|
|
if (CollectionUtils.isNotEmpty(bo.getOrderGoodsList())) {
|
|
- bo.getOrderGoodsList().forEach(item -> {
|
|
|
|
- if (item.getCheckStatus() == 0) {
|
|
|
|
- //新增
|
|
|
|
- TopOldOrderGoods oldOrderGoods = BeanUtil.toBean(item, TopOldOrderGoods.class);
|
|
|
|
- oldOrderGoods.setTenantId(edit.getTenantId());
|
|
|
|
- oldOrderGoods.setStatus(1);
|
|
|
|
- oldOrderGoods.setUserCard(EncryptHandler.encrypt(item.getUserCard()));
|
|
|
|
- oldOrderGoods.setCheckStatus(order.getCheckStatus());
|
|
|
|
- topOrderGoodsService.save(oldOrderGoods);
|
|
|
|
- }else if (item.getCheckStatus() == -1){
|
|
|
|
- //取消
|
|
|
|
- topOrderGoodsService.update(new LambdaUpdateWrapper<TopOldOrderGoods>()
|
|
|
|
- .set(TopOldOrderGoods::getCheckStatus,-1)
|
|
|
|
- .eq(TopOldOrderGoods::getOrderSn,item.getOrderSn())
|
|
|
|
- .eq(TopOldOrderGoods::getSignId,item.getSignId()));
|
|
|
|
|
|
+// bo.getOrderGoodsList().forEach(item -> {
|
|
|
|
+// if (item.getCheckStatus() == 0) {
|
|
|
|
+// //新增
|
|
|
|
+// TopOldOrderGoods oldOrderGoods = BeanUtil.toBean(item, TopOldOrderGoods.class);
|
|
|
|
+// oldOrderGoods.setTenantId(edit.getTenantId());
|
|
|
|
+// oldOrderGoods.setStatus(1);
|
|
|
|
+// oldOrderGoods.setUserCard(EncryptHandler.encrypt(item.getUserCard()));
|
|
|
|
+// oldOrderGoods.setCheckStatus(order.getCheckStatus());
|
|
|
|
+// topOrderGoodsService.save(oldOrderGoods);
|
|
|
|
+// }else if (item.getCheckStatus() == -1){
|
|
|
|
+// //取消
|
|
|
|
+// topOrderGoodsService.update(new LambdaUpdateWrapper<TopOldOrderGoods>()
|
|
|
|
+// .set(TopOldOrderGoods::getCheckStatus,-1)
|
|
|
|
+// .eq(TopOldOrderGoods::getOrderSn,item.getOrderSn())
|
|
|
|
+// .eq(TopOldOrderGoods::getSignId,item.getSignId()));
|
|
|
|
+// }
|
|
|
|
+// });
|
|
|
|
+ //删除之前关联重新添加
|
|
|
|
+ topOrderGoodsService.remove(new LambdaQueryWrapper<TopOldOrderGoods>().eq(TopOldOrderGoods::getOrderSn, edit.getOrderSn()));
|
|
|
|
+ List<TopOldOrderGoods> collect = bo.getOrderGoodsList().stream().map(item -> BeanUtil.toBean(item, TopOldOrderGoods.class)).collect(Collectors.toList());
|
|
|
|
+ //学员身份证加密
|
|
|
|
+ collect.forEach(x -> {
|
|
|
|
+ if (ObjectUtils.isNotNull(x.getUserCard())) {
|
|
|
|
+ x.setUserCard(EncryptHandler.encrypt(x.getUserCard()));
|
|
}
|
|
}
|
|
|
|
+ x.setCheckStatus(edit.getCheckStatus());//待审核
|
|
|
|
+ x.setStatus(1);
|
|
|
|
+ x.setTenantId(edit.getTenantId());
|
|
});
|
|
});
|
|
|
|
+ topOrderGoodsService.saveBatch(collect);
|
|
}
|
|
}
|
|
|
|
|
|
//订单附件
|
|
//订单附件
|
|
@@ -526,18 +593,51 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
BigDecimal profitTotal = new BigDecimal("0.00"); //盈亏
|
|
BigDecimal profitTotal = new BigDecimal("0.00"); //盈亏
|
|
List<TopOldOrderGoods> orderGoodsList = topOrderGoodsService.list(new LambdaQueryWrapper<TopOldOrderGoods>()
|
|
List<TopOldOrderGoods> orderGoodsList = topOrderGoodsService.list(new LambdaQueryWrapper<TopOldOrderGoods>()
|
|
.eq(TopOldOrderGoods::getOrderSn, order.getOrderSn()).ne(TopOldOrderGoods::getCheckStatus, -1).eq(TopOldOrderGoods::getStatus, 1));
|
|
.eq(TopOldOrderGoods::getOrderSn, order.getOrderSn()).ne(TopOldOrderGoods::getCheckStatus, -1).eq(TopOldOrderGoods::getStatus, 1));
|
|
|
|
+ //佣金
|
|
|
|
+ BigDecimal brokerage = order.getBrokerage();
|
|
|
|
+ //平摊佣金
|
|
|
|
+ BigDecimal halveBrokerage = new BigDecimal("0.0000");
|
|
|
|
+ if (ObjectUtils.isNotNull(order.getBrokerage()) && order.getBrokerage().compareTo(BigDecimal.ZERO) != 0){
|
|
|
|
+ halveBrokerage = brokerage.divide(new BigDecimal(orderGoodsList.size()),4,BigDecimal.ROUND_DOWN);
|
|
|
|
+ }
|
|
for (TopOldOrderGoods orderGoods : orderGoodsList) {
|
|
for (TopOldOrderGoods orderGoods : orderGoodsList) {
|
|
- BigDecimal goodsPrice = orderGoods.getGoodsRealPrice();
|
|
|
|
- List<TopCostTpItemVo> items = topCostTpVo.getItemList();
|
|
|
|
|
|
+ //扣除佣金
|
|
|
|
+ BigDecimal goodsPrice = orderGoods.getGoodsRealPrice().subtract(halveBrokerage);
|
|
|
|
+ String businessFullName = orderGoods.getBusinessFullName();
|
|
|
|
+ //业务层次过滤
|
|
|
|
+ List<TopCostTpItemVo> items = topCostTpVo.getItemList().stream().filter(item -> {
|
|
|
|
+ //教育类型不限
|
|
|
|
+ if (item.getEducationTypeId() == -1){return true;}
|
|
|
|
+
|
|
|
|
+ TopCourseEducationType educationType = topCourseEducationTypeService.getById(item.getEducationTypeId());
|
|
|
|
+ if (!businessFullName.contains(educationType.getEducationName()) && !businessFullName.contains(educationType.getSchemeName())){
|
|
|
|
+ //教育类型匹配失败
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ //项目类型和业务层次
|
|
|
|
+ if (item.getProjectId() == -1 && item.getBusinessId() == -1){
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ TopCourseProjectType projectType = topCourseProjectTypeService.getById(item.getProjectId());
|
|
|
|
+ TopCourseBusiness business = topCourseBusinessService.getById(item.getBusinessId());
|
|
|
|
+ if (businessFullName.contains(projectType.getProjectName()) && businessFullName.contains(business.getBusinessName())){
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ return false;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
if (CollectionUtils.isEmpty(items)) {
|
|
if (CollectionUtils.isEmpty(items)) {
|
|
//匹配不到成本项
|
|
//匹配不到成本项
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
//根据订单金额匹配成本阶梯
|
|
//根据订单金额匹配成本阶梯
|
|
- List<TopCostTpItemVo> tpItems = items.stream().filter(x ->
|
|
|
|
- (ObjectUtils.isNull(x.getMinValue()) && ObjectUtils.isNull(x.getMaxValue()))
|
|
|
|
- || (goodsPrice.compareTo(x.getMinValue()) > 0 && goodsPrice.compareTo(x.getMaxValue()) < 0)
|
|
|
|
- || (goodsPrice.compareTo(x.getMinValue()) == 0 && goodsPrice.compareTo(x.getMaxValue()) == 0)).collect(Collectors.toList());
|
|
|
|
|
|
+ List<TopCostTpItemVo> tpItems = new ArrayList<>();
|
|
|
|
+ for (TopCostTpItemVo x : items) {
|
|
|
|
+ if ((ObjectUtils.isNull(x.getMinValue()) && ObjectUtils.isNull(x.getMaxValue()))
|
|
|
|
+ || (goodsPrice.compareTo(x.getMinValue()) > 0 && goodsPrice.compareTo(x.getMaxValue()) < 0)
|
|
|
|
+ || (goodsPrice.compareTo(x.getMinValue()) == 0 && goodsPrice.compareTo(x.getMaxValue()) == 0)){
|
|
|
|
+ tpItems.add(x);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
if (CollectionUtils.isEmpty(tpItems)) {
|
|
if (CollectionUtils.isEmpty(tpItems)) {
|
|
//匹配不到成本项阶梯值
|
|
//匹配不到成本项阶梯值
|
|
continue;
|
|
continue;
|
|
@@ -551,6 +651,23 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
BigDecimal cost = new BigDecimal("0.00");//成本
|
|
BigDecimal cost = new BigDecimal("0.00");//成本
|
|
BigDecimal profit = new BigDecimal("0.00"); //盈亏
|
|
BigDecimal profit = new BigDecimal("0.00"); //盈亏
|
|
BigDecimal bigDecimal = new BigDecimal("100");
|
|
BigDecimal bigDecimal = new BigDecimal("100");
|
|
|
|
+ if (topCostTpItem.getDockStatus() == 1){
|
|
|
|
+ //启用成本扣除项
|
|
|
|
+ switch (topCostTpItem.getDockType()){
|
|
|
|
+ case 1://百分比
|
|
|
|
+ //成本扣除金额
|
|
|
|
+ BigDecimal divide = topCostTpItem.getDockValue().divide(bigDecimal);
|
|
|
|
+ BigDecimal multiply = goodsPrice.multiply(divide);
|
|
|
|
+ goodsPrice = goodsPrice.subtract(multiply);
|
|
|
|
+ break;
|
|
|
|
+ case 2://固定金额
|
|
|
|
+ goodsPrice = goodsPrice.subtract(topCostTpItem.getDockValue());
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
switch (topCostTpItem.getItemType()) {
|
|
switch (topCostTpItem.getItemType()) {
|
|
case 1://百分比
|
|
case 1://百分比
|
|
BigDecimal divide = topCostTpItem.getTypeValue().divide(bigDecimal);
|
|
BigDecimal divide = topCostTpItem.getTypeValue().divide(bigDecimal);
|
|
@@ -581,37 +698,46 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
if (order.getOrderFrom() == 1) {
|
|
if (order.getOrderFrom() == 1) {
|
|
throw new CustomException("订单号无效:" + bo.getOrderSn());
|
|
throw new CustomException("订单号无效:" + bo.getOrderSn());
|
|
}
|
|
}
|
|
- if (CollectionUtils.isEmpty(bo.getOrderGoodsList())) {
|
|
|
|
- return false;
|
|
|
|
|
|
+ if (order.getFinishStatus() == 1) {
|
|
|
|
+ throw new CustomException("订单已完单不能修改:" + bo.getOrderSn());
|
|
}
|
|
}
|
|
- List<TopOldOrderGoods> add = new ArrayList<>();
|
|
|
|
- List<Long> signIds = new ArrayList<>();
|
|
|
|
- //订单学员情况
|
|
|
|
- for (TopOldOrderGoodsAddBo orderGoods : bo.getOrderGoodsList()) {
|
|
|
|
- switch (orderGoods.getCheckStatus()) {
|
|
|
|
- case 0://新增
|
|
|
|
- orderGoods.setCheckStatus(0);//待审核
|
|
|
|
- TopOldOrderGoods oldOrderGoods = BeanUtil.toBean(orderGoods, TopOldOrderGoods.class);
|
|
|
|
- oldOrderGoods.setUserCard(EncryptHandler.encrypt(oldOrderGoods.getUserCard()));
|
|
|
|
- add.add(oldOrderGoods);
|
|
|
|
- break;
|
|
|
|
- case -1://删除
|
|
|
|
- signIds.add(orderGoods.getSignId());
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ //佣金计算
|
|
|
|
+ if (ObjectUtils.isNotNull(bo.getPretaxBrokerage()) && ObjectUtils.isNotNull(bo.getPretax())){
|
|
|
|
+ BigDecimal multiply = bo.getPretaxBrokerage().multiply(bo.getPretax());
|
|
|
|
+ //总佣金
|
|
|
|
+ BigDecimal brokerage = bo.getPretaxBrokerage().subtract(multiply);
|
|
|
|
+ order.setBrokerage(brokerage);
|
|
}
|
|
}
|
|
- if (CollectionUtils.isNotEmpty(add)) {
|
|
|
|
- topOrderGoodsService.saveBatch(add);
|
|
|
|
- }
|
|
|
|
- if (CollectionUtils.isNotEmpty(signIds)) {
|
|
|
|
- topOrderGoodsService.update(new LambdaUpdateWrapper<TopOldOrderGoods>()
|
|
|
|
- .set(TopOldOrderGoods::getCheckStatus, -1)//删除学员
|
|
|
|
- .eq(TopOldOrderGoods::getOrderSn, bo.getOrderSn())
|
|
|
|
- .in(TopOldOrderGoods::getSignId, signIds));
|
|
|
|
|
|
+ if (CollectionUtils.isNotEmpty(bo.getOrderGoodsList())) {
|
|
|
|
+ List<TopOldOrderGoods> add = new ArrayList<>();
|
|
|
|
+ List<Long> signIds = new ArrayList<>();
|
|
|
|
+ //订单学员情况
|
|
|
|
+ for (TopOldOrderGoodsAddBo orderGoods : bo.getOrderGoodsList()) {
|
|
|
|
+ switch (orderGoods.getCheckStatus()) {
|
|
|
|
+ case 0://新增
|
|
|
|
+ orderGoods.setCheckStatus(0);//待审核
|
|
|
|
+ TopOldOrderGoods oldOrderGoods = BeanUtil.toBean(orderGoods, TopOldOrderGoods.class);
|
|
|
|
+ oldOrderGoods.setUserCard(EncryptHandler.encrypt(oldOrderGoods.getUserCard()));
|
|
|
|
+ add.add(oldOrderGoods);
|
|
|
|
+ break;
|
|
|
|
+ case -1://删除
|
|
|
|
+ signIds.add(orderGoods.getSignId());
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (CollectionUtils.isNotEmpty(add)) {
|
|
|
|
+ topOrderGoodsService.saveBatch(add);
|
|
|
|
+ }
|
|
|
|
+ if (CollectionUtils.isNotEmpty(signIds)) {
|
|
|
|
+ topOrderGoodsService.update(new LambdaUpdateWrapper<TopOldOrderGoods>()
|
|
|
|
+ .set(TopOldOrderGoods::getCheckStatus, -1)//删除学员
|
|
|
|
+ .eq(TopOldOrderGoods::getOrderSn, bo.getOrderSn())
|
|
|
|
+ .in(TopOldOrderGoods::getSignId, signIds));
|
|
|
|
+ }
|
|
|
|
+ order.setCheckRemark(bo.getOrderGoodsList().stream().map(x -> x.getSignId().toString()).collect(Collectors.joining(",")));
|
|
}
|
|
}
|
|
- order.setCheckRemark(bo.getOrderGoodsList().stream().map(x -> x.getSignId().toString()).collect(Collectors.joining(",")));
|
|
|
|
//重新计算成本
|
|
//重新计算成本
|
|
if (StringUtils.isNotBlank(order.getCostJson())) {
|
|
if (StringUtils.isNotBlank(order.getCostJson())) {
|
|
recalculateCost(order.getCostJson(),order);
|
|
recalculateCost(order.getCostJson(),order);
|
|
@@ -872,12 +998,13 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
if (roleIdList.stream().noneMatch(x -> roles.contains(x)) && !"admin".equals(bo.getLoginName())) {
|
|
if (roleIdList.stream().noneMatch(x -> roles.contains(x)) && !"admin".equals(bo.getLoginName())) {
|
|
throw new CustomException("当前账号没有审核权限");
|
|
throw new CustomException("当前账号没有审核权限");
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ List<TopOldOrderGoods> list = topOrderGoodsService.listByIds(bo.getOrderGoodsIds());
|
|
|
|
+ list.forEach(x -> x.setCheckStatus(bo.getCheckStatus()));
|
|
|
|
+ topOrderGoodsService.updateBatchById(list);
|
|
if (oldOrder.getOrderBase() == 1) {
|
|
if (oldOrder.getOrderBase() == 1) {
|
|
//处理退学学员 并且订单在新系统
|
|
//处理退学学员 并且订单在新系统
|
|
switch (bo.getCheckStatus()) {
|
|
switch (bo.getCheckStatus()) {
|
|
case 1://审核通过
|
|
case 1://审核通过
|
|
- List<TopOldOrderGoods> list = topOrderGoodsService.listByIds(bo.getOrderGoodsIds());
|
|
|
|
List<String> userNames = new ArrayList<>();
|
|
List<String> userNames = new ArrayList<>();
|
|
list.forEach(item -> {
|
|
list.forEach(item -> {
|
|
User user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getIdCard, item.getUserCard()));
|
|
User user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getIdCard, item.getUserCard()));
|
|
@@ -911,8 +1038,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
this.informRemind(userNames);
|
|
this.informRemind(userNames);
|
|
break;
|
|
break;
|
|
case 2: //审核未通过
|
|
case 2: //审核未通过
|
|
- List<TopOldOrderGoods> list2 = topOrderGoodsService.listByIds(bo.getOrderGoodsIds());
|
|
|
|
- list2.forEach(item -> {
|
|
|
|
|
|
+ list.forEach(item -> {
|
|
User user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getIdCard, item.getUserCard()));
|
|
User user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getIdCard, item.getUserCard()));
|
|
if (ObjectUtil.isNull(user)) {
|
|
if (ObjectUtil.isNull(user)) {
|
|
return;
|
|
return;
|
|
@@ -940,13 +1066,228 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
//清除标识IDs
|
|
//清除标识IDs
|
|
oldOrder.setCheckRemark("");
|
|
oldOrder.setCheckRemark("");
|
|
break;
|
|
break;
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 订单审核通知业务系统
|
|
|
|
+ List<CheckOrderStudentDetailBo> studentDetailBos = list.stream().map(item -> {
|
|
|
|
+ CheckOrderStudentDetailBo detailBo = new CheckOrderStudentDetailBo();
|
|
|
|
+ detailBo.setGoodsId(item.getGoodsId());
|
|
|
|
+ detailBo.setOrderUserItemId(item.getSignId().intValue());
|
|
|
|
+ detailBo.setUserName(item.getUserName());
|
|
|
|
+ detailBo.setIdNum(item.getUserCard());
|
|
|
|
+ return detailBo;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+ CheckOrderStudentBo studentBo = new CheckOrderStudentBo();
|
|
|
|
+ Long nowTime = DateUtils.getNowTime();
|
|
|
|
+ String sign = ToolsUtils.EncoderByMd5(bo.getOrderSn() + nowTime.toString() + "pubilc2022");
|
|
|
|
+ studentBo.setStamp(nowTime);
|
|
|
|
+ studentBo.setSign(sign);
|
|
|
|
+ studentBo.setOrderSn(bo.getOrderSn());
|
|
|
|
+ studentBo.setAuditStatus(bo.getCheckStatus());
|
|
|
|
+ studentBo.setData(studentDetailBos);
|
|
|
|
+ String respone = "";
|
|
|
|
+ try {
|
|
|
|
+ respone = HttpUtils.sendPostHeader(CHECK_ORDER_STUDENT,JSONObject.parseObject(JSONObject.toJSONString(studentBo)),new HashMap<>());
|
|
|
|
+ if (!respone.contains("\"Status\":true")) {
|
|
|
|
+ throw new CustomException("旧系统重新审核接口接口请求错误");
|
|
}
|
|
}
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("旧系统重新审核接口接口请求错误" + respone);
|
|
|
|
+ throw new CustomException("旧系统重新审核接口接口请求错误");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
+ public boolean orderRefundPay(OrderRefundPayBo bo) {
|
|
|
|
+ if(Validator.isEmpty(bo.getOrderSn())||Validator.isEmpty(bo.getTenantId())||Validator.isEmpty(bo.getPayType())){
|
|
|
|
+ throw new CustomException("参数错误");
|
|
|
|
+ }
|
|
|
|
+ if(Validator.isEmpty(bo.getToBankAcount())||Validator.isEmpty(bo.getToBankName())||Validator.isEmpty(bo.getToBankTypeName())){
|
|
|
|
+ throw new CustomException("支付参数错误");
|
|
|
|
+ }
|
|
|
|
+ //校验当前角色审核权限
|
|
|
|
+ List<TopSysUserRole> userRoleList = topSysUserRoleService.list(new LambdaQueryWrapper<TopSysUserRole>().eq(TopSysUserRole::getUserId, bo.getLoginId()));
|
|
|
|
+ if (CollectionUtils.isEmpty(userRoleList) && !bo.getLoginName().equals("admin")) {
|
|
|
|
+ throw new CustomException("当前账号没有审核权限");
|
|
|
|
+ }
|
|
|
|
+ //退款详情
|
|
|
|
+ List<TopOldOrderRefund> orderRefundList = topOldOrderRefundService
|
|
|
|
+ .list(new LambdaQueryWrapper<TopOldOrderRefund>()
|
|
|
|
+ .eq(TopOldOrderRefund::getOrderSn, bo.getOrderSn())
|
|
|
|
+ .eq(TopOldOrderRefund::getPeriodStatus, 2)//待退款
|
|
|
|
+ .eq(TopOldOrderRefund::getStatus, 1));
|
|
|
|
+ List<Long> roleIds = userRoleList.stream().map(TopSysUserRole::getRoleId).collect(Collectors.toList());
|
|
|
|
+ TopOldOrderCheckLog checkLog = topOldOrderCheckLogService.getOne(new LambdaQueryWrapper<TopOldOrderCheckLog>()
|
|
|
|
+ .eq(TopOldOrderCheckLog::getRefundSn, orderRefundList.get(0).getRefundSn())
|
|
|
|
+ .eq(TopOldOrderCheckLog::getStatus, 1)
|
|
|
|
+ .eq(TopOldOrderCheckLog::getCheckSign, 1)
|
|
|
|
+ .last("limit 1"));
|
|
|
|
+ if(Validator.isEmpty(checkLog)){
|
|
|
|
+ throw new CustomException("审核数据错误");
|
|
}
|
|
}
|
|
|
|
+ if (!roleIds.contains(checkLog.getRoleId()) && !bo.getLoginName().equals("admin") ) {
|
|
|
|
+ throw new CustomException("当前账号没有审核权限");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ TopOldOrder order = baseMapper.getOrderBySn(bo.getOrderSn());
|
|
|
|
+ if(Validator.isEmpty(order)){
|
|
|
|
+ throw new CustomException("订单数据错误无法支付");
|
|
|
|
+ }
|
|
|
|
+ //退款金额
|
|
|
|
+ BigDecimal refundPrice = orderRefundList.stream().map(TopOldOrderRefund::getRefundFee).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+ if (order.getOrderFrom() == 3 && bo.getPayType() == 2){
|
|
|
|
+ //旧系统B端网银退款处理
|
|
|
|
+ handleEnterpriseRefund(refundPrice,order,bo);
|
|
|
|
+ if (order.getOrderBase() == 1){
|
|
|
|
+ //底单在新系统 处理退款订单
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }else if (order.getOrderFrom() == 1 && bo.getPayType() == 1){
|
|
|
|
+ //新系统C端微信退款处理
|
|
|
|
+ handleUserRefund(refundPrice,order,bo);
|
|
|
|
+ }else if (order.getOrderFrom() == 2 && bo.getPayType() == 1){
|
|
|
|
+ // todo 旧系统C端微信退款处理
|
|
|
|
+ if (order.getOrderBase() == 1){
|
|
|
|
+ //底单在新系统 处理退款订单
|
|
|
|
|
|
- //todo 通知业务系统
|
|
|
|
|
|
+ }
|
|
|
|
+ }
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private void handleUserRefund(BigDecimal refundPrice, TopOldOrder order, OrderRefundPayBo bo) {
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void handleEnterpriseRefund(BigDecimal refundPrice,TopOldOrder order,OrderRefundPayBo bo) {
|
|
|
|
+ if (ObjectUtils.isNotNull(order.getOrderUncollected()) && order.getOrderUncollected().compareTo(BigDecimal.ZERO) !=0){
|
|
|
|
+ //存在未收款金额
|
|
|
|
+ BigDecimal orderUncollected = order.getOrderUncollected();
|
|
|
|
+ if (refundPrice.compareTo(orderUncollected) > 0){
|
|
|
|
+ refundPrice = refundPrice.subtract(orderUncollected);
|
|
|
|
+ order.setOrderUncollected(BigDecimal.ZERO);
|
|
|
|
+ }else {
|
|
|
|
+ //未收比退款多或者相等
|
|
|
|
+ refundPrice = BigDecimal.ZERO;
|
|
|
|
+ order.setOrderUncollected(orderUncollected.subtract(refundPrice));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (refundPrice.compareTo(BigDecimal.ZERO) > 0){
|
|
|
|
+ bo.setTrainOrgId(order.getTenantId().toString());//旧机构ID
|
|
|
|
+ String paySn = DateUtils.getTagOrderSn("CP");
|
|
|
|
+ TopOrderBankPay add = BeanUtil.toBean(bo, TopOrderBankPay.class);
|
|
|
|
+ add.setPaySn(paySn);
|
|
|
|
+ add.setCreateTime(DateUtils.getNowTime());
|
|
|
|
+ add.setUpdateTime(DateUtils.getNowTime());
|
|
|
|
+ add.setResultStatus(0);
|
|
|
|
+ add.setPayUsername(bo.getLoginName());
|
|
|
|
+ add.setType(2);//退款
|
|
|
|
+ add.setMoney(refundPrice);
|
|
|
|
+ Map<String, String> params = new HashMap<>();
|
|
|
|
+ Long nowTime = DateUtils.getNowTime();
|
|
|
|
+ String sign = ToolsUtils.EncoderByMd5(paySn+nowTime.toString()+"pubilc2022");
|
|
|
|
+ params.put("stamp", nowTime.toString());
|
|
|
|
+ params.put("sign", sign);
|
|
|
|
+ params.put("MainUniqueId", paySn);
|
|
|
|
+ params.put("ToBankAcount", bo.getToBankAcount());
|
|
|
|
+ params.put("ToBankName", bo.getToBankName());
|
|
|
|
+ params.put("ToBankTypeName", bo.getToBankTypeName());
|
|
|
|
+ params.put("Money", refundPrice.toString());
|
|
|
|
+ params.put("TrainOrgId", bo.getTrainOrgId());
|
|
|
|
+ if(Validator.isNotEmpty(bo.getToBankConnetNum())){
|
|
|
|
+ params.put("ToBankConnetNum", bo.getToBankConnetNum());
|
|
|
|
+ }
|
|
|
|
+ if(Validator.isNotEmpty(bo.getRemark())){
|
|
|
|
+ params.put("Remark", bo.getRemark());
|
|
|
|
+ }
|
|
|
|
+ String respone = "";
|
|
|
|
+ String paramStr = JSON.toJSONString(params);
|
|
|
|
+ add.setParamJson(paramStr);
|
|
|
|
+ String path = OLD_SYS_HOST+"/WitSystem/BussinessApi/NeedToPay";
|
|
|
|
+ try {
|
|
|
|
+ respone = HttpUtils.postFormBody(path, params);
|
|
|
|
+ if (!respone.contains("\"Status\":true")) {
|
|
|
|
+ throw new CustomException("退款支付请求错误"+respone);
|
|
|
|
+ }
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ throw new CustomException("退款支付请求错误"+e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ topOrderBankPayService.save(add);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public OrderRefundPayDetailVo getOrderRefundPayDetail(String orderSn) {
|
|
|
|
+ TopOldOrder order = baseMapper.getOrderBySn(orderSn);
|
|
|
|
+ if (ObjectUtils.isNull(order)){
|
|
|
|
+ throw new CustomException("订单号有误!");
|
|
|
|
+ }
|
|
|
|
+ OrderRefundPayDetailVo vo = new OrderRefundPayDetailVo();
|
|
|
|
+ SysTenant tenant = sysTenantService.getById(order.getTenantId());
|
|
|
|
+ //账号信息
|
|
|
|
+ String information = tenant.getAccountInformation();
|
|
|
|
+ SysTenantAccountVo accountVo = JSONObject.parseObject(information, SysTenantAccountVo.class);
|
|
|
|
+ vo.setOpeningBank(accountVo.getOpeningBank());
|
|
|
|
+ vo.setOpeningName(accountVo.getOpeningName());
|
|
|
|
+ vo.setProceedsAccount(accountVo.getProceedsAccount());
|
|
|
|
+ //获取退款金额
|
|
|
|
+ List<TopOldOrderRefund> list = topOldOrderRefundService
|
|
|
|
+ .list(new LambdaQueryWrapper<TopOldOrderRefund>()
|
|
|
|
+ .eq(TopOldOrderRefund::getOrderSn, order.getOrderSn())
|
|
|
|
+ .eq(TopOldOrderRefund::getPeriodStatus, 2)//待退款
|
|
|
|
+ .eq(TopOldOrderRefund::getStatus, 1));
|
|
|
|
+ if (CollectionUtils.isEmpty(list)){
|
|
|
|
+ throw new CustomException("订单退款信息获取失败!");
|
|
|
|
+ }
|
|
|
|
+ BigDecimal reduce = list.stream().map(TopOldOrderRefund::getRealRefundFee).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+ vo.setRefundMoney(reduce);
|
|
|
|
+ vo.setPayType(order.getPayType());
|
|
|
|
+ vo.setBuyTime(order.getBuyTime());
|
|
|
|
+ return vo;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public boolean updateOrderInfo(TopOldOrderAddBo bo) {
|
|
|
|
+ TopOldOrder order = getOne(new LambdaQueryWrapper<TopOldOrder>().eq(TopOldOrder::getOrderSn, bo.getOrderSn()));
|
|
|
|
+ if (ObjectUtils.isNull(order)){
|
|
|
|
+ throw new CustomException("订单信息获取有误!");
|
|
|
|
+ }
|
|
|
|
+ TopOldOrder edit = BeanUtil.toBean(bo, TopOldOrder.class);
|
|
|
|
+ edit.setUpdateTime(DateUtils.getNowTime());
|
|
|
|
+ //订单商品
|
|
|
|
+ if (CollectionUtils.isNotEmpty(bo.getOrderGoodsList())) {
|
|
|
|
+ //删除之前关联重新添加
|
|
|
|
+ topOrderGoodsService.remove(new LambdaQueryWrapper<TopOldOrderGoods>().eq(TopOldOrderGoods::getOrderSn, edit.getOrderSn()));
|
|
|
|
+ List<TopOldOrderGoods> collect = bo.getOrderGoodsList().stream().map(item -> BeanUtil.toBean(item, TopOldOrderGoods.class)).collect(Collectors.toList());
|
|
|
|
+ //学员身份证加密
|
|
|
|
+ collect.forEach(x -> {
|
|
|
|
+ if (ObjectUtils.isNotNull(x.getUserCard())) {
|
|
|
|
+ x.setUserCard(EncryptHandler.encrypt(x.getUserCard()));
|
|
|
|
+ }
|
|
|
|
+ x.setStatus(1);
|
|
|
|
+ x.setTenantId(edit.getTenantId());
|
|
|
|
+ });
|
|
|
|
+ topOrderGoodsService.saveBatch(collect);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //订单附件
|
|
|
|
+ if (CollectionUtils.isNotEmpty(bo.getOrderAttachmentList())) {
|
|
|
|
+ //删除之前关联重新添加
|
|
|
|
+ topOrderAttachmentService.remove(new LambdaQueryWrapper<TopOldOrderAttachment>().eq(TopOldOrderAttachment::getOrderSn, edit.getOrderSn()));
|
|
|
|
+ List<TopOldOrderAttachment> collect = bo.getOrderAttachmentList().stream().map(item -> BeanUtil.toBean(item, TopOldOrderAttachment.class)).collect(Collectors.toList());
|
|
|
|
+ topOrderAttachmentService.saveBatch(collect);
|
|
|
|
+ }
|
|
|
|
+ return updateById(edit);
|
|
|
|
+ }
|
|
|
|
+
|
|
public void informRemind(List<String> userNames) {
|
|
public void informRemind(List<String> userNames) {
|
|
//学员退学提醒
|
|
//学员退学提醒
|
|
List<InformRemindRelevance> remindRelevances = informRemindRelevanceService.list(new LambdaQueryWrapper<InformRemindRelevance>().eq(InformRemindRelevance::getType, 1));
|
|
List<InformRemindRelevance> remindRelevances = informRemindRelevanceService.list(new LambdaQueryWrapper<InformRemindRelevance>().eq(InformRemindRelevance::getType, 1));
|
|
@@ -1148,6 +1489,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
SysTenant tenant = sysTenantService.getById(orderVo.getTenantId());
|
|
SysTenant tenant = sysTenantService.getById(orderVo.getTenantId());
|
|
vo.setApplyName(String.format("%s(%s)",tenant.getTenantName(),orderVo.getCreateUsername()));
|
|
vo.setApplyName(String.format("%s(%s)",tenant.getTenantName(),orderVo.getCreateUsername()));
|
|
vo.setCheckType(1);
|
|
vo.setCheckType(1);
|
|
|
|
+ vo.setTenantId(tenant.getTenantId());
|
|
//审核进度
|
|
//审核进度
|
|
List<TopOldOrderCheckLog> checkLogs = topOldOrderCheckLogService
|
|
List<TopOldOrderCheckLog> checkLogs = topOldOrderCheckLogService
|
|
.list(new LambdaQueryWrapper<TopOldOrderCheckLog>()
|
|
.list(new LambdaQueryWrapper<TopOldOrderCheckLog>()
|
|
@@ -1167,9 +1509,22 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
List<TopOldOrderCheckLog> collect = checkLogs.stream().filter(x -> x.getType() == 3).collect(Collectors.toList());
|
|
List<TopOldOrderCheckLog> collect = checkLogs.stream().filter(x -> x.getType() == 3).collect(Collectors.toList());
|
|
if (CollectionUtils.isNotEmpty(collect)) {
|
|
if (CollectionUtils.isNotEmpty(collect)) {
|
|
if (collect.stream().anyMatch(x -> x.getCheckSign() == 1)) {
|
|
if (collect.stream().anyMatch(x -> x.getCheckSign() == 1)) {
|
|
- vo.setCheckType(2);
|
|
|
|
|
|
+ vo.setCheckType(3);
|
|
|
|
+ //获取退款金额
|
|
|
|
+ List<TopOldOrderRefund> list = topOldOrderRefundService
|
|
|
|
+ .list(new LambdaQueryWrapper<TopOldOrderRefund>()
|
|
|
|
+ .eq(TopOldOrderRefund::getOrderSn, orderSn)
|
|
|
|
+ .eq(TopOldOrderRefund::getPeriodStatus, 2)//待退款
|
|
|
|
+ .eq(TopOldOrderRefund::getStatus, 1));
|
|
|
|
+ if (CollectionUtils.isEmpty(list)){
|
|
|
|
+ throw new CustomException("订单退款信息获取失败!");
|
|
|
|
+ }
|
|
|
|
+ BigDecimal reduce = list.stream().map(TopOldOrderRefund::getRefundFee).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+ vo.setRefundMoney(reduce);
|
|
|
|
+ vo.setPayType(orderVo.getPayType());
|
|
|
|
+ vo.setBuyTime(orderVo.getBuyTime());
|
|
} else {
|
|
} else {
|
|
- vo.setCheckType(1);
|
|
|
|
|
|
+ vo.setCheckType(2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -1413,7 +1768,9 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
topOldOrderCheckLogService.updateById(check);
|
|
topOldOrderCheckLogService.updateById(check);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- checkInform(bo.getOrderSn(),type,bo.getCheckReason(),1,0,String.format("审核中(%s)",bo.getCheckRoleName()));
|
|
|
|
|
|
+ checkInform(bo.getOrderSn(),type,bo.getCheckReason(),1,0,String.format("%s(%s)",
|
|
|
|
+ periodStatus == 2?"待付款":"审核中",
|
|
|
|
+ bo.getCheckRoleName()));
|
|
|
|
|
|
//处理订单状态
|
|
//处理订单状态
|
|
List<TopOldOrderRefund> refundList = topOldOrderRefundService
|
|
List<TopOldOrderRefund> refundList = topOldOrderRefundService
|
|
@@ -1518,14 +1875,9 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
if (CollectionUtils.isEmpty(itemList)) {
|
|
if (CollectionUtils.isEmpty(itemList)) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- //返佣
|
|
|
|
- List<TopCostTpItemVo> voList = itemList.stream().filter(x -> x.getItemType() == 3).collect(Collectors.toList());
|
|
|
|
- BigDecimal rebateTotal = calculateRebate(voList, order);
|
|
|
|
- //可以分成的金额 = 订单金额 - 返佣金额
|
|
|
|
- BigDecimal divide = order.getPayPrice().subtract(rebateTotal);
|
|
|
|
//分成模板
|
|
//分成模板
|
|
- List<TopCostTpItemVo> divideList = itemList.stream().filter(x -> x.getItemType() == 1).collect(Collectors.toList());
|
|
|
|
- calculateDivide(divideList, order, divide, divideModel);
|
|
|
|
|
|
+ List<TopCostTpItemVo> divideList = itemList.stream().filter(x -> x.getItemCategory() == 1).collect(Collectors.toList());
|
|
|
|
+ calculateDivide(divideList, order, divideModel);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
);
|
|
);
|
|
@@ -1550,7 +1902,12 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
- private void calculateDivide(List<TopCostTpItemVo> itemList, TopOldOrder order, BigDecimal dividePrice, Integer divideModel) {
|
|
|
|
|
|
+ private void calculateDivide(List<TopCostTpItemVo> itemList, TopOldOrder order, Integer divideModel) {
|
|
|
|
+ if (CollectionUtils.isEmpty(itemList)){return;}
|
|
|
|
+ //佣金
|
|
|
|
+ BigDecimal brokerage = order.getBrokerage();
|
|
|
|
+ //平摊佣金
|
|
|
|
+ BigDecimal halveBrokerage = new BigDecimal("0.0000");
|
|
if (order.getOrderFrom() == 1) {
|
|
if (order.getOrderFrom() == 1) {
|
|
//新系统订单
|
|
//新系统订单
|
|
List<OrderGoods> orderGoodsList = orderGoodsService
|
|
List<OrderGoods> orderGoodsList = orderGoodsService
|
|
@@ -1560,16 +1917,31 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
|
|
|
|
//成本项
|
|
//成本项
|
|
BigDecimal divideTotal = new BigDecimal("0.00");//分成
|
|
BigDecimal divideTotal = new BigDecimal("0.00");//分成
|
|
|
|
+ if (ObjectUtils.isNotNull(order.getBrokerage()) && order.getBrokerage().compareTo(BigDecimal.ZERO) != 0){
|
|
|
|
+ halveBrokerage = brokerage.divide(new BigDecimal(orderGoodsList.size()),4,BigDecimal.ROUND_DOWN);
|
|
|
|
+ }
|
|
for (OrderGoods orderGoods : orderGoodsList) {
|
|
for (OrderGoods orderGoods : orderGoodsList) {
|
|
- BigDecimal goodsPrice = orderGoods.getGoodsRealPrice();
|
|
|
|
|
|
+ //去除佣金
|
|
|
|
+ BigDecimal goodsPrice = orderGoods.getGoodsRealPrice().subtract(halveBrokerage);
|
|
//商品业务层 新系统默认是学校业务
|
|
//商品业务层 新系统默认是学校业务
|
|
String businessName = orderGoodsService.getBusinessById(orderGoods.getOrderGoodsId());
|
|
String businessName = orderGoodsService.getBusinessById(orderGoods.getOrderGoodsId());
|
|
- List<TopCostTpItemVo> items = itemList.stream().filter(x -> {
|
|
|
|
- TopCourseEducationType education = topCourseEducationTypeService.getById(x.getEducationTypeId());
|
|
|
|
- TopCourseProjectType projectType = topCourseProjectTypeService.getById(x.getProjectId());
|
|
|
|
- TopCourseBusiness business = topCourseBusinessService.getById(x.getBusinessId());
|
|
|
|
- String name = education.getSchemeName() + education.getEducationName() + projectType.getProjectName() + business.getBusinessName();
|
|
|
|
- if (name.equals(businessName)) {
|
|
|
|
|
|
+ //业务层次过滤
|
|
|
|
+ List<TopCostTpItemVo> items = itemList.stream().filter(item -> {
|
|
|
|
+ //教育类型不限
|
|
|
|
+ if (item.getEducationTypeId() == -1){return true;}
|
|
|
|
+
|
|
|
|
+ TopCourseEducationType educationType = topCourseEducationTypeService.getById(item.getEducationTypeId());
|
|
|
|
+ if (!businessName.contains(educationType.getEducationName()) && !businessName.contains(educationType.getSchemeName())){
|
|
|
|
+ //教育类型匹配失败
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ //项目类型和业务层次
|
|
|
|
+ if (item.getProjectId() == -1 && item.getBusinessId() == -1){
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ TopCourseProjectType projectType = topCourseProjectTypeService.getById(item.getProjectId());
|
|
|
|
+ TopCourseBusiness business = topCourseBusinessService.getById(item.getBusinessId());
|
|
|
|
+ if (businessName.contains(projectType.getProjectName()) && businessName.contains(business.getBusinessName())){
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
return false;
|
|
@@ -1579,10 +1951,14 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
//根据订单金额匹配成本阶梯
|
|
//根据订单金额匹配成本阶梯
|
|
- List<TopCostTpItemVo> tpItems = items.stream().filter(x ->
|
|
|
|
- (ObjectUtils.isNull(x.getMinValue()) && ObjectUtils.isNull(x.getMaxValue()))
|
|
|
|
- || (goodsPrice.compareTo(x.getMinValue()) > 0 && goodsPrice.compareTo(x.getMaxValue()) < 0)
|
|
|
|
- || (goodsPrice.compareTo(x.getMinValue()) == 0 && goodsPrice.compareTo(x.getMaxValue()) == 0)).collect(Collectors.toList());
|
|
|
|
|
|
+ List<TopCostTpItemVo> tpItems = new ArrayList<>();
|
|
|
|
+ for (TopCostTpItemVo x : items) {
|
|
|
|
+ if ((ObjectUtils.isNull(x.getMinValue()) && ObjectUtils.isNull(x.getMaxValue()))
|
|
|
|
+ || (goodsPrice.compareTo(x.getMinValue()) > 0 && goodsPrice.compareTo(x.getMaxValue()) < 0)
|
|
|
|
+ || (goodsPrice.compareTo(x.getMinValue()) == 0 && goodsPrice.compareTo(x.getMaxValue()) == 0)){
|
|
|
|
+ tpItems.add(x);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
if (CollectionUtils.isEmpty(tpItems)) {
|
|
if (CollectionUtils.isEmpty(tpItems)) {
|
|
//匹配不到成本项阶梯值
|
|
//匹配不到成本项阶梯值
|
|
continue;
|
|
continue;
|
|
@@ -1593,12 +1969,29 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
}
|
|
}
|
|
//换算订单成本和盈亏
|
|
//换算订单成本和盈亏
|
|
TopCostTpItemVo topCostTpItem = tpItems.stream().findFirst().get();
|
|
TopCostTpItemVo topCostTpItem = tpItems.stream().findFirst().get();
|
|
- BigDecimal divide = new BigDecimal("0.00");//成本
|
|
|
|
|
|
+ BigDecimal divide = new BigDecimal("0.00");//分成
|
|
BigDecimal bigDecimal = new BigDecimal("100");
|
|
BigDecimal bigDecimal = new BigDecimal("100");
|
|
|
|
+ if (topCostTpItem.getDockStatus() == 1){
|
|
|
|
+ //启用成本扣除项
|
|
|
|
+ switch (topCostTpItem.getDockType()){
|
|
|
|
+ case 1://百分比
|
|
|
|
+ //成本扣除金额
|
|
|
|
+ BigDecimal divide1 = topCostTpItem.getDockValue().divide(bigDecimal);
|
|
|
|
+ BigDecimal multiply = goodsPrice.multiply(divide1);
|
|
|
|
+ goodsPrice = goodsPrice.subtract(multiply);
|
|
|
|
+ break;
|
|
|
|
+ case 2://固定金额
|
|
|
|
+ goodsPrice = goodsPrice.subtract(topCostTpItem.getDockValue());
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
switch (topCostTpItem.getItemType()) {
|
|
switch (topCostTpItem.getItemType()) {
|
|
case 1://百分比
|
|
case 1://百分比
|
|
BigDecimal divideNum = topCostTpItem.getTypeValue().divide(bigDecimal);
|
|
BigDecimal divideNum = topCostTpItem.getTypeValue().divide(bigDecimal);
|
|
- divide = dividePrice.multiply(divideNum);
|
|
|
|
|
|
+ divide = goodsPrice.multiply(divideNum);
|
|
break;
|
|
break;
|
|
case 2://固定金额
|
|
case 2://固定金额
|
|
divide = topCostTpItem.getTypeValue();
|
|
divide = topCostTpItem.getTypeValue();
|
|
@@ -1606,11 +1999,15 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
+ orderGoods.setDivideModel(divideModel);
|
|
|
|
+ orderGoods.setDivideMoney(divide);
|
|
|
|
+ orderGoodsService.updateById(orderGoods);
|
|
divideTotal = divideTotal.add(divide);
|
|
divideTotal = divideTotal.add(divide);
|
|
}
|
|
}
|
|
Order orgOrder = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, order.getOrderSn()));
|
|
Order orgOrder = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, order.getOrderSn()));
|
|
orgOrder.setDivideModel(divideModel);
|
|
orgOrder.setDivideModel(divideModel);
|
|
orgOrder.setDivideStatus(2);//待审核
|
|
orgOrder.setDivideStatus(2);//待审核
|
|
|
|
+ orgOrder.setCancelTime(DateUtils.getNowTime());
|
|
if (divideModel == 1) {
|
|
if (divideModel == 1) {
|
|
//机构分成
|
|
//机构分成
|
|
orgOrder.setDivideCompanyMoney(divideTotal);
|
|
orgOrder.setDivideCompanyMoney(divideTotal);
|
|
@@ -1669,18 +2066,23 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
switch (topCostTpItem.getItemType()) {
|
|
switch (topCostTpItem.getItemType()) {
|
|
case 1://百分比
|
|
case 1://百分比
|
|
BigDecimal divideNum = topCostTpItem.getTypeValue().divide(bigDecimal);
|
|
BigDecimal divideNum = topCostTpItem.getTypeValue().divide(bigDecimal);
|
|
- divide = dividePrice.multiply(divideNum);
|
|
|
|
|
|
+ divide = goodsPrice.multiply(divideNum);
|
|
break;
|
|
break;
|
|
case 2://固定金额
|
|
case 2://固定金额
|
|
|
|
+
|
|
divide = topCostTpItem.getTypeValue();
|
|
divide = topCostTpItem.getTypeValue();
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
+ orderGoods.setDivideModel(divideModel);
|
|
|
|
+ orderGoods.setDivideMoney(divide);
|
|
|
|
+ topOrderGoodsService.updateById(orderGoods);
|
|
divideTotal = divideTotal.add(divide);
|
|
divideTotal = divideTotal.add(divide);
|
|
}
|
|
}
|
|
order.setDivideModel(divideModel);
|
|
order.setDivideModel(divideModel);
|
|
order.setDivideStatus(2);//待审核
|
|
order.setDivideStatus(2);//待审核
|
|
|
|
+ order.setCancelTime(DateUtils.getNowTime());
|
|
if (divideModel == 1) {
|
|
if (divideModel == 1) {
|
|
//机构分成
|
|
//机构分成
|
|
order.setDivideCompanyMoney(divideTotal);
|
|
order.setDivideCompanyMoney(divideTotal);
|
|
@@ -1691,6 +2093,11 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
//修改订单分成
|
|
//修改订单分成
|
|
updateById(order);
|
|
updateById(order);
|
|
}
|
|
}
|
|
|
|
+ //删除审核流程重新创建
|
|
|
|
+ topOldOrderCheckLogService.remove(new LambdaQueryWrapper<TopOldOrderCheckLog>()
|
|
|
|
+ .in(TopOldOrderCheckLog::getType,Arrays.asList(5, 6))
|
|
|
|
+ .eq(TopOldOrderCheckLog::getOrderSn,order.getOrderSn()));
|
|
|
|
+
|
|
//创建订单分成审核流程
|
|
//创建订单分成审核流程
|
|
List<TopOldOrderCheck> checkList = topOldOrderCheckService
|
|
List<TopOldOrderCheck> checkList = topOldOrderCheckService
|
|
.list(new LambdaQueryWrapper<TopOldOrderCheck>().in(TopOldOrderCheck::getCheckType, Arrays.asList(5, 6))
|
|
.list(new LambdaQueryWrapper<TopOldOrderCheck>().in(TopOldOrderCheck::getCheckType, Arrays.asList(5, 6))
|
|
@@ -1702,13 +2109,14 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
TopOldOrderCheckLog log = new TopOldOrderCheckLog();
|
|
TopOldOrderCheckLog log = new TopOldOrderCheckLog();
|
|
log.setOrderSn(order.getOrderSn());
|
|
log.setOrderSn(order.getOrderSn());
|
|
log.setRoleId(check.getCheckRole());
|
|
log.setRoleId(check.getCheckRole());
|
|
-
|
|
|
|
|
|
+ log.setCheckFrom(divideModel == 1? 2:3);
|
|
log.setUpdateTime(DateUtils.getNowTime());
|
|
log.setUpdateTime(DateUtils.getNowTime());
|
|
log.setCreateTime(DateUtils.getNowTime());
|
|
log.setCreateTime(DateUtils.getNowTime());
|
|
log.setTenantId(order.getTenantId());
|
|
log.setTenantId(order.getTenantId());
|
|
log.setCheckSign(i > 0 ? 0 : 1);
|
|
log.setCheckSign(i > 0 ? 0 : 1);
|
|
log.setCheckSort(check.getCheckSort());
|
|
log.setCheckSort(check.getCheckSort());
|
|
log.setType(check.getCheckType());
|
|
log.setType(check.getCheckType());
|
|
|
|
+ log.setTenantId(order.getTenantId());
|
|
if (check.getCheckType() == 6) {
|
|
if (check.getCheckType() == 6) {
|
|
//分成支付
|
|
//分成支付
|
|
log.setCheckStatus(2);//待支付
|
|
log.setCheckStatus(2);//待支付
|
|
@@ -1716,6 +2124,11 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
log.setCheckStatus(0);//待审核
|
|
log.setCheckStatus(0);//待审核
|
|
}
|
|
}
|
|
logs.add(log);
|
|
logs.add(log);
|
|
|
|
+ //佣金审核
|
|
|
|
+ if (brokerage.compareTo(BigDecimal.ZERO) > 0){
|
|
|
|
+ log.setCheckFrom(4);
|
|
|
|
+ logs.add(log);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
topOldOrderCheckLogService.saveBatch(logs);
|
|
topOldOrderCheckLogService.saveBatch(logs);
|
|
}
|
|
}
|