doum
3 天以前 078a5c4ced367fdbd5a16c27c8bada6e44e632d5
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchServiceImpl.java
@@ -1,20 +1,38 @@
package com.doumee.service.business.impl;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.annotation.excel.ExcelImporter;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.admin.request.JkCustomerImport;
import com.doumee.dao.admin.request.JkOrdersImport;
import com.doumee.dao.business.*;
import com.doumee.dao.business.model.*;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.JkSketchMapper;
import com.doumee.dao.business.model.JkSketch;
import com.doumee.service.business.JkSketchService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
 * 交控-线路优化记录信息表Service实现
@@ -26,6 +44,22 @@
    @Autowired
    private JkSketchMapper jkSketchMapper;
    @Autowired
    private JkSketchLineMapper jkSketchLineMapper;
    @Autowired
    private JkSketchCustomerMapper jkSketchCustomerMapper;
    @Autowired
    private JkCustomerMapper jkCustomerMapper;
    @Autowired
    private JkLineMapper jkLineMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private JkOrdersMapper jkOrdersMapper;
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    @Override
    public Integer create(JkSketch jkSketch) {
@@ -87,61 +121,62 @@
    @Override
    public PageData<JkSketch> findPage(PageWrap<JkSketch> pageWrap) {
        IPage<JkSketch> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<JkSketch> queryWrapper = new QueryWrapper<>();
        MPJLambdaWrapper<JkSketch> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        pageWrap.getModel().setIsdeleted(Constants.ZERO);
        queryWrapper.selectAll(JkSketch.class )
                .selectAs(Category::getId,JkSketch::getCategoryId)
                .selectAs(Category::getName,JkSketch::getCategoryName)
                .leftJoin(Category.class,Category::getId,JkSketch::getCategoryId );
        queryWrapper.eq( pageWrap.getModel().getCategoryId()!=null,JkLine::getCategoryId, pageWrap.getModel().getCategoryId());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(JkSketch::getId, pageWrap.getModel().getId());
            queryWrapper.eq(JkSketch::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(JkSketch::getCreator, pageWrap.getModel().getCreator());
            queryWrapper.eq(JkSketch::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(JkSketch::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(JkSketch::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
            queryWrapper.ge(JkSketch::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.le(JkSketch::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.lambda().eq(JkSketch::getEditor, pageWrap.getModel().getEditor());
            queryWrapper.eq(JkSketch::getEditor, pageWrap.getModel().getEditor());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(JkSketch::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(JkSketch::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
            queryWrapper.ge(JkSketch::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.le(JkSketch::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(JkSketch::getIsdeleted, pageWrap.getModel().getIsdeleted());
            queryWrapper.eq(JkSketch::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getInfo() != null) {
            queryWrapper.lambda().eq(JkSketch::getInfo, pageWrap.getModel().getInfo());
            queryWrapper.eq(JkSketch::getInfo, pageWrap.getModel().getInfo());
        }
        if (pageWrap.getModel().getCategoryId() != null) {
            queryWrapper.lambda().eq(JkSketch::getCategoryId, pageWrap.getModel().getCategoryId());
            queryWrapper.eq(JkSketch::getCategoryId, pageWrap.getModel().getCategoryId());
        }
        if (pageWrap.getModel().getTotalNum() != null) {
            queryWrapper.lambda().eq(JkSketch::getTotalNum, pageWrap.getModel().getTotalNum());
            queryWrapper.eq(JkSketch::getTotalNum, pageWrap.getModel().getTotalNum());
        }
        if (pageWrap.getModel().getOrderNum() != null) {
            queryWrapper.lambda().eq(JkSketch::getOrderNum, pageWrap.getModel().getOrderNum());
            queryWrapper.eq(JkSketch::getOrderNum, pageWrap.getModel().getOrderNum());
        }
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.lambda().eq(JkSketch::getStatus, pageWrap.getModel().getStatus());
            queryWrapper.eq(JkSketch::getStatus, pageWrap.getModel().getStatus());
        }
        if (pageWrap.getModel().getSortnum() != null) {
            queryWrapper.lambda().eq(JkSketch::getSortnum, pageWrap.getModel().getSortnum());
            queryWrapper.eq(JkSketch::getSortnum, pageWrap.getModel().getSortnum());
        }
        if (pageWrap.getModel().getDateInfo() != null) {
            queryWrapper.lambda().ge(JkSketch::getDateInfo, Utils.Date.getStart(pageWrap.getModel().getDateInfo()));
            queryWrapper.lambda().le(JkSketch::getDateInfo, Utils.Date.getEnd(pageWrap.getModel().getDateInfo()));
            queryWrapper.eq(JkSketch::getDateInfo,  pageWrap.getModel().getDateInfo());
        }
        if (pageWrap.getModel().getJobId() != null) {
            queryWrapper.lambda().eq(JkSketch::getJobId, pageWrap.getModel().getJobId());
            queryWrapper.eq(JkSketch::getJobId, pageWrap.getModel().getJobId());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(jkSketchMapper.selectPage(page, queryWrapper));
        queryWrapper.orderByDesc(JkSketch::getDateInfo);
        IPage<JkSketch> result = jkSketchMapper.selectJoinPage(page, JkSketch.class,queryWrapper);
        return PageData.from(result);
    }
    @Override
@@ -149,4 +184,309 @@
        QueryWrapper<JkSketch> wrapper = new QueryWrapper<>(jkSketch);
        return jkSketchMapper.selectCount(wrapper);
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public List<JkSketch> importBatch(MultipartFile file, String dateInfoStr, LoginUserInfo loginUser){
        if(StringUtils.isBlank(dateInfoStr)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请选择送货日期!");
        }
        Date dateInfo = DateUtil.getDateFromShortString(dateInfoStr);
        if(dateInfo == null){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请选择正确的送货日期!");
        }
        Boolean importing = (Boolean) redisTemplate.opsForValue().get(Constants.RedisKeys.IMPORTING_JKORDERS);
        if(importing!=null && importing){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,已存在导入任务正在执行中,请稍后再试!");
        }
        redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_JKORDERS,true,30, TimeUnit.MINUTES);
        try {
            ExcelImporter ie = null;
            List<JkOrdersImport> dataList =null;
            try {
                ie = new ExcelImporter(file,1,0);
                dataList = ie.getDataList(JkOrdersImport.class,null);
            }  catch (Exception e) {
                e.printStackTrace();
            }
            if(dataList == null || dataList.size() ==0){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,录入数据为空!");
            }
            List<JkCustomer> customerList =  jkCustomerMapper.selectJoinList(JkCustomer.class,new MPJLambdaWrapper<JkCustomer>()
                    .selectAll(JkCustomer.class)
                    .eq(JkCustomer::getIsdeleted,Constants.ZERO)
            );
            //当前所有线路
            List<JkLine> lineList =  jkLineMapper.selectJoinList(JkLine.class,new MPJLambdaWrapper<JkLine>()
                    .selectAll(JkLine.class)
                    .eq(JkLine::getIsdeleted,Constants.ZERO)
            );
            List<JkOrders> newOrderList = new ArrayList<>();
            for(int i=0;i<dataList.size();i++){
                JkOrdersImport model = dataList.get(i);
                if(StringUtils.isBlank(model.getName())
                        &&StringUtils.isBlank(model.getCode())
                        &&StringUtils.isBlank(model.getNum())
                        &&StringUtils.isBlank(model.getSortnum())
                        &&StringUtils.isBlank(model.getDateInfo())
                        &&StringUtils.isBlank(model.getLineName()) ){
                    continue;
                }
                checkModelParam(model, newOrderList, i,dateInfo,loginUser,customerList,lineList );
            }
            if( newOrderList.size()==0){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,录入有效数据为空!");
            }
            List<JkSketch> newList = initNewSketchList(newOrderList);//按照主线路分组
            if(  newList.size() ==0 ){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,录入有效数据为空!");
            }
            jkSketchMapper.update(null,new UpdateWrapper<JkSketch>().lambda()
                    .set(JkSketch::getIsdeleted,Constants.ONE)
                    .eq(JkSketch::getIsdeleted,Constants.ZERO)
                    .eq(JkSketch::getDateInfo,dateInfo));
            jkOrdersMapper.update(null,new UpdateWrapper<JkOrders>().lambda()
                    .set(JkOrders::getIsdeleted,Constants.ONE)
                    .eq(JkOrders::getIsdeleted,Constants.ZERO)
                    .eq(JkOrders::getDateInfo,dateInfo));
            if(newList.size()>0){
                jkSketchMapper.insert(newList);
            }
            if(newOrderList.size()>0){
                jkOrdersMapper.insert(newOrderList);
            }
            List<JkSketchLine> sketchLineList = initNewSketchLineList(newList,newOrderList);
            jkSketchLineMapper.update(null,new UpdateWrapper<JkSketchLine>().lambda()
                    .set(JkSketchLine::getIsdeleted,Constants.ONE)
                    .eq(JkSketchLine::getIsdeleted,Constants.ZERO)
                    .eq(JkSketchLine::getDateInfo,dateInfo));
            if(sketchLineList.size()>0){
                jkSketchLineMapper.insert(sketchLineList);
            }
            List<JkSketchCustomer> sketchCuustomerList = initNewSketchCustomerList(sketchLineList,newOrderList);//按照主线路分组
            jkSketchCustomerMapper.update(null,new UpdateWrapper<JkSketchCustomer>().lambda()
                    .set(JkSketchCustomer::getIsdeleted,Constants.ONE)
                    .eq(JkSketchCustomer::getIsdeleted,Constants.ZERO)
                    .eq(JkSketchCustomer::getDateInfo,dateInfo));
            if(sketchCuustomerList.size()>0){
                jkSketchCustomerMapper.insert(sketchCuustomerList);
            }
            return newList;
        }catch (BusinessException e){
            throw e;
        }catch (Exception e){
            e.printStackTrace();
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"信息导入失败,请稍后重试");
        }finally {
            redisTemplate.delete(Constants.RedisKeys.IMPORTING_JKORDERS);
        }
    }
    private List<JkSketchCustomer> initNewSketchCustomerList(List<JkSketchLine> sketchLineList, List<JkOrders> newOrderList) {
        List<JkSketchCustomer> list =new ArrayList<>();
        for(JkOrders orders : newOrderList){
            JkSketchLine line = findModelFromListByLineId(orders.getLineId(),sketchLineList);
            if( line!=null){
                JkSketchCustomer tModel =  new JkSketchCustomer();
                tModel.setCreator(orders.getCreator());
                tModel.setOrderId(orders.getId());
                tModel.setCreateDate(orders.getCreateDate());
                tModel.setTotalNum(orders.getNum());
                tModel.setDateInfo(orders.getDateInfo());
                tModel.setSortnum(list.size()+1);
                tModel.setEditDate(tModel.getCreateDate());
                tModel.setEditor(tModel.getCreator());
                tModel.setIsdeleted(Constants.ZERO);
                tModel.setSketchId(line.getSketchId());
                tModel.setCustomerId(orders.getCustomerId());
                tModel.setSketchLineId(line.getId());
                list.add(tModel);
            }
        }
        return list;
    }
    private List<JkSketchLine> initNewSketchLineList(List<JkSketch> newList, List<JkOrders> newOrderList) {
        List<JkSketchLine> list =new ArrayList<>();
        for(JkOrders orders : newOrderList){
            JkSketchLine tModel = findModelFromListByLineId(orders.getLineId(),list);
            if(tModel!=null){
                tModel.setTotalNum(  tModel.getTotalNum().add(orders.getNum()));//订单量累计
                tModel.setOrderNum(tModel.getOrderNum()+1);//客户数加1
            }else{
                tModel = new JkSketchLine();
                tModel.setSketchId(getSKetchIdByyCategoryId(orders.getCategoryId(),newList));
                tModel.setCreator(orders.getCreator());
                tModel.setCreateDate(orders.getCreateDate());
                tModel.setLineId(orders.getLineId());
                tModel.setTotalNum(orders.getNum());
                tModel.setOrderNum(1);
                tModel.setDateInfo(orders.getDateInfo());
                tModel.setSortnum(list.size()+1);
                tModel.setEditDate(tModel.getCreateDate());
                tModel.setEditor(tModel.getCreator());
                tModel.setIsdeleted(Constants.ZERO);
                if(tModel.getSketchId()!=null){
                    list.add(tModel);
                }
            }
        }
        return list;
    }
    private Integer getSKetchIdByyCategoryId(Integer categoryId, List<JkSketch> newList) {
        for(JkSketch model:newList){
            if(Constants.equalsInteger(model.getCategoryId(),categoryId)){
                return model.getId();
            }
        }
        return null;
    }
    private JkSketchLine findModelFromListByLineId(Integer lineId, List<JkSketchLine> list) {
        if(list !=null){
            for(JkSketchLine model : list){
                if(Constants.equalsInteger(lineId,model.getLineId())){
                    return  model;
                }
            }
        }
        return null;
    }
    private   List<JkSketch>  initNewSketchList(List<JkOrders> newOrderList) {
        List<JkSketch> list =new ArrayList<>();
        for(JkOrders orders : newOrderList){
            JkSketch tModel = findModelFromListByCateId(orders.getCategoryId(),list);
            if(tModel!=null){
                tModel.setTotalNum(  tModel.getTotalNum().add(orders.getNum()));//订单量累计
                tModel.setOrderNum(tModel.getOrderNum()+1);//客户数加1
            }else{
                tModel = new JkSketch();
                tModel.setLineNum(getLineNumByOrders(orders.getCategoryId(),newOrderList));
                tModel.setCreator(orders.getCreator());
                tModel.setCreateDate(orders.getCreateDate());
                tModel.setCategoryId(orders.getCategoryId());
                tModel.setTotalNum(orders.getNum());
                tModel.setOrderNum(1);
                tModel.setDateInfo(orders.getDateInfo());
                tModel.setSortnum(list.size()+1);
                tModel.setEditDate(tModel.getCreateDate());
                tModel.setEditor(tModel.getCreator());
                tModel.setStatus(Constants.ZERO);
                tModel.setIsdeleted(Constants.ZERO);
                list.add(tModel);
            }
        }
        return list;
    }
    private Integer getLineNumByOrders(Integer cateId, List<JkOrders> newOrderList) {
        List<JkSketchLine> list =new ArrayList<>();
        for(JkOrders orders : newOrderList){
            if(!Constants.equalsInteger(orders.getCategoryId(),cateId)){
                continue;
            }
            JkSketchLine tModel = findModelFromListByLineId(orders.getLineId(),list);
            if(tModel ==null){
                tModel = new JkSketchLine();
                tModel.setLineId(orders.getLineId());
                list.add(tModel);
            }
        }
        return list.size();
    }
    private JkOrders checkModelParam(JkOrdersImport model
            , List<JkOrders> newOrderList
            ,int index
            ,Date dateInfo
            ,LoginUserInfo loginUserInfo
            ,List<JkCustomer> allList
            ,List<JkLine> lineList ) {
        if(StringUtils.isBlank(model.getName())
                ||StringUtils.isBlank(model.getCode())
                ||StringUtils.isBlank(model.getName())
                ||StringUtils.isBlank(model.getLineName()) ){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第"+(index+3)+"行客户信息不完整,请检查表格内容!");
        }
        for(JkOrders param: newOrderList){
            if(StringUtils.isNotBlank(model.getCode())&&StringUtils.isNotBlank(param.getCode())) {
                if (StringUtils.equals(model.getCode(), param.getCode())) {
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,第" + (index + 3) + "行客户简码【" + model.getName() + "】重复出现,请检查表格内容!");
                }
            }
        }
        JkCustomer customer = findModelFromList(model.getCode(),allList);
        if(customer == null){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,第" + (index + 3) + "行客户编码【" + model.getCode() + "】不存在,请检查表格内容!");
        }
        if(!StringUtils.equals(customer.getName(),model.getName())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,第" + (index + 3) + "行客户名称【" + model.getName() + "】和编码不匹配,请检查表格内容!");
        }
        JkLine line = findLineFromListByName(model.getLineName(),lineList);
        if(line == null){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,第" + (index + 3) + "行线路【" + model.getLineName() + "】不存在,请检查表格内容!");
        }
        JkOrders tModel =   new JkOrders();
        tModel.setCreator(loginUserInfo.getId());
        tModel.setCreateDate(new Date());
        tModel.setName(model.getName());
        tModel.setCode(model.getCode());
        tModel.setNum(getDecimalByVal(model.getNum()));
        tModel.setCustomerId(customer.getId());
        tModel.setDateInfo(dateInfo);
        tModel.setSortnum(model.getSortnum());
        tModel.setLineId(line.getId());
        tModel.setCategoryId(line.getCategoryId());
        tModel.setEditDate(new Date());
        tModel.setEditor(loginUserInfo.getId());
        tModel.setIsdeleted(Constants.ZERO);
        newOrderList.add(tModel);
        return tModel;
    }
    private BigDecimal getDecimalByVal(String val) {
        try {
            return new BigDecimal(val);
        }catch (Exception e){
        }
        return null;
    }
    private JkCustomer findModelFromList(String code, List<JkCustomer> list) {
        if(list !=null){
            for(JkCustomer model : list){
                if(StringUtils.equals(code,model.getCode())){
                    return  model;
                }
            }
        }
        return null;
    }
    private JkSketch findModelFromListByCateId(Integer cateId, List<JkSketch> list) {
        if(list !=null){
            for(JkSketch model : list){
                if(Constants.equalsInteger(cateId,model.getCategoryId())){
                    return  model;
                }
            }
        }
        return null;
    }
    private JkLine findLineFromListByName(String name, List<JkLine> list) {
        if(list !=null){
            for(JkLine model : list){
                if(StringUtils.equals(name,model.getName())){
                    return model;
                }
            }
        }
        return null;
    }
}