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 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 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 idList ) { List 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 deleteWrapper = new UpdateWrapper<>(backorder); backorderMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } backorderMapper.deleteBatchIds(ids); } @Override public void updateById(Backorder backorder) { backorderMapper.updateById(backorder); } @Override public void updateByIdInBatch(List 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 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 detailList = backOrderDetailMapper.selectList(d); model.setDetailList(detailList); model.setRecordList(getRecordListFromDingding(user,model.getInstanceId())); return model; } private List getRecordListFromDingding(LoginUserInfo user,String instanceId) { List list = new ArrayList<>(); try { List 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 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 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 findList(Backorder backorder) { QueryWrapper 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 findPageNew(PageWrap 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 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 result = backorderMapper.selectList(pageWrap.getModel()); if(result!=null){ List 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 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 findPage(PageWrap 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 page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper 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 wrapper = new QueryWrapper<>(backorder); return backorderMapper.selectCount(wrapper); } }