package doumeemes.service.business.impl; 
 | 
  
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 
 | 
import com.dingtalk.api.response.OapiProcessinstanceGetResponse; 
 | 
import com.github.pagehelper.PageHelper; 
 | 
import com.github.pagehelper.PageInfo; 
 | 
import doumeemes.core.constants.ResponseStatus; 
 | 
import doumeemes.core.exception.BusinessException; 
 | 
import doumeemes.core.model.LoginUserInfo; 
 | 
import doumeemes.core.model.PageData; 
 | 
import doumeemes.core.model.PageWrap; 
 | 
import doumeemes.core.utils.Constants; 
 | 
import doumeemes.core.utils.DateUtil; 
 | 
import doumeemes.core.utils.Utils; 
 | 
import doumeemes.core.utils.dingding.DingDingUtil; 
 | 
import doumeemes.core.utils.redis.RedisUtil; 
 | 
import doumeemes.dao.business.BackOrderDetailMapper; 
 | 
import doumeemes.dao.business.BackorderMapper; 
 | 
import doumeemes.dao.business.dto.MaterialListDTO; 
 | 
import doumeemes.dao.business.model.*; 
 | 
import doumeemes.dao.business.vo.DdInstanceStatusVO; 
 | 
import doumeemes.dao.ext.*; 
 | 
import doumeemes.dao.ext.dto.QueryAppliancesExtDTO; 
 | 
import doumeemes.dao.ext.dto.QueryWorkorderRecordExtDTO; 
 | 
import doumeemes.dao.ext.vo.*; 
 | 
import doumeemes.service.business.BackorderService; 
 | 
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 doumeemes.service.business.CompanyService; 
 | 
import doumeemes.service.business.WTransferService; 
 | 
import doumeemes.service.ext.CompanyExtService; 
 | 
import doumeemes.service.ext.DepartmentExtService; 
 | 
import doumeemes.service.ext.PlansExtService; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.apache.shiro.SecurityUtils; 
 | 
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 java.math.BigDecimal; 
 | 
import java.util.ArrayList; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * 工单类-返修申请单信息表Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2022/07/19 14:29 
 | 
 */ 
 | 
@Service 
 | 
public class BackorderServiceImpl implements BackorderService { 
 | 
    @Autowired 
 | 
    private RedisTemplate<String, Object> redisTemplate; 
 | 
    @Autowired 
 | 
    private BackorderMapper backorderMapper; 
 | 
    @Autowired 
 | 
    private CompanyExtService companyExtService; 
 | 
    @Autowired 
 | 
    private WTransferService wTransferService; 
 | 
  
