DdManagerImpl.java 9.92 KB
package com.hotent.lpg.user.manager.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hotent.base.id.IdGenerator;
import com.hotent.base.manager.impl.BaseManagerImpl;
import com.hotent.base.util.BeanUtils;
import com.hotent.base.util.StringUtil;
import com.hotent.lpg.common.enums.DdfwlxEnum;
import com.hotent.lpg.common.enums.DdztEnum;
import com.hotent.lpg.common.model.WDd;
import com.hotent.lpg.common.model.WDdxq;
import com.hotent.lpg.common.model.WHyyqjl;
import com.hotent.lpg.common.model.WQplx;
import com.hotent.lpg.user.dao.DdDao;
import com.hotent.lpg.user.dao.DdxqDao;
import com.hotent.lpg.user.dao.QplxDao;
import com.hotent.lpg.user.dto.DdDto;
import com.hotent.lpg.user.manager.DdManager;
import com.hotent.lpg.user.manager.DdfwrzManager;
import com.hotent.lpg.user.manager.HyxxManager;
import com.hotent.lpg.user.manager.HyyqjlManager;
import com.hotent.lpg.user.vo.DdxxVo;
import com.hotent.uc.util.ContextUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

/**
 * 订单 服务实现类
 *
 * @author 超级管理员
 * @company 广州宏天软件股份有限公司
 * @since 2024-03-18
 */
@Slf4j
@Transactional(rollbackFor = Exception.class)
@Service
public class DdManagerImpl extends BaseManagerImpl<DdDao, WDd> implements DdManager {
    @Resource
    private IdGenerator idGenerator;

