Helius
2021-01-07 d58a5eecbbf9db6a9469801273e537a55bc8e794
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
@@ -6,6 +6,11 @@
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.WebUtil;
import com.matrix.system.app.dto.OrderListDto;
import com.matrix.system.app.vo.OrderDetailAchieveItemVo;
import com.matrix.system.app.vo.OrderDetailItemVo;
import com.matrix.system.app.vo.OrderDetailVo;
import com.matrix.system.app.vo.RankingVo;
import com.matrix.system.common.bean.SysUsers;
import com.matrix.system.common.dao.BusParameterSettingsDao;
import com.matrix.system.common.dao.SysUsersDao;
@@ -22,6 +27,7 @@
import com.matrix.system.hive.pojo.ShoppingCarItemsVo;
import com.matrix.system.hive.service.AchieveNewService;
import com.matrix.system.hive.service.CodeService;
import com.matrix.system.hive.service.ShoppingGoodsService;
import com.matrix.system.hive.service.SysOrderService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -79,7 +85,16 @@
    private AchieveNewService achieveNewService;
    @Autowired
    private AchieveNewDao achieveNewDao;
    @Autowired
    private WarehouseDao warehouseDao;
    @Autowired
    private ShoppingGoodsService shoppingGoodsService;
    @Autowired
    private SysOrderFlowDao sysOrderFlowDao;
    @Override
    public int add(SysOrder sysOrder) {
@@ -168,10 +183,10 @@
            // 如果支付方式是非现金则记录现金支付金额
            if (!item.getPayMethod().equals(PayMethodEnum.VIP_CARD.getCode())) {
                xjMoney = MoneyUtil.add(xjMoney, item.getPayMoney());
                item.setCashPay(item.getPayMoney());
//                item.setCashPay(item.getPayMoney());
            } else {
                cardMoney = MoneyUtil.add(cardMoney, item.getPayMoney());
                item.setCardPay(item.getPayMoney());
//                item.setCardPay(item.getPayMoney());
            }
@@ -179,28 +194,30 @@
            // 订单欠款减去支付金额 设置实际欠款
            Double itemZkTotal = MoneyUtil.mul(item.getZkPrice(), Double.valueOf(item.getCount()));
            zkTotal=MoneyUtil.add(zkTotal, itemZkTotal);
            item.setArrears(MoneyUtil.sub(itemZkTotal, item.getPayMoney()));
//            item.setArrears(MoneyUtil.sub(itemZkTotal, item.getPayMoney()));
            // 如果存在欠款,将条目状态设置为欠款
            if (item.getArrears() > 0) {
                item.setStatus(Dictionary.ORDER_STATU_QK);
            } else if (item.getArrears() < 0) {
                item.setPayMoney(item.getZkPrice());
                item.setStatus(Dictionary.ORDER_STATU_DFK);
            } else {
                item.setStatus(Dictionary.ORDER_STATU_DFK);
            }
//            if (item.getArrears() > 0) {
//                item.setStatus(Dictionary.ORDER_STATU_QK);
//            } else if (item.getArrears() < 0) {
//                item.setPayMoney(item.getZkPrice());
//                item.setStatus(Dictionary.ORDER_STATU_DFK);
//            } else {
//                item.setStatus(Dictionary.ORDER_STATU_DFK);
//            }
            item.setStatus(Dictionary.ORDER_STATU_DFK);
        }
        double arrears;
        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
        // 如果是收款,收款可以改变订单价格,所以需要求和出 订单折后价来计算本次欠款
        arrears = MoneyUtil.sub(zkTotal, MoneyUtil.add(cardMoney, xjMoney));
        sysOrder.setZkTotal(zkTotal);
        sysOrder.setArrears(arrears);
        sysOrder.setCardPay(cardMoney);
        sysOrder.setCashPay(xjMoney);
//        sysOrder.setArrears(arrears);
//        sysOrder.setCardPay(cardMoney);
//        sysOrder.setCashPay(xjMoney);
        sysOrder.setStatu(Dictionary.ORDER_STATU_DFK);
        sysOrder.setStaffId(user.getSuId());
        sysOrder.setCompanyId(user.getCompanyId());
        sysOrder.setPayTime(new Date());
