1.任务下发失败提醒
2.针对订单出库循环堵塞问题优化
| | |
| | | }else if (!Objects.isNull(params.getType()) && params.getType().equals("move")) { |
| | | url = createLocMoveTask; |
| | | } |
| | | String response; |
| | | String response = null; |
| | | R r = R.ok(); |
| | | try { |
| | | log.info("下发搬运任务给wcs="+JSON.toJSONString(params)); |
| | |
| | | } |
| | | //TODO 上报是否成功 |
| | | }else { |
| | | r =R.error(); |
| | | String msg = jsonObject.getString("msg"); |
| | | if (Cools.isEmpty(msg)) { |
| | | msg = jsonObject.getString("message"); |
| | | } |
| | | r = R.error(Cools.isEmpty(msg) ? "下发任务失败" : msg); |
| | | } |
| | | } catch (IOException e) { |
| | | throw new RuntimeException(e); |
| | | log.error("下发任务给wcs异常, request={}", JSON.toJSONString(params), e); |
| | | return R.error("调用WCS接口失败:" + e.getMessage()); |
| | | } catch (Exception e) { |
| | | log.error("解析WCS下发结果异常, request={}, response={}", JSON.toJSONString(params), response, e); |
| | | return R.error("WCS返回结果异常:" + e.getMessage()); |
| | | } |
| | | return r; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 上报锁定/释放库位信息 |
| | | * |
| | |
| | | url = MesConstant.RELEASE_LOCS_URL; |
| | | } |
| | | } |
| | | String response; |
| | | String response = null; |
| | | try { |
| | | response = new HttpHandler.Builder() |
| | | .setUri(MesConstant.URL) |
| | |
| | | return locAround; |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | import com.zy.common.model.LocDto; |
| | | import com.zy.common.model.TaskDto; |
| | | import com.zy.common.web.BaseController; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | |
| | | * Created by vincent on 2022/3/26 |
| | | */ |
| | | |
| | | @Slf4j |
| | | @RestController |
| | | public class OutController extends BaseController { |
| | | |
| | |
| | | |
| | | @PostMapping("/out/pakout/auth") |
| | | @ManagerAuth(memo = "订单出库") |
| | | @Transactional |
| | | public synchronized R pakout(@RequestBody List<LocDto> locDtos) throws InterruptedException { |
| | | if (Cools.isEmpty(locDtos)) { |
| | | return R.parse(BaseRes.PARAM); |
| | |
| | | List<TaskDto> taskDtos = new ArrayList<>(); |
| | | // 根据 (库位 & 出库站) 分组; 理想状态:一组为一次出库任务 |
| | | for (LocDto locDto : locDtos) { |
| | | if (locDto.isLack()) { continue; } |
| | | if (locDto.isLack()) { |
| | | continue; |
| | | } |
| | | TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto, locDto.getStandby1()); |
| | | if (TaskDto.has(taskDtos, taskDto)) { |
| | | TaskDto dto = TaskDto.find(taskDtos, taskDto); |
| | |
| | | } |
| | | } |
| | | // ----------------------------------------------------------------------------------------------- |
| | | int failCount = 0; |
| | | for (TaskDto taskDto : taskDtos) { |
| | | BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo()); |
| | | if (!Objects.isNull(taskDto.getDeviceNo())) { |
| | | //生成出库任务 |
| | | workService.stockOut(staNo, taskDto, taskDto.getDeviceNo(), getUserId()); |
| | | } else { |
| | | workService.stockOut(staNo, taskDto, null, getUserId()); |
| | | if (!stockOutSafely(taskDto, getUserId(), "手动订单出库")) { |
| | | failCount++; |
| | | } |
| | | } |
| | | if (failCount > 0) { |
| | | return R.ok("部分出库任务已生成,成功" + (taskDtos.size() - failCount) + "条,失败" + failCount + "条,请查看日志"); |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | private boolean stockOutSafely(TaskDto taskDto, Long userId, String scene) { |
| | | try { |
| | | BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo()); |
| | | workService.stockOut(staNo, taskDto, taskDto.getDeviceNo(), userId); |
| | | return true; |
| | | } catch (Exception e) { |
| | | log.error("{}失败[locNo={}, staNo={}, deviceNo={}, orderNos={}],原因: {}", |
| | | scene, |
| | | taskDto.getLocNo(), |
| | | taskDto.getStaNo(), |
| | | taskDto.getDeviceNo(), |
| | | collectOrderNos(taskDto), |
| | | getErrorMessage(e)); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | private String collectOrderNos(TaskDto taskDto) { |
| | | Set<String> orderNos = new LinkedHashSet<>(); |
| | | for (LocDto locDto : taskDto.getLocDtos()) { |
| | | if (!Cools.isEmpty(locDto.getOrderNo())) { |
| | | orderNos.add(locDto.getOrderNo()); |
| | | } |
| | | } |
| | | return orderNos.toString(); |
| | | } |
| | | |
| | | private String getErrorMessage(Exception e) { |
| | | return Cools.isEmpty(e.getMessage()) ? e.getClass().getSimpleName() : e.getMessage(); |
| | | } |
| | | } |
| | |
| | | import org.apache.ibatis.annotations.Select; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | |
| | | , @Param("standby1")String standby1, @Param("standby2")String standby2, @Param("standby3")String standby3 |
| | | , @Param("boxType1")String boxType1, @Param("boxType2")String boxType2, @Param("boxType3")String boxType3, @Param("crnNo") Integer crnNo); |
| | | |
| | | int updatePublishError(@Param("wrkNo") Integer wrkNo, |
| | | @Param("updMk") String updMk, |
| | | @Param("errorTime") Date errorTime, |
| | | @Param("errorMemo") String errorMemo); |
| | | |
| | | } |
| | |
| | | import com.zy.asrs.entity.WrkMast; |
| | | import com.zy.asrs.entity.result.FindLocNoAttributeVo; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | public interface WrkMastService extends IService<WrkMast> { |
| | |
| | | |
| | | List<WrkMast> selectWrkMastWrkDetl(Integer ioType, FindLocNoAttributeVo findLocNoAttributeVo, Integer crnNo); |
| | | |
| | | int updatePublishError(Integer wrkNo, String updMk, Date errorTime, String errorMemo); |
| | | |
| | | } |
| | |
| | | .eq("dev_no", basDevice.getType()).orderBy("order_no")); |
| | | |
| | | if (Objects.isNull(binds)) { |
| | | log.error("没有可用机台"); |
| | | log.error(deviceNo+"---"+basDevice.getType()+"--没有可用机台"); |
| | | return; |
| | | } |
| | | // |
| | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | @Slf4j |
| | |
| | | ,findLocNoAttributeVo.getBoxType1(),findLocNoAttributeVo.getBoxType2(),findLocNoAttributeVo.getBoxType3() |
| | | ,crnNo); |
| | | } |
| | | |
| | | @Override |
| | | public int updatePublishError(Integer wrkNo, String updMk, Date errorTime, String errorMemo) { |
| | | return this.baseMapper.updatePublishError(wrkNo, updMk, errorTime, errorMemo); |
| | | } |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.common.R; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | |
| | | List<TaskDto> taskDtos = new ArrayList<>(); |
| | | // 根据 (库位 & 出库站) 分组; 理想状态:一组为一次出库任务 |
| | | for (LocDto locDto : locDtos) { |
| | | if (locDto.isLack()) { continue; } |
| | | if (locDto.isLack()) { |
| | | continue; |
| | | } |
| | | TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto, locDto.getStandby1()); |
| | | if (TaskDto.has(taskDtos, taskDto)) { |
| | | TaskDto dto = TaskDto.find(taskDtos, taskDto); |
| | |
| | | } |
| | | } |
| | | // ----------------------------------------------------------------------------------------------- |
| | | int failCount = 0; |
| | | for (TaskDto taskDto : taskDtos) { |
| | | BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo()); |
| | | if (!Objects.isNull(taskDto.getDeviceNo())) { |
| | | //生成出库任务 |
| | | workService.stockOut(staNo, taskDto, taskDto.getDeviceNo(), 9995L); |
| | | } else { |
| | | workService.stockOut(staNo, taskDto, null, 9995L); |
| | | if (!stockOutSafely(taskDto, 9995L, "自动订单出库")) { |
| | | failCount++; |
| | | } |
| | | } |
| | | if (failCount > 0) { |
| | | log.warn("自动订单出库部分失败[orderNo={}],成功{}条,失败{}条", |
| | | order.getOrderNo(), taskDtos.size() - failCount, failCount); |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | private boolean stockOutSafely(TaskDto taskDto, Long userId, String scene) { |
| | | try { |
| | | BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo()); |
| | | workService.stockOut(staNo, taskDto, taskDto.getDeviceNo(), userId); |
| | | return true; |
| | | } catch (Exception e) { |
| | | log.error("{}失败[locNo={}, staNo={}, deviceNo={}, orderNos={}],原因: {}", |
| | | scene, |
| | | taskDto.getLocNo(), |
| | | taskDto.getStaNo(), |
| | | taskDto.getDeviceNo(), |
| | | collectOrderNos(taskDto), |
| | | getErrorMessage(e)); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | private String collectOrderNos(TaskDto taskDto) { |
| | | Set<String> orderNos = new LinkedHashSet<>(); |
| | | for (LocDto locDto : taskDto.getLocDtos()) { |
| | | if (!Cools.isEmpty(locDto.getOrderNo())) { |
| | | orderNos.add(locDto.getOrderNo()); |
| | | } |
| | | } |
| | | return orderNos.toString(); |
| | | } |
| | | |
| | | private String getErrorMessage(Exception e) { |
| | | return Cools.isEmpty(e.getMessage()) ? e.getClass().getSimpleName() : e.getMessage(); |
| | | } |
| | | } |
| | |
| | | import com.zy.api.service.WcsApiService; |
| | | import com.zy.asrs.entity.LocAroundBind; |
| | | import com.zy.asrs.entity.LocMast; |
| | | import com.zy.asrs.entity.Task; |
| | | import com.zy.asrs.entity.WrkMast; |
| | | import com.zy.asrs.mapper.TaskMapper; |
| | | import com.zy.asrs.service.LocAroundBindService; |
| | | import com.zy.asrs.service.TaskService; |
| | | import com.zy.asrs.service.WrkMastService; |
| | |
| | | } |
| | | Collections.shuffle(wrkMasts); |
| | | for (WrkMast wrkMast : wrkMasts) { |
| | | try { |
| | | //查看下发任务是否为冻结库位,是冻结库位则跳过下发任务 |
| | | LocAroundBind locAroundBind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>() |
| | | .eq("b_loc_no", wrkMast.getLocNo()) |
| | |
| | | .eq("b_loc_no", wrkMast.getSourceLocNo()) |
| | | .eq("freeze", 1)); |
| | | if (!Cools.isEmpty(locAroundBind)) { |
| | | markPublishError(wrkMast.getWrkNo(), String.valueOf("源库位被冻结")); |
| | | continue; |
| | | } |
| | | }else { |
| | | markPublishError(wrkMast.getWrkNo(), String.valueOf("目标库位被冻结")); |
| | | continue; |
| | | } |
| | | // Integer crnNo = wrkMast.getCrnNo(); |
| | |
| | | |
| | | String wcsSourceLocNo = Cools.isEmpty(wrkMast.getSourceLocNo()) ? "" : Utils.WMSLocToWCSLoc(wrkMast.getSourceLocNo()); |
| | | String wcsLocNo = Cools.isEmpty(wrkMast.getLocNo()) ? "" : Utils.WMSLocToWCSLoc(wrkMast.getLocNo()); |
| | | Integer taskPri = wrkMast.getIoPri() == null ? null : wrkMast.getIoPri().intValue(); |
| | | WorkTaskParams params = new WorkTaskParams(); |
| | | //出库和移库 |
| | | if((wrkMast.getIoType()==101||wrkMast.getIoType()==110)&&!Cools.isEmpty(wrkMast.getStaNo())&& !wrkMast.getStaNo().equals("0")) { |
| | |
| | | .setSourceLocNo(wcsSourceLocNo) |
| | | .setLocNo(wcsLocNo) |
| | | .setStaNo(wrkMast.getStaNo()) |
| | | .setTaskPri(wrkMast.getIoPri().intValue()) |
| | | .setTaskPri(taskPri) |
| | | .setBarcode(wrkMast.getBarcode()); |
| | | }else if(wrkMast.getIoType()==2&& !Cools.isEmpty(wrkMast.getSourceStaNo())){ |
| | | params.setType("in") |
| | |
| | | .setSourceStaNo(wrkMast.getSourceStaNo()) |
| | | .setStaNo(wrkMast.getStaNo()) |
| | | .setLocNo(wcsLocNo) |
| | | .setTaskPri(wrkMast.getIoPri().intValue()) |
| | | .setTaskPri(taskPri) |
| | | .setBarcode(wrkMast.getBarcode()); |
| | | } else { |
| | | params.setType("move") |
| | |
| | | .setBarcode(wrkMast.getBarcode()); |
| | | } |
| | | R r = wcsApiService.pubWrkToWcs(params); |
| | | if (r.get("code").equals(200)){ |
| | | if (isSuccess(r)) { |
| | | clearPublishError(wrkMast.getWrkNo()); |
| | | break; |
| | | } |
| | | }; |
| | | markPublishError(wrkMast.getWrkNo(), String.valueOf(r.get("msg"))); |
| | | } catch (Exception e) { |
| | | log.error("工作档[wrkNo={}]下发任务异常", wrkMast.getWrkNo(), e); |
| | | markPublishError(wrkMast.getWrkNo(), e.getMessage()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private boolean isSuccess(R r) { |
| | | return r != null && "200".equals(String.valueOf(r.get("code"))); |
| | | } |
| | | |
| | | private void markPublishError(Integer wrkNo, String msg) { |
| | | if (wrkMastService.updatePublishError(wrkNo, "X", new Date(), buildPublishErrorMsg(msg)) <= 0) { |
| | | log.error("工作档[wrkNo={}]回写下发异常失败", wrkNo); |
| | | } |
| | | } |
| | | |
| | | private void clearPublishError(Integer wrkNo) { |
| | | if (wrkMastService.updatePublishError(wrkNo, null, null, null) <= 0) { |
| | | log.error("工作档[wrkNo={}]清理下发异常失败", wrkNo); |
| | | } |
| | | } |
| | | |
| | | private String buildPublishErrorMsg(String msg) { |
| | | return Cools.isEmpty(msg) || "null".equalsIgnoreCase(msg) ? "下发任务失败" : "下发任务失败:" + msg; |
| | | } |
| | | |
| | | /** |
| | |
| | | //此程序用于优化堆垛机异常时的运行时间 |
| | | for (int i = times; i < crnNumber * 2; i++) { |
| | | int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber); |
| | | curRow = locNecessaryParameters[1]; |
| | | crnNo = locNecessaryParameters[2]; |
| | | if (basCrnpService.checkSiteError(crnNo, true)) { |
| | | rowCount = locNecessaryParameters[0]; |
| | | nearRow = locNecessaryParameters[3]; |
| | | List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>() |
| | | .eq("row1", nearRow) |
| | |
| | | .eq("whs_type", rowLastnoType.getType().longValue())); |
| | | int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).le("io_type", 100)); |
| | | if (locMasts.size() - crnCountO <= 2) { |
| | | if(curRow+2==7){ |
| | | |
| | | } |
| | | log.error(crnNo + "号堆垛机没有空库位!!! 尺寸规格: {}, 轮询次数:{}", JSON.toJSONString(locTypeDto), times); |
| | | nearRow = 0; |
| | | times++; |
| | |
| | | } |
| | | if (nearRow == 0) { |
| | | throw new CoolException("无可用堆垛机"); |
| | | } |
| | | |
| | | boolean signRule1 = false; |
| | | boolean signRule2 = false; |
| | | |
| | | |
| | | if (Utils.BooleanWhsTypeStaIoType(rowLastno)) { |
| | | // 靠近摆放规则 --- 同天同规格物料 //分离版 |
| | | if (!Cools.isEmpty(findLocNoAttributeVo.getMatnr()) && staDescId == 1) { |
| | | signRule1 = true; |
| | | } |
| | | // 靠近摆放规则 --- 同天同规格物料 //互通版 |
| | | if (!Cools.isEmpty(findLocNoAttributeVo.getMatnr()) && staDescId == 1) { |
| | | signRule2 = true; |
| | | } |
| | | |
| | | if (!Cools.isEmpty(findLocNoAttributeVo.getMatnr()) && (staDescId == 11 || staDescId == 111)) { |
| | | signRule1 = true; |
| | | } |
| | | } |
| | | |
| | | if (signRule1) { |
| | | if (nearRow != curRow) { |
| | | List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>() |
| | | .eq("row1", nearRow) |
| | | .eq("frozen", 0).eq("deleted", 0) |
| | | .eq("loc_sts", "O") |
| | | .eq("whs_type", rowLastnoType.getType().longValue())); |
| | | for (LocMast locMast1 : locMasts) { |
| | | //获取巷道 |
| | | // List<String> groupOutsideLocCrn = Utils.getGroupOutLocCrn(curRow,nearRow,locMast1.getLocNo(), curRow>nearRow); |
| | | // LocMast locMastGro = locMastService.selectById(wrkMast.getLocNo()); |
| | | //获取目标库位所在巷道最浅非空库位 |
| | | LocMast locMastF = locMastService.selectLocByLocStsPakInF(curRow, nearRow, locMast1, rowLastnoType.getType().longValue()); |
| | | if (!Cools.isEmpty(locMastF) && locMastF.getLocSts().equals("F")) { |
| | | LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMastF.getLocNo())); |
| | | if (!Cools.isEmpty(locDetl) && findLocNoAttributeVo.beSimilar(locDetl)) { |
| | | //获取目标库位所在巷道最深空库位 |
| | | locMast = locMastService.selectLocByLocStsPakInO(curRow, nearRow, locMast1, rowLastnoType.getType().longValue()); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } else if (signRule2) { |
| | | List<String> locNos = locDetlService.getSameDetlToday(findLocNoAttributeVo.getMatnr(), sRow, eRow); |
| | | for (String locNo : locNos) { |
| | | if (Utils.isShallowLoc(slaveProperties, locNo)) { |
| | | continue; |
| | | } |
| | | String shallowLocNo = Utils.getShallowLoc(slaveProperties, locNo); |
| | | // 检测目标库位是否为空库位 |
| | | LocMast shallowLoc = locMastService.selectById(shallowLocNo); |
| | | if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) { |
| | | if (VersionUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) { |
| | | if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) { |
| | | locMast = shallowLoc; |
| | | crnNo = locMast.getCrnNo(); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // // 靠近摆放规则 --- 空托 //分离版 |
| | | // if (staDescId == 10 && Utils.BooleanWhsTypeStaIoType(whsType)) { |
| | | // List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O")); |
| | | // for (LocMast locMast1:locMasts){ |
| | | // if (VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) { |
| | | // continue; |
| | | // } |
| | | // String shallowLoc = Utils.getDeepLoc(slaveProperties,locMast1.getLocNo()); |
| | | // LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",shallowLoc)); |
| | | // if (!Cools.isEmpty(locMast2) && locMast2.getLocSts().equals("D")){ |
| | | // locMast = locMast1; |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | // 靠近摆放规则 --- 空托 //互通版 |
| | | if (staDescId == 10 && Utils.BooleanWhsTypeStaIoType(rowLastno)) { |
| | | List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>() |
| | | .eq("loc_sts", "D").eq("frozen", 0).eq("deleted", 0) |
| | | .ge("row1", sRow).le("row1", eRow).eq("whs_type", rowLastnoType.getType().longValue())); |
| | | if (!locMasts.isEmpty()) { |
| | | for (LocMast loc : locMasts) { |
| | | if (Utils.isShallowLoc(slaveProperties, loc.getLocNo())) { |
| | | continue; |
| | | } |
| | | String shallowLocNo = Utils.getShallowLoc(slaveProperties, loc.getLocNo()); |
| | | // 检测目标库位是否为空库位 |
| | | LocMast shallowLoc = locMastService.selectById(shallowLocNo); |
| | | if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) { |
| | | if (VersionUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) { |
| | | if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) { |
| | | locMast = shallowLoc; |
| | | crnNo = locMast.getCrnNo(); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | Wrapper<StaDesc> wrapper = null; |
| | |
| | | </choose> |
| | | </select> |
| | | |
| | | <update id="updatePublishError"> |
| | | update asr_wrk_mast |
| | | set upd_mk = #{updMk}, |
| | | error_time = #{errorTime}, |
| | | error_memo = #{errorMemo} |
| | | where wrk_no = #{wrkNo} |
| | | </update> |
| | | |
| | | </mapper> |
| | |
| | | ,{field: 'preHave', align: 'center',title: '先入品', hide: true} |
| | | ,{field: 'takeNone', align: 'center',title: '空操作', hide: true} |
| | | ,{field: 'isSuplus$', align: 'center', title: '回库类型', hide: false, width: 120} |
| | | ,{field: 'errorMemo', align: 'center',title: '下发/异常信息', minWidth: 220} |
| | | ,{field: 'modiUser$', align: 'center',title: '修改人员', hide:true} |
| | | ,{field: 'modiTime$', align: 'center',title: '修改时间', hide:true, width: 160} |
| | | ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:350} |
| | |
| | | $("#search").click(); |
| | | } |
| | | }); |
| | | |