    @Resource
    private DdxqDao ddxqDao;
    @Resource
    private QplxDao qplxDao;
    @Resource
    private DdfwrzManager wDdfwrzManager;
    @Resource
    private HyxxManager wHyxxManager;
    @Resource
    private HyyqjlManager wHyyqjlManager;
    @Override
    public WDd getDetail(String id) {
        WDd wDd = this.get(id);
        if (ObjectUtil.isNull(wDd)) {
            return wDd;
        }
        wDd.setDdxqList(ddxqDao.selectList(new LambdaQueryWrapper<WDdxq>().eq(WDdxq::getfDdid, wDd.getId())));
        return wDd;
    }
    @Override
    public void cancel(String ddid) {
        WDd dd = baseMapper.selectById(ddid);
        if (ObjectUtil.isNull(dd)) {
            throw new RuntimeException("参数错误:订单不存在");
        }
        if (DdztEnum.dps.getInfo().equals(dd.getFDdzt()) || DdztEnum.psz.getInfo().equals(dd.getFDdzt())) {
            dd.setFDdzt(DdztEnum.yqx.getInfo());
            baseMapper.updateById(dd);
        } else {
            throw new RuntimeException("订单状态不正确");
        }
        //添加服务日志
        wDdfwrzManager.insertDdfwrz(DdfwlxEnum.qxdd.getCode(), dd.getId());
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public WDd createOrder(DdDto request) {
        WQplx qplx = qplxDao.selectById(request.getXqList().get(0).getQplxId());
        WDd dd = new WDd();
        dd.setId(idGenerator.getSuid());

        dd.setFSfhy(request.getSfhy());
        dd.setFHyyhid(request.getHyid());
        dd.setFHymc(request.getHymc());
        dd.setFHylx(request.getHylx());
        dd.setFHydh(request.getHydh());

        dd.setFShtysbm(request.getShtysbm());
        dd.setFSfzh(request.getSfzh());

        dd.setFDdlx(null);
        dd.setFDddh(idGenerator.getSuid());
        dd.setFDdly(request.getDdly());
        dd.setFZffs(null);
        dd.setFPsfs(request.getPsfs());
        dd.setFDdzt(DdztEnum.dps.getInfo());
        dd.setFMjly(request.getMjly());
        dd.setFBz(request.getBz());

        dd.setFCzid(qplx.getfSsczid());
        dd.setFCzmc(qplx.getfSsczmc());
        dd.setFQyid(qplx.getfSsqyid());

        dd.setFXdrlx(request.getXdrlx());
        dd.setFXdrid(request.getXdrid());
        dd.setFXdrmc(request.getXdrmc());
        dd.setFShlxr(request.getShlxr());
        dd.setFShlxrdh(request.getShlxrdh());
        dd.setFShsf(request.getShsf());
        dd.setFShs(request.getShs());
        dd.setFShq(request.getShq());
        dd.setFShjd(request.getShjd());
        dd.setFShxxdz(request.getShxxdz());
        dd.setFCjr(ContextUtil.getCurrentUser().getFullname());
        dd.setFCjsj(LocalDateTime.now());
        dd.setFGxr(ContextUtil.getCurrentUser().getFullname());
        dd.setFGxsj(LocalDateTime.now());
        dd.setFShdzjd(request.getJd());
        dd.setFShdzwd(request.getWd());
        BigDecimal ddje = new BigDecimal(0);
        List<WDdxq> ddxqList = new ArrayList<WDdxq>();
        for (DdDto.XqVO xqVO : request.getXqList()) {
            WQplx wQplx = qplxDao.selectById(xqVO.getQplxId());
            if (ObjectUtil.isNull(wQplx)) {
                throw new RuntimeException("商品信息不存在");
            }
            ddje = NumberUtil.add(ddje, NumberUtil.mul(wQplx.getfJg(), xqVO.getSl()));
            WDdxq ddxq = new WDdxq();
            ddxq.setfDdid(dd.getId());
            ddxq.setfQplxid(wQplx.getId());
            ddxq.setfSpmc(wQplx.getfMc());
            ddxq.setfTp(wQplx.getfTp());
            ddxq.setfSl(BigDecimal.valueOf(xqVO.getSl()));
            ddxq.setfDj(wQplx.getfJg());
            ddxq.setfMs(wQplx.getfMs());
            ddxqDao.insert(ddxq);
            ddxqList.add(ddxq);
        }
        dd.setFDdje(ddje);
        dd.setDdxqList(ddxqList);
        baseMapper.insert(dd);
        //添加服务日志
        wDdfwrzManager.insertDdfwrz(DdfwlxEnum.cjdd.getCode(), dd.getId());
        return dd;
    }

    @Override
    public IPage pageList(Page page, String zt, String hyid) {
        LambdaQueryWrapper<WDd> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(StrUtil.isNotBlank(zt), WDd::getFDdzt, zt);
        wrapper.eq(WDd::getFHyyhid, hyid);
        wrapper.orderByDesc(WDd::getFCjsj);
        Page selectPage = baseMapper.selectPage(page, wrapper);
        if (CollUtil.isNotEmpty(selectPage.getRecords())) {
            List<WDd> list = selectPage.getRecords();
            for (WDd dd : list) {
                dd.setDdxqList(ddxqDao.selectList(new LambdaQueryWrapper<WDdxq>().eq(WDdxq::getfDdid, dd.getId())));
            }
        }
        return selectPage;
    }

    @Override
    public DdxxVo getOrderByid(String oracleId) {
        WDd dd = this.getById(oracleId);
        if (BeanUtils.isEmpty(dd)) {
            throw new RuntimeException("未查询到订单信息。");
        }
        DdxxVo ddxxVo = new DdxxVo();
        BeanUtil.copyProperties(dd, ddxxVo);
        if (StringUtil.isNotEmpty(dd.getFHyyhid())) {
            ddxxVo.setHyxx(wHyxxManager.getUseridByInfo(dd.getFHyyhid()));
        }
        WHyyqjl wHyyqjl = wHyyqjlManager.getOne
                (Wrappers.<WHyyqjl>lambdaQuery()
                        .eq(WHyyqjl::getFHyyhid, dd.getFHyyhid())

                        .orderByDesc(WHyyqjl::getFCjsj)
                        .last("LIMIT 1"));
        ddxxVo.setMcazsj(BeanUtil.isEmpty(wHyyqjl) ? null : wHyyqjl.getFCjsj());
        return ddxxVo;
    }

    @Override
    public WDd addOrder(DdDto ddDto) {
        WQplx qplx = qplxDao.selectById(ddDto.getXqList().get(0).getQplxId());
        WDd dd = new WDd();
        dd.setId(idGenerator.getSuid());
        dd.setFSfhy(ddDto.getSfhy());
        dd.setFHyyhid(ddDto.getHyid());
        dd.setFHymc(ddDto.getHymc());
        dd.setFHylx(ddDto.getHylx());
        dd.setFHydh(ddDto.getHydh());
        dd.setFShtysbm(ddDto.getShtysbm());
        dd.setFSfzh(ddDto.getSfzh());
        dd.setFDdlx(null);
        dd.setFDddh(idGenerator.getSuid());
        dd.setFDdly(ddDto.getDdly());
        dd.setFZffs(ddDto.getZffs());
        dd.setFZflx(ddDto.getZflx());
        dd.setFSfzf("否");
        dd.setFPsfs(ddDto.getPsfs());
        dd.setFDdzt(StringUtil.isEmail(ddDto.getDdzt())?DdztEnum.dps.getInfo():ddDto.getDdzt());
        dd.setFMjly(ddDto.getMjly());
        dd.setFBz(ddDto.getBz());
        dd.setFCzid(qplx.getfSsczid());
        dd.setFCzmc(qplx.getfSsczmc());
        dd.setFQyid(qplx.getfSsqyid());
        dd.setFXdrlx(ddDto.getXdrlx());
        dd.setFXdrid(ddDto.getXdrid());
        dd.setFXdrmc(ddDto.getXdrmc());
        dd.setFShlxr(ddDto.getShlxr());
        dd.setFShlxrdh(ddDto.getShlxrdh());
        dd.setFShsf(ddDto.getShsf());
        dd.setFShs(ddDto.getShs());
        dd.setFShq(ddDto.getShq());
        dd.setFShjd(ddDto.getShjd());
        dd.setFShxxdz(ddDto.getShxxdz());
        dd.setFCjr(ContextUtil.getCurrentUser().getFullname());
        dd.setFCjsj(LocalDateTime.now());
        dd.setFGxr(ContextUtil.getCurrentUser().getFullname());
        dd.setFGxsj(LocalDateTime.now());
        dd.setFShdzjd(ddDto.getJd());
        dd.setFShdzwd(ddDto.getWd());
        BigDecimal ddje = new BigDecimal(0);
        List<WDdxq> ddxqList = new ArrayList<WDdxq>();
        for (DdDto.XqVO xqVO : ddDto.getXqList()) {
            WQplx wQplx = qplxDao.selectById(xqVO.getQplxId());
            if (ObjectUtil.isNull(wQplx)) {
                throw new RuntimeException("商品信息不存在");
            }
            ddje = NumberUtil.add(ddje, NumberUtil.mul(wQplx.getfJg(), xqVO.getSl()));
            WDdxq ddxq = new WDdxq();
            ddxq.setfDdid(dd.getId());
            ddxq.setfQplxid(wQplx.getId());
            ddxq.setfSpmc(wQplx.getfMc());
            ddxq.setfTp(wQplx.getfTp());
            ddxq.setfSl(BigDecimal.valueOf(xqVO.getSl()));
            ddxq.setfDj(wQplx.getfJg());
            ddxq.setfMs(wQplx.getfMs());
            ddxqDao.insert(ddxq);
            ddxqList.add(ddxq);
        }
        dd.setFDdje(ddje);
        dd.setDdxqList(ddxqList);
        baseMapper.insert(dd);
        //添加服务日志
        wDdfwrzManager.insertDdfwrz(DdfwlxEnum.cjdd.getCode(), dd.getId());
        return dd;
    }
}