@@ -351,7 +368,7 @@
            throw new GlobleException("没用选择购买产品");
        }
        // 获取会员信息,判断等级 获取相应家居折扣
        SysVipInfo info = (SysVipInfo) WebUtil.getSession().getAttribute(SystemConstance.CURRENT_CUSTOMER);
        SysVipInfo info = sysVipInfoDao.selectById(car.getVipId());
        //获取折扣-----
        Double zk = zk = 1.0;
@@ -371,6 +388,7 @@
        order.setStatu(Dictionary.ORDER_STATU_DFK);
        order.setCardPay(0.00);
        order.setCashPay(0.00);
        order.setCompanyId(user.getCompanyId());
        order.setBeatuyId(car.getBeatuyId() + "");
        // 根据美疗师id查询美疗师姓名
        if (car.getBeatuyId() != null) {
@@ -485,40 +503,43 @@
     */
    private void changeOrderStatu(SysOrder sourceOrder) {
      boolean haQk=false;
        for (SysOrderFlow flow : sourceOrder.getFlows()) {
            // 若使用储值卡付款
            if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
        for(SysOrderItem sysOrderItem:sourceOrder.getItems()){
            if(!sysOrderItem.getStatus().equals(Dictionary.ORDER_STATU_QK)){
                SysOrderItem updateItem=new SysOrderItem();
                updateItem.setId(sysOrderItem.getId());
                updateItem.setStatus(Dictionary.ORDER_STATU_YFK);
                if (sysOrderItem.getPayMethod().equals(Dictionary.PAY_TYPE_MOENY_CARD )  ) {
                    if(sysOrderItem.getPayMethodDetail()!=null){
                        // 查询要支付的充值卡
                        MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(Long.parseLong(sysOrderItem.getPayMethodDetail()));
                        // 扣除付款卡金额并添加流水
                        cardPaySk(moneyCardUse, sourceOrder,  sysOrderItem);
                    }else{
                        throw  new GlobleException("请选择支付的会员卡");
                    }
                }
                orderItemDao.update(updateItem);
            }else {
                haQk=true;
            }
        }
        //更新收款状态
        if(haQk){
            sourceOrder.setStatu(Dictionary.ORDER_STATU_QK);
        }else{
            sourceOrder.setStatu(Dictionary.ORDER_STATU_YFK);
        }
//      boolean haQk=false;
//
//        for(SysOrderItem sysOrderItem:sourceOrder.getItems()){
//
//            if(!sysOrderItem.getStatus().equals(Dictionary.ORDER_STATU_QK)){
//                SysOrderItem updateItem=new SysOrderItem();
//                updateItem.setId(sysOrderItem.getId());
//                updateItem.setStatus(Dictionary.ORDER_STATU_YFK);
//
//                if (sysOrderItem.getPayMethod().equals(Dictionary.PAY_TYPE_MOENY_CARD )  ) {
//
//                    if(sysOrderItem.getPayMethodDetail()!=null){
//                        // 查询要支付的充值卡
//                        MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(Long.parseLong(sysOrderItem.getPayMethodDetail()));
//                        // 扣除付款卡金额并添加流水
//                        cardPaySk(moneyCardUse, sourceOrder,  sysOrderItem);
//                    }else{
//                        throw  new GlobleException("请选择支付的会员卡");
//                    }
//
//
//                }
//                orderItemDao.update(updateItem);
//            }else {
//                haQk=true;
//            }
//        }
        // 更新收款状态
        sourceOrder.setStatu(Dictionary.ORDER_STATU_YFK);
        sysOrderDao.update(sourceOrder);
@@ -625,6 +646,10 @@
            moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
            moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX);
        }
        ShoppingGoods shoppingGoods = shoppingGoodsService.findById(moneyCardUse.getGoodsId());
        Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 2, moneyCardUse.getFailTime());
        moneyCardUse.setFailTime(invalidTime);
        // 更新充值卡信息
        moneyCardUseDao.update(moneyCardUse);
    }
@@ -732,14 +757,17 @@
                    moneyCardUse.setLastCount(moneyCar.getCarUseCount());
                }
                moneyCardUse.setVipId(sourceOrder.getVipId());
                if (moneyCar.getValidity() == null || moneyCar.getValidity() == 0) {
                    // 设置失效时间
                    Calendar cal = Calendar.getInstance();
                    cal.set(2200, 1, 1);
                    moneyCardUse.setFailTime(cal.getTime());
                } else {
                    moneyCardUse.setFailTime(DateUtil.nextNDate(new Date(), 30 * moneyCar.getValidity()));
                }
