JiangYouYao
2022-03-18 96e622e737ec7d0b9f3a64ecc4e4a53389a207a2
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java
@@ -30,6 +30,7 @@
import com.matrix.system.hive.dto.ProjUseOperationDto;
import com.matrix.system.hive.plugin.util.CollectionUtils;
import com.matrix.system.hive.plugin.util.MoneyUtil;
import com.matrix.system.hive.pojo.CzXkVo;
import com.matrix.system.hive.service.CodeService;
import com.matrix.system.hive.service.MoneyCardUseService;
import com.matrix.system.hive.service.SysProjUseService;
@@ -43,6 +44,7 @@
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@@ -96,16 +98,18 @@
    @Autowired
    BusParameterSettingsDao busParameterSettingsDao;
    @Autowired
    private WarehouseDao warehouseDao;
    @Autowired
    MoneyCardUseService moneyCardUseService;
    @Autowired
    private SysOrderItemDao orderItemDao;
    @Autowired
    MoneyCardUseDao moneyCardUseDao;
    /**
     * 创建支付流水
@@ -206,6 +210,7 @@
    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());
@@ -286,6 +291,8 @@
     * @date 2016年9月19日
     */
    public void addMoneyCardUse(SysOrder sourceOrder) {
        List<MoneyCardOperationDto> moneyCardOperationDtos = Lists.newArrayList();
        List<SysOrderItem> orderItemList = sourceOrder.getItems();
        for (SysOrderItem sysOrderItem : orderItemList) {
@@ -607,14 +614,18 @@
            Double itemZkTotal = MoneyUtil.mul(item.getZkPrice(), Double.valueOf(item.getCount()));
            zkTotal = MoneyUtil.add(zkTotal, itemZkTotal);
            item.setStatus(Dictionary.ORDER_STATU_DFK);
            item.setRefundCount(0);
        }
        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
        sysOrder.setZkTotal(zkTotal);
        sysOrder.setStatu(Dictionary.ORDER_STATU_DFK);
        sysOrder.setShopId(user.getShopId());
        sysOrder.setStaffId(user.getSuId());
        sysOrder.setCompanyId(user.getCompanyId());
        sysOrder.setOrderTime(new Date());
        sysOrder.setOrderType(SysOrder.ORDER_TYPE_SEAL);
        //新增订单
        sysOrder.setOrderNo(codeService.getOrderCode());
@@ -680,4 +691,78 @@
        return sysOrder;
    }
    /**
     * 创建充值订单
     * @param czVo
     * @return
     */
    public SysOrder createCzOrder(CzXkVo czVo){
        MoneyCardUse cardUser = moneyCardUseDao.selectVipCard(czVo.getVipId());
        SysOrder order= new SysOrder();
        order.setFlows(czVo.getFlows());
        order.setVipId(czVo.getVipId());
        order.setRemark(cardUser.getCardName());
        SysOrderItem orderItem = new SysOrderItem();
        ShoppingGoods shoppingGoods = shoppingGoodsDao.selectVipCzGoods();
        orderItem.setGoodsId(shoppingGoods.getId());
        orderItem.setType(Dictionary.SHOPPING_GOODS_TYPE_CZK);
        orderItem.setCount(1);
        orderItem.setIsFree(Dictionary.FLAG_NO);
        orderItem.setZkPrice(czVo.getBjmoney());
        orderItem.setAchieveList(czVo.getAchaeveList());
        order.setItems(Arrays.asList(orderItem));
        saveOrder(order);
        return order;
    }
    /**
     * 创建退款订单
     * @return
     */
    public SysOrder createTkOrder(SysOrder sysOrder){
        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
        //原订单设置为退款状态
        SysOrder sourceOrder = new SysOrder();
        sourceOrder.setId(sysOrder.getOldOrderId());
        sourceOrder.setIsHasRefund(SysOrder.IS_HAS_REFUND_Y);
        sysOrderDao.update(sourceOrder);
        sysOrder.setId(null);
        sysOrder.setStaffId(user.getSuId());
        sysOrder.setCompanyId(user.getCompanyId());
        sysOrder.setShopId(user.getShopId());
        sysOrder.setOrderType(SysOrder.ORDER_TYPE_REFUND);
        sysOrder.setStatu(Dictionary.ORDER_STATU_YFK);
        Date now = new Date();
        sysOrder.setOrderTime(now);
        sysOrder.setPayTime(now);
        sysOrder.setOrderNo(codeService.getRefundOrderNo());
        sysOrder.setZkTotal(-sysOrder.getZkTotal());
        //新增订单
        sysOrderDao.insert(sysOrder);
        //插入明细
        for (SysOrderItem item : sysOrder.getItems()) {
            //更新原订单明细的可退数量
            SysOrderItem oldItem =   orderItemDao.selectById(item.getId());
            if((oldItem.getRefundCount()+item.getCount()) <= oldItem.getCount()){
                oldItem.setRefundCount(oldItem.getRefundCount()+item.getCount());
                orderItemDao.update(oldItem);
            }else{
                throw new GlobleException("退款数量大于购买数量");
            }
            //插入新的订单明细
            item.setCount(-item.getCount());
            item.setOrderId(sysOrder.getId());
            orderItemDao.insert(item);
        }
        LogUtil.info("创建退款订单:{} " , JSON.toJSONString(sysOrder) ) ;
        return sysOrder;
    }
}