 | 
    @Autowired 
 | 
    private AppliancesExtMapper appliancesExtMapper; 
 | 
    @Autowired 
 | 
    private BackOrderDetailMapper backOrderDetailMapper; 
 | 
    @Autowired 
 | 
    private ProceduresExtMapper proceduresExtMapper; 
 | 
    @Autowired 
 | 
    private WarehouseExtMapper warehouseExtMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private CompanyUserExtMapper companyUserExtMapper; 
 | 
    @Autowired 
 | 
    private PlansExtService plansExtService; 
 | 
    @Autowired 
 | 
    private DepartmentExtService departmentExtService; 
 | 
    @Autowired 
 | 
    private DepartmentExtMapper departmentExtMapper; 
 | 
  
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {BusinessException.class,Exception.class}) 
 | 
    public Integer create(Backorder  backorder)  { 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); 
 | 
        } 
 | 
        if( StringUtils.isBlank(backorder.getContent()) 
 | 
                || backorder.getType()== null 
 | 
                || backorder.getApplianceIdList()== null 
 | 
                || backorder.getApplianceIdList().size()==0){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,请按要求填写和选择提交数据!"); 
 | 
        } 
 | 
  
 | 
        Procedures procedures = null; 
 | 
        if(!Constants.equalsInteger(backorder.getType(),Constants.BACKORDER_TYPE.scrap)){ 
 | 
            if(backorder.getBackProcedureId()== null 
 | 
                    || backorder.getPlanDate()== null) { 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,请按要求填写和选择提交数据!"); 
 | 
            } 
 | 
            Date pDate = DateUtil.getDateFromString(DateUtil.getShortTime(backorder.getPlanDate()) +" 00:00:00"); 
 | 
            Date nDate =  DateUtil.getDateFromString(DateUtil.getShortTime(DateUtil.getCurrentDate()) +" 00:00:00"); 
 | 
            if(DateUtil.dateAddDays(nDate,1).getTime() > pDate.getTime()){ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,计划生产日期必须为今天以后的日期!"); 
 | 
            } 
 | 
            procedures = new Procedures(); 
 | 
            procedures.setDeleted(Constants.ZERO); 
 | 
            procedures.setRootDepartId(user.getRootDepartment().getId()); 
 | 
            procedures.setId(backorder.getBackProcedureId()); 
 | 
            procedures = proceduresExtMapper.selectOne(new QueryWrapper<>(procedures).last(" limit 1")); 
 | 
            if(procedures == null){ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,请选择正确的返工工序!"); 
 | 
            } 
 | 
            backorder.setBackProcedureName(procedures.getName()); 
 | 
        }else{ 
 | 
            if(backorder.getWarehouseId() == null){ 
 | 
                //入库仓库编码 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,请按要求填写和选择提交数据!"); 
 | 
            } 
 | 
            Warehouse w = new Warehouse(); 
 | 
            w.setRootDepartId(user.getRootDepartment().getId()); 
 | 
            w.setDeleted(Constants.ZERO); 
 | 
            w.setId(backorder.getWarehouseId()); 
 | 
            w = warehouseExtMapper.selectOne(new QueryWrapper<>(w).last(" limit 1")); 
 | 
            if(w == null){ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,入库仓库不存在!"); 
 | 
            } 
 | 
            backorder.setWarehouseName(w.getName()); 
 | 
        } 
 | 
  
 | 
        Backorder order = new Backorder(); 
 | 
        order.setDeleted(Constants.ZERO); 
 | 
        order.setStatus(Constants.BACKORDER_STATUS.ing); 
 | 
        String ids = ""; 
 | 
        for(Integer tid : backorder.getApplianceIdList()){ 
 | 
            if(StringUtils.isNotBlank(ids)){ 
 | 
                ids+=","; 
 | 
            } 
 | 
            ids +=tid; 
 | 
        } 
 | 
        int count = backorderMapper.selectCount(new LambdaQueryWrapper<>(order).exists(" select b.id from back_order_detail b where b.backorder_id=backorder.id and b.deleted=0 and b.appliance_id in ("+ids+")")); 
 | 
        if(count>0){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,选择的工装有正在申请单,不可以再次申请!"); 
 | 
        } 
 | 
        //根据请求数据,查询全部器具信息 
 | 
        List<AppliancesExtListVO> aList = appliancesExtMapper.selectList(initApplianceParam(user,backorder.getApplianceIdList())); 
 | 
        if(aList == null || aList.size() ==0){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,请选择正确的工装器具!"); 
 | 
        } 
 | 
  
 | 
        AppliancesExtListVO taModel = aList.get(0); 
 | 
        //累计总物料数量 
 | 
        BigDecimal num = new BigDecimal(0); 
 | 
        backorder.setDetailList(new ArrayList<>()); 
 | 
        //不同篮筐的物料、生产工序、质量属性、仓库、批次必须相同 
 | 
        for(AppliancesExtListVO a : aList){ 
 | 
            if(!Constants.equalsInteger(backorder.getType(),Constants.BACKORDER_TYPE.scrap) 
 | 
                    &&(!Constants.equalsInteger(a.getMaterialId(),taModel.getMaterialId()) 
 | 
                    || !Constants.equalsInteger(a.getProcedureId(),taModel.getProcedureId()) 
 | 
                    || !StringUtils.equals(a.getBatch(),taModel.getBatch()) 
 | 
                    || !Constants.equalsInteger(a.getQualityType(),taModel.getQualityType()) 
 | 
                    || !Constants.equalsInteger(a.getWarehouseId(),taModel.getWarehouseId()) )){ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,工装的物料、生产工序、质量属性、仓库必须相同!"); 
 | 
            } 
 | 
            if(a.getBackorderId() !=null){ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,选择的工装【"+a.getCode()+"】有正绑定返修申请单,不可以再次申请!"); 
 | 
            } 
 | 
            if(a.getPmodel() == null){ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,工装【"+a.getCode()+"】所属工序为空!"); 
 | 
            } 
 | 
            if(a.getPmodel().getOrgId() == null){ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,工装【"+a.getCode()+"】生产工序未绑定工厂,不能进行返工申请!"); 
 | 
            } 
 | 
            if(a.getWarehouseId() == null){ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,工装【"+a.getCode()+"】不在仓库内,不能进行返工申请!"); 
 | 
            } 
 | 
            if(a.getBackorderId()!=null){ 
 | 
                //篮筐有返工返修申请单号 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,工装【"+a.getCode()+"】已关联返工返修申请单,不能再申请!"); 
 | 
            } 
 | 
            num = num.add(Constants.formatBigdecimal(a.getNum())); 
 | 
            BackOrderDetail detail = new BackOrderDetail(); 
 | 
            detail.setDeleted(Constants.ZERO); 
 | 
            detail.setCreateUser(backorder.getCreateUser()); 
 | 
            detail.setRootDepartId(backorder.getRootDepartId()); 
 | 
            detail.setOrderDepartId(backorder.getOrderDepartId()); 
 | 
            detail.setCreateTime(backorder.getCreateTime()); 
 | 
            detail.setBackorderId(backorder.getId()); 
 | 
            detail.setApplianceId(a.getId()); 
 | 
            detail.setNum(a.getNum()); 
 | 
            detail.setApplianceCode(a.getCode()); 
 | 
            detail.setBatch(StringUtils.defaultString(a.getBatch(),"")); 
 | 
            detail.setProcedureName(a.getPmodel()==null?"":a.getPmodel().getName()); 
 | 
            detail.setMaterialId(a.getMaterialId()); 
 | 
            detail.setUnitName(a.getUmodelName()); 
 | 
            detail.setUnitData(a.getUmodelData()); 
 | 
            detail.setMaterialCode(a.getMaterialCode()); 
 | 
            detail.setMaterialName(a.getMaterialName()); 
 | 
            detail.setProcedureId(a.getProcedureId()); 
 | 
            backorder.getDetailList().add(detail); 
 | 
        } 
 | 
        if(!Constants.equalsInteger(backorder.getType(),Constants.BACKORDER_TYPE.scrap)){ 
 | 
            //批次号 
 | 
            backorder.setBatch(taModel.getBatch()); 
 | 
        } 
 | 
        //根据第一个篮筐的生产工序查询对应的工厂信息展示 
 | 
        backorder.setProcedureId(taModel.getProcedureId()); 
 | 
        DepartmentExtListVO org = departmentExtService.getModelById(user.getCompany().getId(),taModel.getPmodel().getOrgId()); 
 | 
        backorder.setOrgName(org==null?null:org.getName()); 
 | 
        if(!Constants.equalsInteger(backorder.getType(),Constants.BACKORDER_TYPE.scrap)){ 
 | 
            backorder.setMaterialId(taModel.getMaterialId()); 
 | 
            backorder.setUnitId(taModel.getMdmodel()!=null?taModel.getMdmodel().getUnitId():null); 
 | 
        } 
 | 
        backorder.setFactoryId( taModel.getPmodel().getOrgId()); 
 | 
        backorder.setDeleted(Constants.ZERO); 
 | 
        backorder.setCreateUser(user.getId()); 
 | 
        backorder.setCreateTime(DateUtil.getCurrentDate()); 
 | 
        backorder.setRootDepartId(user.getRootDepartment().getId()); 
 | 
        backorder.setOrderDepartId(user.getCurComDepartment().getId()); 
 | 
        backorder.setTitle(user.getCompanyUser().getName()+"提交的"+Constants.BACKORDER_TYPE.getTitleByType(backorder.getType())); 
 | 
        backorder.setWarehouseOutId(taModel.getWarehouseId()); 
 | 
        backorder.setCode(getNextCode(user.getCompany().getId())); 
 | 
        backorder.setWarehouseOutName(taModel.getWhmodel()==null?"":taModel.getWhmodel().getName()); 
 | 
        backorder.setStatus(Constants.BACKORDER_STATUS.ing); 
 | 
        backorder.setCreateUserName(user.getCompanyUser().getName() +" / " +user.getDepartment().getName()); 
 | 
        backorder.setNum(num); 
 | 
        String info =""; 
 | 
        if(Constants.equalsInteger(backorder.getType(),Constants.BACKORDER_TYPE.scrap)){ 
 | 
            //如果是报废申请 
 | 
            info = backorder.getCreateUserName()+",提交" 
 | 
                    +Constants.BACKORDER_TYPE.getTitleByType(backorder.getType()) 
 | 
                    +",入库仓库为"+backorder.getWarehouseName(); 
 | 
        }else if(Constants.equalsInteger(backorder.getType(),Constants.BACKORDER_TYPE.customer_back)){ 
 | 
            //如果是可返单 
 | 
            info = backorder.getCreateUserName()+",提交" 
 | 
                    +Constants.BACKORDER_TYPE.getTitleByType(backorder.getType()) 
 | 
                    +",返修客户:"+backorder.getCustomerName() 
 | 
                    +",返修工序为"+backorder.getBackProcedureName();; 
 | 
        }else{ 
 | 
            info = backorder.getCreateUserName()+",提交" 
 | 
                    +Constants.BACKORDER_TYPE.getTitleByType(backorder.getType()) 
 | 
                    +",返修工序为"+backorder.getBackProcedureName(); 
 | 
        } 
 | 
        backorder.setRemark(info); 
 | 
        //不良工序、返修工序负责人相同,则跳过审批直接自动创建返修工序的“返工返修”类型计划 
 | 
        boolean  isSelf = procedures==null?false:Constants.equalsInteger(procedures.getUserId(),taModel.getPmodel().getUserId()); 
 | 
       Integer orderId = null; 
 | 
        //报废必须走审批 
 | 
        if(!isSelf || Constants.equalsInteger(Constants.BACKORDER_TYPE.scrap,backorder.getType()) ){ 
 | 
            if(StringUtils.isBlank(user.getCompanyUser().getDdUserid()))  { 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,您不具备发起钉钉审批的条件,如有疑问请联系管理员!"); 
 | 
            } 
 | 
            try { 
 | 
                String ddinfo = user.getCompany().getDingdingInfo(); 
 | 
                JSONObject json = JSONObject.parseObject(ddinfo); 
 | 
                String processCode = json.getString("instance_tmp_"+backorder.getType()+"_"+backorder.getFactoryId()); 
 | 
                String instanceid = DingDingUtil.startProcessInstance(companyExtService.getDingdingToken(user.getCompany().getId()),user.getCompanyUser().getDdUserid() ,  processCode, backorder); 
 | 
                if(StringUtils.isBlank(instanceid)){ 
 | 
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,发起钉钉审批失败,请稍后重试!"); 
 | 
                } 
 | 
                backorder.setInstanceId(instanceid); 
 | 
            } catch (Exception e) { 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,发起钉钉审批失败,请稍后重试!"); 
 | 
            } 
 | 
            //插入数据 
 | 
            backorderMapper.insert(backorder); 
 | 
        }else{ 
 | 
            //审批通过agree 
 | 
            backorder.setStatus(Constants.BACKORDER_STATUS.yes); 
 | 
            //插入数据 
 | 
           orderId =   backorderMapper.insert(backorder); 
 | 
            //生成生产计划 
 | 
            Plans p = new Plans(); 
 | 
            p.setMaterialId(backorder.getMaterialId()); 
 | 
            p.setDeleted(Constants.ZERO); 
 | 
            p.setCreateUser(backorder.getCreateUser()); 
 | 
            p.setUserId(backorder.getCreateUser()); 
 | 
            p.setCreateTime(DateUtil.getCurrentDate()); 
 | 
            p.setBatch(backorder.getBatch()); 
 | 
//            p.setBatch(plansExtService.getNextBatch(backorder.getCompanyId())); 
 | 
            p.setStatus(Constants.PLAN_STATUS.create); 
 | 
            p.setRootDepartId(backorder.getRootDepartId()); 
 | 
            p.setDepartId(backorder.getOrderDepartId()); 
 | 
            p.setUnitId(backorder.getUnitId()); 
 | 
            p.setType(Constants.PLAN_TYPE.back); 
 | 
            p.setBackorderId(backorder.getId()); 
 | 
            p.setPlanDate(backorder.getPlanDate()); 
 | 
            p.setNum(Constants.formatBigdecimal(backorder.getNum()).intValue()); 
 | 
            p.setProcedureId(backorder.getBackProcedureId()); 
 | 
            p.setFactoryId(backorder.getFactoryId()); 
 | 
            plansExtService.createDirect(p); 
 | 
        } 
 | 
  
 | 
        //遍历更新篮筐数据,并插入明细记录 
 | 
        for(AppliancesExtListVO a : aList){ 
 | 
            Appliances aModel = new Appliances(); 
 | 
            aModel.setId(a.getId()); 
 | 
            aModel.setUpdateUser(user.getId()); 
 | 
//            aModel.setWorkorderId(backorder.getId()); 
 | 
            if(Constants.equalsInteger(backorder.getStatus(),Constants.BACKORDER_STATUS.yes)){ 
 | 
                aModel.setBackProcedureId(backorder.getBackProcedureId()); 
 | 
            } 
 | 
            aModel.setUpdateTime(backorder.getCreateTime()); 
 | 
            aModel.setSaleorderId(backorder.getSaleorderId()); 
 | 
            aModel.setBackorderId(Constants.formatIntegerNum(orderId) >0?backorder.getId():null); 
 | 
            aModel.setWarehouseId(a.getWarehouseId()); 
 | 
            aModel.setLocationId(a.getLocationId()); 
 | 
            appliancesExtMapper.updateById(aModel); 
 | 
        } 
 | 
        for(BackOrderDetail detail  : backorder.getDetailList()){ 
 | 
            detail.setBackorderId(backorder.getId()); 
 | 
            backOrderDetailMapper.insert(detail); 
 | 
        } 
 | 
  
 | 
        return backorder.getId(); 
 | 
    } 
 | 
  
 | 
    private QueryAppliancesExtDTO initApplianceParam(LoginUserInfo user,List<Integer> idList ) { 
 | 
        List<MaterialListDTO> apList = new ArrayList<>(); 
 | 
        for(Integer id : idList){ 
 | 
            MaterialListDTO t = new MaterialListDTO(); 
 | 
            t.setApplianceId(id); 
 | 
            apList.add(t); 
 | 
        } 
 | 
        QueryAppliancesExtDTO appliancesExtDTO =   new QueryAppliancesExtDTO(); 
 | 
        appliancesExtDTO.setDeleted(Constants.ZERO); 
 | 
        appliancesExtDTO.setRootDepartId(user.getRootDepartment().getId()); 
 | 
        appliancesExtDTO.setDepartId(user.getComDepartment().getId()); 
 | 
        appliancesExtDTO.setRecordList(apList); 
 | 
        return appliancesExtDTO; 
 | 
  
 | 
    } 
 | 
    @Override 
 | 
    public void deleteById(Integer id) { 
 | 
        backorderMapper.deleteById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void delete(Backorder backorder) { 
 | 
        UpdateWrapper<Backorder> deleteWrapper = new UpdateWrapper<>(backorder); 
 | 
        backorderMapper.delete(deleteWrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteByIdInBatch(List<Integer> ids) { 
 | 
        if (CollectionUtils.isEmpty(ids)) { 
 | 
            return; 
 | 
        } 
 | 
        backorderMapper.deleteBatchIds(ids); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateById(Backorder backorder) { 
 | 
        backorderMapper.updateById(backorder); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateByIdInBatch(List<Backorder> backorders) { 
 | 
        if (CollectionUtils.isEmpty(backorders)) { 
 | 
            return; 
 | 
        } 
 | 
        for (Backorder backorder: backorders) { 
 | 
            this.updateById(backorder); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Backorder findById(Integer id) { 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); 
 | 
        } 
 | 
        Backorder model = new Backorder(); 
 | 
        model.setId(id); 
 | 
        model.setDeleted(Constants.ZERO); 
 | 
        model.setRootDepartId(user.getRootDepartment().getId()); 
 | 
        model = backorderMapper.selectByModel(model); 
 | 
  
 | 
        if(model == null){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "对不起,该数据不存在!"); 
 | 
        } 
 | 
        List<DepartmentExtListVO> allDepartList = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_DEPART_LIST_KEY+user.getCompany().getId(),ArrayList.class); 
 | 
        //用户信息 
 | 
        initProUser(user,model,allDepartList); 
 | 
        BackOrderDetail d = new BackOrderDetail(); 
 | 
        d.setBackorderId(model.getId()); 
 | 
        d.setDeleted(Constants.ZERO); 
 | 
        List<BackOrderDetail> detailList = backOrderDetailMapper.selectList(d); 
 | 
        model.setDetailList(detailList); 
 | 
  
 | 
        model.setRecordList(getRecordListFromDingding(user,model.getInstanceId())); 
 | 
        return model; 
 | 
    } 
 | 
  
 | 
    private List<DdInstanceStatusVO> getRecordListFromDingding(LoginUserInfo user,String instanceId) { 
 | 
        List<DdInstanceStatusVO> list = new ArrayList<>(); 
 | 
        try { 
 | 
            List<OapiProcessinstanceGetResponse.OperationRecordsVo> result = DingDingUtil.getProcessInstance(companyExtService.getDingdingToken(user.getCompany().getId())  , instanceId); 
 | 
            if(result!=null){ 
 | 
                for(OapiProcessinstanceGetResponse.OperationRecordsVo r : result){ 
 | 
                    DdInstanceStatusVO t = new DdInstanceStatusVO(); 
 | 
                    t.setUserid(r.getUserid()); 
 | 
                    t.setDate(r.getDate()); 
 | 
                    t.setOperationResult(r.getOperationResult()); 
 | 
                    t.setOperationType(r.getOperationType()); 
 | 
                    t.setRemark(r.getRemark()); 
 | 
                    t.setUserModel(getUserModelByDduserId(r.getUserid(),user)); 
 | 
                    list.add(t); 
 | 
                } 
 | 
            } 
 | 
        } catch (Exception e) { 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,发起钉钉审批失败,请稍后重试!"); 
 | 
        } 
 | 
        return list; 
 | 
    } 
 | 
  
 | 
    private CompanyUser getUserModelByDduserId(String userid, LoginUserInfo user) { 
 | 
        CompanyUser u = new CompanyUser(); 
 | 
        u.setRootDepartId(user.getRootDepartment().getId()); 
 | 
        u.setDeleted(Constants.ZERO); 
 | 
        u.setDdUserid(userid); 
 | 
        u = companyUserExtMapper.selectOne(new QueryWrapper<>(u).last(" limit 1")); 
 | 
        return u; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Backorder findOne(Backorder backorder) { 
 | 
        QueryWrapper<Backorder> wrapper = new QueryWrapper<>(backorder); 
 | 
        return backorderMapper.selectOne(wrapper); 
 | 
    } 
 | 
    @Override 
 | 
    public void dealProcessInstance(String processInstanceId,String type,String result) { 
 | 
        if(StringUtils.isBlank(processInstanceId)){ 
 | 
            return; 
 | 
        } 
 | 
        if(StringUtils.equals(type,"finish" ) || StringUtils.equals(type,"terminate" )){ 
 | 
            //如果是审批结束或者终止 
 | 
            Backorder backorder  = new Backorder(); 
 | 
            backorder.setInstanceId(processInstanceId); 
 | 
            backorder=  backorderMapper.selectByModel(backorder); 
 | 
            if(backorder!=null){ 
 | 
                Backorder model  = new Backorder(); 
 | 
                model.setId(backorder.getId()); 
 | 
                model.setUpdateTime(DateUtil.getCurrentDate()); 
 | 
                if(StringUtils.equals(type,"finish" ) ){ 
 | 
                    //审批正常结束 
 | 
                    if(StringUtils.equals(result,"agree" ) ){ 
 | 
                        //审批通过agree 
 | 
                        model.setStatus(Constants.BACKORDER_STATUS.yes); 
 | 
                        //生成生产计划 
 | 
                        if(Constants.equalsInteger(backorder.getDeleted(),Constants.ZERO) 
 | 
                                && Constants.equalsInteger(backorder.getStatus(),Constants.BACKORDER_STATUS.ing)){ 
 | 
                            BackOrderDetail dModel = new BackOrderDetail(); 
 | 
                            dModel.setBackorderId(backorder.getId()); 
 | 
                            dModel.setDeleted(Constants.ZERO); 
 | 
                            List<BackOrderDetail> details = backOrderDetailMapper.selectList(dModel); 
 | 
                            if(details!=null){ 
 | 
                                for(BackOrderDetail d : details){ 
 | 
                                    UpdateWrapper updateWrapper = new UpdateWrapper(); 
 | 
                                    updateWrapper.eq("ID",d.getApplianceId()); 
 | 
                                    updateWrapper.set("BACKORDER_ID",backorder.getId()); 
 | 
                                    updateWrapper.set("UPDATE_TIME",DateUtil.getCurrentDate()); 
 | 
                                    if(!Constants.equalsInteger(backorder.getType(),Constants.BACKORDER_TYPE.scrap)){ 
 | 
                                        updateWrapper.set("BACK_PROCEDURE_ID",backorder.getBackProcedureId()); 
 | 
                                        updateWrapper.set("SALEORDER_ID",backorder.getSaleorderId()); 
 | 
                                    } 
 | 
                                    appliancesExtMapper.update(null,updateWrapper); 
 | 
                                } 
 | 
                            } 
 | 
                            if(Constants.equalsInteger(backorder.getType(),Constants.BACKORDER_TYPE.scrap)){ 
 | 
                                //报废处理 
 | 
                                Department  d = departmentExtMapper.selectById(backorder.getRootDepartId()); 
 | 
                                if(d!=null){ 
 | 
                                    CompanyExtListVO com = companyExtService.getModelById(d.getCompanyId()); 
 | 
                                    wTransferService.dealScrapApply(backorder,com); 
 | 
                                } 
 | 
                            }else{ 
 | 
                                Plans p = new Plans(); 
 | 
                                p.setMaterialId(backorder.getMaterialId()); 
 | 
                                p.setDeleted(Constants.ZERO); 
 | 
                                p.setCreateUser(backorder.getCreateUser()); 
 | 
                                p.setUserId(backorder.getCreateUser()); 
 | 
                                p.setCreateTime(DateUtil.getCurrentDate()); 
 | 
                                //从返修单取批次号 
 | 
                                p.setBatch(backorder.getBatch()); 
 | 
//                                p.setBatch(plansExtService.getNextBatch(backorder.getCompanyId())); 
 | 
                                p.setStatus(Constants.PLAN_STATUS.create); 
 | 
                                p.setRootDepartId(backorder.getRootDepartId()); 
 | 
                                p.setDepartId(backorder.getOrderDepartId()); 
 | 
                                p.setUnitId(backorder.getUnitId()); 
 | 
                                p.setType(Constants.PLAN_TYPE.back); 
 | 
                                p.setBackorderId(backorder.getId()); 
 | 
                                p.setPlanDate(backorder.getPlanDate()); 
 | 
                                p.setNum(Constants.formatBigdecimal(backorder.getNum()).intValue()); 
 | 
                                p.setProcedureId(backorder.getBackProcedureId()); 
 | 
                                p.setFactoryId(backorder.getFactoryId()); 
 | 
                                plansExtService.createDirect(p); 
 | 
                            } 
 | 
  
 | 
                        } 
 | 
                    }else{ 
 | 
                        //审批不通过refuse 
 | 
                        model.setStatus(Constants.BACKORDER_STATUS.no); 
 | 
                    } 
 | 
                }else{ 
 | 
  
 | 
                    model.setStatus(Constants.BACKORDER_STATUS.stop); 
 | 
                } 
 | 
                //审批终止 
 | 
                UpdateWrapper updateWrapper = new UpdateWrapper(); 
 | 
                updateWrapper.eq("ID",model.getId()); 
 | 
                updateWrapper.set("STATUS",model.getStatus()); 
 | 
                updateWrapper.set("UPDATE_TIME",DateUtil.getCurrentDate()); 
 | 
                backorderMapper.update(null,updateWrapper); 
 | 
//                backorderMapper.updateById(model); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<Backorder> findList(Backorder backorder) { 
 | 
        QueryWrapper<Backorder> wrapper = new QueryWrapper<>(backorder); 
 | 
        return backorderMapper.selectList(wrapper); 
 | 
    } 
 | 
    @Override 
 | 
    public synchronized  String  getNextCode(Integer comId ){ 
 | 
        String prefix =   DateUtil.getDate(new Date(),"yyyyMMdd") +"-"; 
 | 
        Integer countNum  = RedisUtil.getObject(redisTemplate, Constants.RedisKeys.COM_BACKORDER_CODE_KEY+comId,Integer.class); 
 | 
        countNum = Constants.formatIntegerNum(countNum)+1; 
 | 
        //更新缓存 
 | 
        RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_BACKORDER_CODE_KEY+comId,countNum); 
 | 
        String nextIndex =Integer.toString( countNum); 
 | 
        return prefix + StringUtils.leftPad(nextIndex,4,"0"); 
 | 
    } 
 | 
    @Override 
 | 
    public PageData<Backorder> findPageNew(PageWrap<Backorder> pageWrap) { 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); 
 | 
        } 
 | 
        //只能查看当前根组织的数据 
 | 
        pageWrap.getModel().setDeleted(Constants.ZERO); 
 | 
        pageWrap.getModel().setRootDepartId(user.getRootDepartment().getId()); 
 | 
        //只能查看当前根组织的数据 
 | 
        pageWrap.getModel().setRootDepartId(user.getRootDepartment().getId()); 
 | 
        pageWrap.getModel().setOrderDepartId(user.getCurComDepartment().getId()); 
 | 
        //数据权限 
 | 
        List<Integer> dataPermission = user.getDepartPermissionList(); 
 | 
        if(dataPermission!=null){ 
 | 
            pageWrap.getModel().setCreateUser(user.getId()); 
 | 
            pageWrap.getModel().setDepartIds(dataPermission); 
 | 
      /*      if(dataPermission.size() == 0){ 
 | 
                //只能看自己的 
 | 
                pageWrap.getModel().setCreateUser(user.getId()); 
 | 
            }else{ 
 | 
                //否则走数据权限 
 | 
                pageWrap.getModel().setDepartIds(dataPermission); 
 | 
            }*/ 
 | 
        } 
 | 
        PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        List<Backorder> result = backorderMapper.selectList(pageWrap.getModel()); 
 | 
        if(result!=null){ 
 | 
            List<DepartmentExtListVO> allDepartList = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_DEPART_LIST_KEY+user.getCompany().getId(),ArrayList.class); 
 | 
            for(Backorder w : result){ 
 | 
                initProUser(user,w,allDepartList); 
 | 
            } 
 | 
        } 
 | 
        return PageData.from(new PageInfo<>(result)); 
 | 
    } 
 | 
    private void initProUser(LoginUserInfo user, Backorder data, List<DepartmentExtListVO> allDepartList) { 
 | 
        if(data.getCreateUser() ==null){ 
 | 
            return; 
 | 
        } 
 | 
        CompanyUser query=new CompanyUser(); 
 | 
        query.setUserId(data.getCreateUser()); 
 | 
        query.setRootDepartId(user.getRootDepartment().getId()); 
 | 
        query.setDeleted(Constants.ZERO); 
 | 
        CompanyUser comp= companyUserExtMapper.selectOne(new QueryWrapper<>(query).last(" limit 1")); 
 | 
        if(comp!=null){ 
 | 
            data.setCreateUserName(comp.getName()); 
 | 
            DepartmentExtListVO d = departmentExtService.getModelById(user.getCompany().getId(),comp.getDepartmentId(),allDepartList); 
 | 
            String dName =(d==null?"":StringUtils.defaultString(d.getName(),"")); 
 | 
            data.setDepartmentName(dName); 
 | 
        } 
 | 
    } 
 | 
    @Override 
 | 
    public PageData<Backorder> findPage(PageWrap<Backorder> pageWrap) { 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); 
 | 
        } 
 | 
        //只能查看当前根组织的数据 
 | 
        pageWrap.getModel().setDeleted(Constants.ZERO); 
 | 
        pageWrap.getModel().setRootDepartId(user.getRootDepartment().getId()); 
 | 
        pageWrap.getModel().setOrderDepartId(user.getCurComDepartment().getId()); 
 | 
        IPage<Backorder> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        QueryWrapper<Backorder> queryWrapper = new QueryWrapper<>(); 
 | 
        Utils.MP.blankToNull(pageWrap.getModel()); 
 | 
        if (pageWrap.getModel().getId() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getId, pageWrap.getModel().getId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getDeleted() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getDeleted, pageWrap.getModel().getDeleted()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getCreateUser() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getCreateUser, pageWrap.getModel().getCreateUser()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getCreateTime() != null) { 
 | 
            queryWrapper.lambda().ge(Backorder::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime())); 
 | 
            queryWrapper.lambda().le(Backorder::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime())); 
 | 
        } 
 | 
        if (pageWrap.getModel().getUpdateUser() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getUpdateUser, pageWrap.getModel().getUpdateUser()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getUpdateTime() != null) { 
 | 
            queryWrapper.lambda().ge(Backorder::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime())); 
 | 
            queryWrapper.lambda().le(Backorder::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime())); 
 | 
        } 
 | 
        if (pageWrap.getModel().getRemark() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getRemark, pageWrap.getModel().getRemark()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getRootDepartId() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getRootDepartId, pageWrap.getModel().getRootDepartId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getOrderDepartId() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getOrderDepartId, pageWrap.getModel().getOrderDepartId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getProcedureId() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getProcedureId, pageWrap.getModel().getProcedureId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getMaterialId() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getMaterialId, pageWrap.getModel().getMaterialId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getBatch() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getBatch, pageWrap.getModel().getBatch()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getType() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getType, pageWrap.getModel().getType()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getPlanDate() != null) { 
 | 
            queryWrapper.lambda().ge(Backorder::getPlanDate, Utils.Date.getStart(pageWrap.getModel().getPlanDate())); 
 | 
            queryWrapper.lambda().le(Backorder::getPlanDate, Utils.Date.getEnd(pageWrap.getModel().getPlanDate())); 
 | 
        } 
 | 
        if (pageWrap.getModel().getBackProcedureId() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getBackProcedureId, pageWrap.getModel().getBackProcedureId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getContent() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getContent, pageWrap.getModel().getContent()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getStatus() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getStatus, pageWrap.getModel().getStatus()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getInstanceId() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getInstanceId, pageWrap.getModel().getInstanceId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getCode() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getCode, pageWrap.getModel().getCode()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getNum() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getNum, pageWrap.getModel().getNum()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getSaleorderId() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getSaleorderId, pageWrap.getModel().getSaleorderId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getWarehouseId() != null) { 
 | 
            queryWrapper.lambda().eq(Backorder::getWarehouseId, pageWrap.getModel().getWarehouseId()); 
 | 
        } 
 | 
        for(PageWrap.SortData sortData: pageWrap.getSorts()) { 
 | 
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { 
 | 
                queryWrapper.orderByDesc(sortData.getProperty()); 
 | 
            } else { 
 | 
                queryWrapper.orderByAsc(sortData.getProperty()); 
 | 
            } 
 | 
        } 
 | 
        return PageData.from(backorderMapper.selectPage(page, queryWrapper)); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public long count(Backorder backorder) { 
 | 
        QueryWrapper<Backorder> wrapper = new QueryWrapper<>(backorder); 
 | 
        return backorderMapper.selectCount(wrapper); 
 | 
    } 
 | 
} 
 |