//                if (moneyCar.getValidity() == null || moneyCar.getValidity() == 0) {
//                    // 设置失效时间
//                    Calendar cal = Calendar.getInstance();
//                    cal.set(2200, 1, 1);
//                    moneyCardUse.setFailTime(cal.getTime());
//                } else {
//                    moneyCardUse.setFailTime(DateUtil.nextNDate(new Date(), 30 * moneyCar.getValidity()));
//                }
                Date invalidTime = shoppingGoodsService.calInvalidTime(sysOrderItem.getShoppingGoods(), 1, null);
                moneyCardUse.setFailTime(invalidTime);
                moneyCardUseDao.insert(moneyCardUse);
            }
        }
@@ -1045,16 +1073,16 @@
        taocanProjUse.setStatus(Dictionary.TAOCAN_STATUS_YX);
        taocanProjUse.setType(Dictionary.SHOPPING_GOODS_TYPE_TC);
        taocanProjUse.setIsCourse(taocanShoppingGoods.getIsCourse());
        taocanProjUse.setIsInfinite(taocanShoppingGoods.getIsInfinite());
        // 赠送和打折后金额为0的都视为赠送项目
        if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_NO) && sysOrderItem.getZkPrice() > 0) {
            taocanProjUse.setSource(Dictionary.TAOCAN_SOURCE_GM);
        } else {
            taocanProjUse.setSource(Dictionary.TAOCAN_SOURCE_ZS);
        }
        // TODO 设置失效时间
        Calendar cal = Calendar.getInstance();
        cal.set(2200, 1, 1);
        taocanProjUse.setFailTime(cal.getTime());
        // 失效时间
        Date invalidTime = shoppingGoodsService.calInvalidTime(taocanShoppingGoods, 1, null);
        taocanProjUse.setFailTime(invalidTime);
        sysProjUseDao.insert(taocanProjUse);
        //计划次数
        int surplusCount=0;
@@ -1104,9 +1132,8 @@
            puse.setSource(Dictionary.TAOCAN_SOURCE_ZS);
        }
        // 设置失效时间
        Calendar cal = Calendar.getInstance();
        cal.set(2300, 1, 1);
        puse.setFailTime(cal.getTime());
        Date invalidTime = shoppingGoodsService.calInvalidTime(sysOrderItem.getShoppingGoods(), 1, null);
        puse.setFailTime(invalidTime);
        sysProjUseDao.insert(puse);
    }
@@ -1197,6 +1224,48 @@
    }
    @Override
    public SysOrder findSysOrderTjByVipId(Long vipId) {
        return sysOrderDao.selectVipOrderInfoTotal(vipId);
    }
    @Override
    public List<OrderDetailVo> findApiOrderListInPage(OrderListDto orderListDto, PaginationVO pageVo) {
        return sysOrderDao.selectApiOrderListInPage(orderListDto, pageVo);
    }
    @Override
    public int findApiOrderListTotal(OrderListDto orderListDto) {
        return sysOrderDao.selectApiOrderListTotal(orderListDto);
    }
    @Override
    public OrderDetailVo findApiOrderDetailByOrderId(Long orderId) {
        OrderDetailVo orderDetail = sysOrderDao.selectApiOrderDetailById(orderId);
        if (orderDetail == null) {
            throw new GlobleException("该订单不存在");
        }
        List<OrderDetailItemVo> items = orderItemDao.selectApiOrderDetailItemsByOrderId(orderId);
        if (CollectionUtils.isNotEmpty(items)) {
            for (OrderDetailItemVo item : items) {
                List<OrderDetailAchieveItemVo> achieveItems = achieveNewDao.selectApiOrderItemAchieve(item.getId());
                item.setAchieves(achieveItems);
            }
        }
        orderDetail.setItems(items);
        return orderDetail;
    }
    @Override
    public List<RankingVo> findApiShopAchieveRanking(SysOrder sysOrder) {
        return sysOrderDao.selectShopAchieveRanking(sysOrder);
    }
    @Override
    public List<RankingVo> findStaffSaleAchieveRanking(SysOrder sysOrder) {
        return sysOrderDao.selectStaffSaleAchieveRanking(sysOrder);
    }
}