/**
|
* projectName: zq-erp
|
* fileName: SysOrderServiceHelper.java
|
* packageName: com.matrix.system.hive.service.imp
|
* date: 2022-03-11 9:33
|
* copyright(c) 2022 http://www.hydee.cn/ Inc. All rights reserved.
|
*/
|
package com.matrix.system.hive.service.imp;
|
|
import cn.hutool.core.collection.CollUtil;
|
import com.alibaba.fastjson.JSON;
|
import com.google.common.collect.Lists;
|
import com.matrix.core.constance.MatrixConstance;
|
import com.matrix.core.exception.GlobleException;
|
import com.matrix.core.tools.LogUtil;
|
import com.matrix.core.tools.WebUtil;
|
import com.matrix.system.common.bean.BusParameterSettings;
|
import com.matrix.system.common.bean.SysUsers;
|
import com.matrix.system.common.constance.AppConstance;
|
import com.matrix.system.common.dao.BusParameterSettingsDao;
|
import com.matrix.system.constance.Dictionary;
|
import com.matrix.system.hive.bean.*;
|
import com.matrix.system.hive.dao.ShoppingGoodsDao;
|
import com.matrix.system.hive.dao.SysOrderFlowDao;
|
import com.matrix.system.hive.dto.MoneyCardOperationDto;
|
import com.matrix.system.hive.dto.MoneyCardPayDto;
|
import com.matrix.system.hive.dto.ProjUseOperationDto;
|
import com.matrix.system.hive.plugin.util.CollectionUtils;
|
import com.matrix.system.hive.service.CodeService;
|
import com.matrix.system.hive.service.MoneyCardUseService;
|
import com.matrix.system.hive.service.SysProjUseService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
/**
|
* @version: V1.0
|
* @author: JiangYouYao
|
* @className: SysOrderServiceHelper
|
* @packageName: com.matrix.system.hive.service.imp
|
* @description: 订单服务助手
|
* @data: 2022-03-11 9:33
|
**/
|
@Component
|
public class SysOrderServiceHelper {
|
|
|
@Autowired
|
private SysProjUseService sysProjUseService;
|
|
@Autowired
|
private CodeService codeService;
|
|
|
@Autowired
|
ShoppingGoodsDao shoppingGoodsDao;
|
|
@Autowired
|
private SysOrderFlowDao sysOrderFlowDao;
|
|
@Autowired
|
BusParameterSettingsDao busParameterSettingsDao;
|
|
|
@Autowired
|
MoneyCardUseService moneyCardUseService;
|
|
/**
|
* 创建支付流水
|
*
|
* @author:姜友瑶
|
*/
|
public void addOrderFlow(SysOrder sourceOrder, boolean isBj) {
|
|
LogUtil.info("创建支付流水 id={}", sourceOrder.getId());
|
//处理支付流水
|
int flowCount = 1;
|
for (SysOrderFlow flow : sourceOrder.getFlows()) {
|
flow.setFlowNo(codeService.getFlowCode() + "-" + flowCount);
|
flow.setVipId(sourceOrder.getVipId());
|
flow.setShopId(sourceOrder.getShopId());
|
flow.setCompanyId(sourceOrder.getCompanyId());
|
//支付内容摘要设置
|
Long goodsId = sourceOrder.getItems().get(0).getGoodsId();
|
ShoppingGoods goods = shoppingGoodsDao.selectById(goodsId);
|
flow.setFlowContent(goods.getName() + "等" + sourceOrder.getItems().size() + "件产品");
|
// 若是退款,则取负数
|
if (SysOrder.ORDER_TYPE_REFUND == sourceOrder.getOrderType()) {
|
flow.setFlowType(SysOrderFlow.FLOW_TYPE_REFUND);
|
flow.setAmount(flow.getAmount().negate());
|
flow.setOrderId(sourceOrder.getOldOrderId());
|
} else {
|
if (isBj) {//jyytodo 优化不能根据isbj来判断流水类型
|
flow.setFlowType(SysOrderFlow.FLOW_TYPE_REPAY);
|
} else {
|
flow.setFlowType(SysOrderFlow.FLOW_TYPE_BUY);
|
}
|
|
flow.setOrderId(sourceOrder.getId());
|
}
|
sysOrderFlowDao.insert(flow);
|
flowCount++;
|
}
|
}
|
|
|
/**
|
* 新增项目和套餐的余次
|
*
|
* @author:姜友瑶
|
* @date 2016年9月2日
|
*/
|
public void addTaocanProj(SysOrder order) {
|
List<SysOrderItem> itemList = order.getItems();
|
List<ProjUseOperationDto> projUseDtoList = Lists.newArrayList();
|
for (SysOrderItem sysOrderItem : itemList) {
|
// 折扣 项目的实际购买除以项目原价,来计算项目的消耗价格
|
// 赠送 计算全额的消耗业绩
|
ProjUseOperationDto projUseOperationDto = new ProjUseOperationDto();
|
if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_NO) && sysOrderItem.getZkPrice() > 0 && !isGiftMoneyPay(order)) {
|
projUseOperationDto.setFree(false);
|
} else {
|
projUseOperationDto.setFree(true);
|
}
|
if (sysOrderItem.getType().equals(Dictionary.SHOPPING_GOODS_TYPE_TC)) {
|
//计算折扣
|
Double zk = sysOrderItem.getZkPrice() / sysOrderItem.getPrice();
|
projUseOperationDto.setTcZk(zk);
|
}
|
projUseOperationDto.setPayMoney(sysOrderItem.getZkPrice());
|
projUseOperationDto.setGoodsId(sysOrderItem.getGoodsId());
|
projUseOperationDto.setCount(sysOrderItem.getCount());
|
projUseOperationDto.setVipId(order.getVipId());
|
projUseOperationDto.setOrderItemId(sysOrderItem.getId());
|
projUseDtoList.add(projUseOperationDto);
|
}
|
sysProjUseService.addUserProjUse(projUseDtoList);
|
}
|
|
/**
|
* 全是赠送金额,且配置了赠送金额购买计算为赠送
|
*
|
* @param order
|
* @return
|
*/
|
private boolean isGiftMoneyPay(SysOrder order) {
|
BusParameterSettings giftiIsfree = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.SHOP_MANAGE_GIFTISFREE, order.getCompanyId());
|
if (giftiIsfree.getParamValue().equals("是")) {
|
return order.getFlows().stream().allMatch(item -> SysOrderFlow.IS_GIFT_Y.equals(item.getIsGift())
|
&& item.getAmount().doubleValue() > 0D);
|
} else {
|
return false;
|
}
|
|
|
}
|
|
|
/**
|
* 使用充值卡付款操作
|
*
|
* @param pageOrder
|
*/
|
public void cardPaySk(SysOrder pageOrder) {
|
|
|
SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
|
List<SysOrderFlow> flows = pageOrder.getFlows();
|
List<Long> goodsIds = pageOrder.getItems().stream().map(e -> e.getGoodsId()).collect(Collectors.toList());
|
|
List<MoneyCardPayDto> moneyCardPayDtoList = Lists.newArrayList();
|
|
flows.forEach(flow -> {
|
if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
|
if (flow.getCardId() != null) {
|
MoneyCardPayDto dto = new MoneyCardPayDto();
|
dto.setOrderNo(pageOrder.getOrderNo());
|
dto.setOrderId(pageOrder.getId());
|
dto.setCount(1);
|
dto.setCarUseId(flow.getCardId());
|
dto.setType(MoneyCardUseFlow.USE_TYPE_CONSUMER);
|
if (SysOrderFlow.IS_GIFT_Y.equals(flow.getIsGift())) {
|
dto.setGiftMoney(flow.getAmount().doubleValue());
|
} else {
|
dto.setRealMoney(flow.getAmount().doubleValue());
|
}
|
dto.setUpdateUser(user.getSuId());
|
dto.setGoodsIds(goodsIds);
|
moneyCardPayDtoList.add(dto);
|
} else {
|
throw new GlobleException("无效的储值卡支付方式");
|
}
|
}
|
});
|
|
if (CollectionUtils.isNotEmpty(moneyCardPayDtoList)) {
|
LogUtil.info("扣除储值卡余额{}", JSON.toJSONString(moneyCardPayDtoList));
|
moneyCardUseService.changeMoneyCard(moneyCardPayDtoList);
|
}
|
}
|
|
/**
|
* @param sourceOrder 如果购买了充值卡设置会员的充值卡
|
* @author:姜友瑶
|
* @date 2016年9月19日
|
*/
|
public void addMoneyCardUse(SysOrder sourceOrder) {
|
List<MoneyCardOperationDto> moneyCardOperationDtos = Lists.newArrayList();
|
List<SysOrderItem> orderItemList = sourceOrder.getItems();
|
for (SysOrderItem sysOrderItem : orderItemList) {
|
// 如果购买的是充值卡
|
if (sysOrderItem.getType().equals(Dictionary.SHOPPING_GOODS_TYPE_CZK)) {
|
for (int i = 0; i < sysOrderItem.getCount(); i++) {
|
|
MoneyCardOperationDto moneyCardOperationDto = new MoneyCardOperationDto();
|
moneyCardOperationDto.setVipId(sourceOrder.getVipId());
|
// 是否为赠送
|
if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_YES)) {
|
moneyCardOperationDto.setSource(Dictionary.TAOCAN_SOURCE_ZS);
|
} else {
|
moneyCardOperationDto.setSource(Dictionary.TAOCAN_SOURCE_GM);
|
}
|
moneyCardOperationDto.setOrderItemId(sysOrderItem.getId());
|
moneyCardOperationDto.setGoodsId(sysOrderItem.getGoodsId());
|
moneyCardOperationDtos.add(moneyCardOperationDto);
|
}
|
}
|
}
|
if (CollUtil.isNotEmpty(moneyCardOperationDtos)) {
|
moneyCardUseService.addVipMoneyCard(moneyCardOperationDtos);
|
}
|
|
}
|
|
|
}
|