diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/domain/query/PageQuery.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/domain/query/PageQuery.java index 91d8dd0d..61e88cc9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/domain/query/PageQuery.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/domain/query/PageQuery.java @@ -59,7 +59,7 @@ public class PageQuery implements Serializable { pageNum = DEFAULT_PAGE_NUM; } Page page = new Page<>(pageNum, pageSize); - if (StringUtils.isNotEmpty(sort)){ + if (StringUtils.isNotBlank(sort)){ String[] split = sort.split(","); for (int i = 0; i < (split.length & ~1); i=i+2) { String col = split[i]; @@ -79,13 +79,13 @@ public class PageQuery implements Serializable { pageNum = DEFAULT_PAGE_NUM; } Page page = new Page<>(pageNum, pageSize); - if (StringUtils.isNotEmpty(sort)){ + if (StringUtils.isNotBlank(sort)){ String[] split = sort.split(","); for (int i = 0; i < (split.length & ~1); i=i+2) { String col = split[i]; if ("id".equals(col)){ String mId = mappingId(r); - col = StringUtils.isNotEmpty(mId)?mId:col; + col = StringUtils.isNotBlank(mId)?mId:col; } OrderItem item = new OrderItem(); item.setColumn(col); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java index 295a21a3..c17cfef7 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java @@ -32,6 +32,8 @@ public enum AcsTaskEnum { TASK_PLOTTER_EMPTY("6","刻字机-呼叫空框"), TASK_WARP_MAC("7","包装机-叫料出库"), TASK_WARP_EMPTY("8","包装机-送空框"), + TASK_STRUCT_IN("9","入库-生产入库"), + TASK_STRUCT_OUT("10","出库-生产出库"), //回调状态 STATUS_START("1","执行中"), @@ -62,6 +64,7 @@ public enum AcsTaskEnum { AUTO_TASK_FINISHED_TYPE("1", "自动完成任务"), MANUAL_TASK_FINISHED_TYPE("2", "手动完成任务"), + ; private String code; private String desc; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/LevelEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/LevelEnum.java index c622d36d..88181670 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/LevelEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/LevelEnum.java @@ -8,7 +8,7 @@ public enum LevelEnum{ WARN, ERROR; public static LevelEnum checkLevel(String level){ - if (!StringUtils.isEmpty(level)){ + if (!StringUtils.isBlank(level)){ for (LevelEnum value : LevelEnum.values()) { if (value.name().equals(level)){ return value; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/config/DruidFilter.java b/mes/hd/nladmin-system/src/main/java/org/nl/config/DruidFilter.java index 9e483c84..7bd2ace5 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/config/DruidFilter.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/config/DruidFilter.java @@ -46,7 +46,7 @@ public class DruidFilter extends FilterEventAdapter { try { count=statement.getUpdateCount(); }catch (Exception ex){ } - if (StringUtils.isNotEmpty(traceId) && count>0) { + if (StringUtils.isNotBlank(traceId) && count>0) { if (size > 0) { Collection values = statement.getParameters().values(); List params = new ArrayList<>(); @@ -64,7 +64,7 @@ public class DruidFilter extends FilterEventAdapter { ResultSetProxy rs = super.statement_getResultSet(chain, statement); String executeSql = statement.getLastExecuteSql(); String traceId = MDC.get("traceId"); - if (StringUtils.isNotEmpty(traceId)){ + if (StringUtils.isNotBlank(traceId)){ int result = 0; if (rs != null) { ResultSetImpl rss = rs.getResultSetRaw().unwrap(ResultSetImpl.class); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/config/mybatis/CodeGenerator.java b/mes/hd/nladmin-system/src/main/java/org/nl/config/mybatis/CodeGenerator.java index 521de5de..bd8e5a07 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/config/mybatis/CodeGenerator.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/config/mybatis/CodeGenerator.java @@ -8,7 +8,7 @@ import com.baomidou.mybatisplus.generator.config.GlobalConfig; import com.baomidou.mybatisplus.generator.config.PackageConfig; import com.baomidou.mybatisplus.generator.config.StrategyConfig; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; -import org.springframework.util.StringUtils; +import org.apache.commons.lang3.StringUtils; import java.util.Scanner; @@ -26,7 +26,7 @@ public class CodeGenerator { System.out.println(help.toString()); if (scanner.hasNext()) { String ipt = scanner.next(); - if (!StringUtils.isEmpty(ipt)) { + if (!StringUtils.isBlank(ipt)) { return ipt; } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/logging/service/impl/EsLogServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/logging/service/impl/EsLogServiceImpl.java index 46c18b3e..68bf2d8d 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/modules/logging/service/impl/EsLogServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/modules/logging/service/impl/EsLogServiceImpl.java @@ -74,10 +74,10 @@ public class EsLogServiceImpl implements EsLogService { private void extractedParam(LogQuery logQuery, BoolQueryBuilder query) { - if (StringUtils.isNotEmpty(logQuery.getLogLevel())){ + if (StringUtils.isNotBlank(logQuery.getLogLevel())){ query.must().add(QueryBuilders.matchQuery("logLevel", LevelEnum.checkLevel(logQuery.getLogLevel()))); } - if (StringUtils.isNotEmpty(logQuery.getSystem())){ + if (StringUtils.isNotBlank(logQuery.getSystem())){ query.must().add(QueryBuilders.matchQuery("system", logQuery.getSystem())); } if (logQuery.getIsRequest()){ @@ -87,10 +87,10 @@ public class EsLogServiceImpl implements EsLogService { query.mustNot().add(QueryBuilders.wildcardQuery("logger","org.nl.modules.wql.core.engine.*")); } query.mustNot().add(QueryBuilders.matchPhraseQuery("logger","org.elasticsearch.client.RestClient")); - if (StringUtils.isNotEmpty(logQuery.getTraceId())){ + if (StringUtils.isNotBlank(logQuery.getTraceId())){ query.must().add(QueryBuilders.matchQuery("traceId", logQuery.getTraceId())); } - if (StringUtils.isNotEmpty(logQuery.getMessage())){ + if (StringUtils.isNotBlank(logQuery.getMessage())){ query.must().add(QueryBuilders.matchPhraseQuery("message", logQuery.getMessage())); } if (logQuery.getEndTime()!=null ){ @@ -107,7 +107,7 @@ public class EsLogServiceImpl implements EsLogService { public void clearLogs(LogQuery logQuery) { String system = logQuery.getSystem(); BoolQueryBuilder query = QueryBuilders.boolQuery(); - if (!StringUtils.isEmpty(system)){ + if (!StringUtils.isBlank(system)){ query.must().add(QueryBuilders.matchQuery("system", system)); } long time = DateUtil.offset(new Date(), DateField.DAY_OF_MONTH, -10).getTime(); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/system/service/dept/impl/SysDeptServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/system/service/dept/impl/SysDeptServiceImpl.java index 9f2a7301..21be663a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/system/service/dept/impl/SysDeptServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/system/service/dept/impl/SysDeptServiceImpl.java @@ -89,13 +89,13 @@ public class SysDeptServiceImpl extends ServiceImpl impl if (query.getPid() == null){ query.setPidIsNull(true); } - if (StringUtils.isNotEmpty(query.getName()) || query.getIsUsed()!=null){ + if (StringUtils.isNotBlank(query.getName()) || query.getIsUsed()!=null){ query.setPidIsNull(null); } } Page page = this.page(pageQuery.build(SysDept.class), query.build()); page.setRecords(CopyUtil.copyList(page.getRecords(), DeptVo.class)); - if (StringUtils.isNotEmpty(query.getName()) || query.getIsUsed()!=null){ + if (StringUtils.isNotBlank(query.getName()) || query.getIsUsed()!=null){ page.getRecords().forEach(a->((DeptVo)a).setHasChildren(false) ); } return page; @@ -104,7 +104,7 @@ public class SysDeptServiceImpl extends ServiceImpl impl @Override public void saveUserDeptRelation(String userId, Collection deptIds) { - if (StringUtils.isEmpty(userId) || CollectionUtils.isEmpty(deptIds)){ + if (StringUtils.isBlank(userId) || CollectionUtils.isEmpty(deptIds)){ return; } sysDeptMapper.saveDeptRelation(userId,deptIds); @@ -123,13 +123,13 @@ public class SysDeptServiceImpl extends ServiceImpl impl @Override @Transactional(rollbackFor = Exception.class) public void updateDept(SysDept dept) { - if (dept == null ||StringUtils.isEmpty(dept.getDeptId())){ + if (dept == null ||StringUtils.isBlank(dept.getDeptId())){ return; } this.updateById(dept); //删除节点信息 sysDeptMapper.updateSubCount(dept.getDeptId()); - if (StringUtils.isNotEmpty(dept.getPid())){ + if (StringUtils.isNotBlank(dept.getPid())){ sysDeptMapper.updateSubCount(dept.getPid()); } } @@ -147,14 +147,14 @@ public class SysDeptServiceImpl extends ServiceImpl impl for (String deptId : deptIds) { depts.add(deptId); String allChild = sysDeptMapper.findAllChild(deptId); - if (StringUtils.isNotEmpty(allChild)){ + if (StringUtils.isNotBlank(allChild)){ String[] split = allChild.split(","); depts.addAll(Arrays.asList(split)); } } this.remove(new QueryWrapper().in("dept_id", depts)); deptList.forEach(dept -> { - if (StringUtils.isNotEmpty(dept.getPid())){sysDeptMapper.updateSubCount(dept.getPid());} + if (StringUtils.isNotBlank(dept.getPid())){sysDeptMapper.updateSubCount(dept.getPid());} }); } @@ -179,7 +179,7 @@ public class SysDeptServiceImpl extends ServiceImpl impl dept.setCode(UUID.randomUUID().toString()); this.save(dept); // 清理缓存 - if (StringUtils.isNotEmpty(dept.getPid())){ + if (StringUtils.isNotBlank(dept.getPid())){ sysDeptMapper.updateSubCount(dept.getPid()); } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java index 5b623779..d898b21d 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java @@ -61,7 +61,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl @Override public List query(MenuQuery query, PageQuery page) { - if (StringUtils.isNotEmpty(query.getBlurry())){ + if (StringUtils.isNotBlank(query.getBlurry())){ query.setPid(null); } Page menuPage = this.page(page.build(SysMenu.class), query.build()); @@ -171,7 +171,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl baseMapper.untiedMenu(menu.getMenuId()); baseMapper.deleteById(menu.getMenuId()); String pid = menu.getPid(); - if (StringUtils.isEmpty(pid)){ + if (StringUtils.isBlank(pid)){ pids.add(menu.getMenuId()); } updateSubCnt(pid); @@ -189,7 +189,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl String allChild = baseMapper.findAllChild(menuId); List allChildIds = new ArrayList<>(); allChildIds.add(menuId); - if (StringUtils.isNotEmpty(allChild)){ + if (StringUtils.isNotBlank(allChild)){ allChildIds.addAll(Arrays.asList(allChild.split(","))); } @@ -205,7 +205,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl if (resources.getPid().equals("0")) { resources.setPid(null); - if (StringUtils.isNotEmpty(menu.getPid())){ + if (StringUtils.isNotBlank(menu.getPid())){ addSystemTypeDict(resources); } }else { @@ -390,7 +390,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl @Override public List buildMenus(String systemType) { Dict dict = sysDictMapper.getOne(new QueryWrapper().eq("code", DictConstantPool.DICT_SYS_CODE).eq("value", systemType)); - if (dict == null || StringUtils.isEmpty(dict.getPara1())){ + if (dict == null || StringUtils.isBlank(dict.getPara1())){ throw new BadRequestException("获取对应的系统菜单不存在"); } String pid = dict.getPara1(); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/system/service/role/impl/SysRoleServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/system/service/role/impl/SysRoleServiceImpl.java index 982ce1a4..6d7741ce 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/system/service/role/impl/SysRoleServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/system/service/role/impl/SysRoleServiceImpl.java @@ -138,7 +138,7 @@ public class SysRoleServiceImpl extends ServiceImpl impl @Override public void saveUserRoleRelation(String user, List roles) { - if (StringUtils.isEmpty(user) || CollectionUtils.isEmpty(roles)){ + if (StringUtils.isBlank(user) || CollectionUtils.isEmpty(roles)){ return; } roleMapper.saveRoleRelation(user,roles); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java index b7f5d2c4..b8e08d74 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java @@ -185,7 +185,7 @@ public class ISysUserServiceImpl extends ServiceImpl imp String oldPass = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey,passVo.getString("oldPass")); String newPass = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey,passVo.getString("newPass")); // 解密,得到字符密码 - if (StringUtils.isEmpty(oldPass)||StringUtils.isEmpty(newPass)){ + if (StringUtils.isBlank(oldPass)||StringUtils.isBlank(newPass)){ throw new BadRequestException("密码不能为空"); } SysUser user = this.getOne(new QueryWrapper().eq("username", SecurityUtils.getCurrentUsername())); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/utils/PointLockUtils.java b/mes/hd/nladmin-system/src/main/java/org/nl/utils/PointLockUtils.java index 5973388d..0721d0e6 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/utils/PointLockUtils.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/utils/PointLockUtils.java @@ -26,11 +26,11 @@ public class PointLockUtils { StringRedisTemplate redisTemplate; //点位预锁定 public void pointTryLock(String point){ - if (StringUtils.isEmpty(point)){ + if (StringUtils.isBlank(point)){ throw new BadRequestException("查询不到当前点位:NULL"); } String result = redisTemplate.opsForValue().get(POINT_PRE+point); - if (StringUtils.isNotEmpty(result)){ + if (StringUtils.isNotBlank(result)){ throw new BadRequestException("当前点位:"+point+"存在操作,请稍后再试"); }else { redisTemplate.opsForValue().set(POINT_PRE+point,"1",5, TimeUnit.SECONDS); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/utils/sys.xls b/mes/hd/nladmin-system/src/main/java/org/nl/utils/sys.xls index 168c440c..699768be 100644 Binary files a/mes/hd/nladmin-system/src/main/java/org/nl/utils/sys.xls and b/mes/hd/nladmin-system/src/main/java/org/nl/utils/sys.xls differ diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls index 6f7d3b3a..df34da59 100644 Binary files a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls and b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls differ diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java index 2ccf5c39..a8eb0377 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java @@ -56,7 +56,7 @@ public class AcsToWmsController { @SaIgnore public ResponseEntity receiveTaskIdToCacheLine(@RequestBody JSONObject whereJson) { //参数校验 - if(StringUtils.isEmpty(whereJson.getString("task_code")) || StringUtils.isEmpty(whereJson.getString("position_code"))) { + if(StringUtils.isBlank(whereJson.getString("task_code")) || StringUtils.isBlank(whereJson.getString("position_code"))) { throw new BizCoreException(ResultCode.VALIDATE_FAILED); } return new ResponseEntity<>(acsToWmsService.receiveTaskIdToCacheLine(whereJson), HttpStatus.OK); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index a06e61fe..9e63bbde 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -285,7 +285,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{ @Override public void feedcachelineVe(JSONObject param) { WQLObject positionTab = WQLObject.getWQLObject("sch_cacheline_position"); - if (param == null|| StringUtils.isEmpty(param.getString("device_code")) || StringUtils.isEmpty(param.getString("vehicle_code"))){ + if (param == null|| StringUtils.isBlank(param.getString("device_code")) || StringUtils.isBlank(param.getString("vehicle_code"))){ return; } String cachelineCode = param.getString("device_code"); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java index 6a7116e9..3ed95f36 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java @@ -84,14 +84,14 @@ public class AgvInstService { nextPoint = cacheLine.getString("cacheline_code"); //满料请求:查询缓存线空载具列表 cacheVehile = getCacheVehile(nextPoint, null); - if (StringUtils.isEmpty(cacheVehile)) { + if (StringUtils.isBlank(cacheVehile)) { throw new BadRequestException(OPT_NAME+"缓存线:"+nextPoint+"没有可用空载具"); } }else { nextPoint = nextPointList.getJSONObject(0).getString("point_code"); } } - if (StringUtils.isEmpty(nextPoint)){ + if (StringUtils.isBlank(nextPoint)){ throw new BadRequestException(OPT_NAME+"设备:"+point_code+"没有可用点位"); } task.put("vehicle_code",cacheVehile); @@ -120,7 +120,7 @@ public class AgvInstService { //缓存线位置编码 :缺料请求获取缓存线满载具列表 String startPoint = cacheLine.getString("cacheline_code"); String cacheVehile = getCacheVehile(startPoint, material_id); - if (StringUtils.isEmpty(cacheVehile)) { + if (StringUtils.isBlank(cacheVehile)) { throw new BadRequestException(OPT_NAME+"缓存线:"+startPoint+"没有可用载具"); } //判断当前物料载具已经任务分配数量:如果>物料已经分配任务。说明满了,不允许再分配 @@ -142,7 +142,7 @@ public class AgvInstService { WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); StringBuffer sql = new StringBuffer("vehicle_status = '"); JSONArray runingTask = taskTable.query("point_code2 = '" + cacheLine + "' and task_status < '" + StatusEnum.TASK_FINISH.getCode() + "'").getResultJSONArray(0); - String status = StringUtils.isEmpty(materialId) ? StatusEnum.CACHE_VEL_EMT.getCode() : StatusEnum.CACHE_VEL_FULL.getCode(); + String status = StringUtils.isBlank(materialId) ? StatusEnum.CACHE_VEL_EMT.getCode() : StatusEnum.CACHE_VEL_FULL.getCode(); JSONArray result = WQL.getWO("sch_point").addParamMap(MapOf.of("flag", "6", "vehicle_status", status, "material_id", materialId)).process().getResultJSONArray(0); if (result.size()>0){ if (result.size()>runingTask.size()){ diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java index 25bb93dc..2ea954fe 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java @@ -30,7 +30,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService{ , "start_point_code", task.getString("point_code1")//起点 , "put_point_code", task.getString("point_code2")//到料 , "next_point_code", task.getString("point_code3")//空盘返回点 - , "task_group_id", StringUtils.isEmpty(task.getString("task_group_id"))? IdUtil.getStringId():task.getString("task_group_id") + , "task_group_id", StringUtils.isBlank(task.getString("task_group_id"))? IdUtil.getStringId():task.getString("task_group_id") , "task_type", task.getString("task_type") , "priority", task.getString("priority") , "is_send", task.getString("is_send") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java index 570f9b9e..cca7b349 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java @@ -70,7 +70,7 @@ public class CacheLineHandController{ * 输入搜索条件校验,限制查询参数过短,模糊力度大 */ private void checkLength(String params) { - if(StringUtils.isNotEmpty(params)) { + if(StringUtils.isNotBlank(params)) { int length = params.getBytes().length; //限制查询参数过短,模糊力度大 if(Pattern.compile("[0-9a-zA-Z]+").matcher(params).matches() || Pattern.compile("\\d+").matcher(params).matches()) { @@ -138,7 +138,7 @@ public class CacheLineHandController{ public ResponseEntity instOperation(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [任务操作] 接口被请求, 请求参数-{}", param); //任务类型和任务ID校验,instruct_uuid为前端参数命名,本来应为task_id - if(StringUtils.isEmpty(param.getString("instruct_uuid")) || StringUtils.isEmpty(param.getString("opt_type"))) { + if(StringUtils.isBlank(param.getString("instruct_uuid")) || StringUtils.isBlank(param.getString("opt_type"))) { throw new BizCoreException("ResultCode.VALIDATE_FAILED"); } return new ResponseEntity<>(cacheLineHandService.instOperation(param), HttpStatus.OK); @@ -150,10 +150,10 @@ public class CacheLineHandController{ public ResponseEntity cacheLineOutBoxExceptionQuery(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [缓存线出箱异常-查询] 接口被请求, 请求参数-{}", param); //参数校验 - if(StringUtils.isEmpty(param.getString("wcsdevice_code"))) { + if(StringUtils.isBlank(param.getString("wcsdevice_code"))) { throw new BizCoreException("请选择缓存线并输入缓存线位置编号再查询"); } - if(StringUtils.isEmpty(param.getString("position_code"))) { + if(StringUtils.isBlank(param.getString("position_code"))) { throw new BizCoreException("请输入缓存线位置编号再查询"); } return new ResponseEntity<>(cacheLineHandService.cacheLineOutBoxExceptionQuery(param), HttpStatus.OK); @@ -165,10 +165,10 @@ public class CacheLineHandController{ public ResponseEntity cacheLineOutBoxExceptionConfirm(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [缓存线出箱异常-确认] 接口被请求, 请求参数-{}", param); //参数校验 - if(StringUtils.isEmpty(param.getString("vehicle_code"))) { + if(StringUtils.isBlank(param.getString("vehicle_code"))) { throw new BizCoreException("请输入料箱码"); } - if(StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("position_code"))) { + if(StringUtils.isBlank(param.getString("wcsdevice_code")) || StringUtils.isBlank(param.getString("position_code"))) { throw new BizCoreException("请输入缓存线位置编号与缓存线编号"); } return new ResponseEntity<>(cacheLineHandService.cacheLineOutBoxExceptionConfirm(param), HttpStatus.OK); @@ -180,7 +180,7 @@ public class CacheLineHandController{ public ResponseEntity inOutExceptionInstQuery(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [缓存线扫码异常-查询] 接口被·请求, 请求参数-{}", param); //参数校验 - if(StringUtils.isEmpty(param.getString("wcsdevice_code"))) { + if(StringUtils.isBlank(param.getString("wcsdevice_code"))) { throw new BizCoreException("请选择缓存线编号!"); } return new ResponseEntity<>(cacheLineHandService.inOutExceptionInstQuery(param), HttpStatus.OK); @@ -192,7 +192,7 @@ public class CacheLineHandController{ public ResponseEntity inOutExceptionInstConfirm(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [扫码异常确认] 接口被请求, 请求参数-{}", param); //参数校验 - if(StringUtils.isEmpty(param.getString("type")) || StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("vehicle_code"))) { + if(StringUtils.isBlank(param.getString("type")) || StringUtils.isBlank(param.getString("wcsdevice_code")) || StringUtils.isBlank(param.getString("vehicle_code"))) { throw new BizCoreException("请确认缓存线,位置,料箱码是否都已选择或填入!"); } return new ResponseEntity<>(cacheLineHandService.inOutExceptionInstConfirm(param), HttpStatus.OK); @@ -212,7 +212,7 @@ public class CacheLineHandController{ public ResponseEntity inOutEmptyBox(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [空箱初始化--出入空箱] 接口被请求, 请求参数-{}", param); //参数校验 - if(StringUtils.isEmpty(param.getString("inOut_type")) || StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("vehicle_code"))) { + if(StringUtils.isBlank(param.getString("inOut_type")) || StringUtils.isBlank(param.getString("wcsdevice_code")) || StringUtils.isBlank(param.getString("vehicle_code"))) { throw new BizCoreException(ResultCode.VALIDATE_FAILED); } return new ResponseEntity<>(cacheLineHandService.inOutEmptyBox(param), HttpStatus.OK); @@ -291,7 +291,7 @@ public class CacheLineHandController{ public ResponseEntity cacheLineExcepOpt(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [缓存线异常处理] 接口被请求, 请求参数-{}", param); //参数校验 - if(StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("opt_type"))) { + if(StringUtils.isBlank(param.getString("wcsdevice_code")) || StringUtils.isBlank(param.getString("opt_type"))) { throw new BizCoreException(ResultCode.VALIDATE_FAILED); } return new ResponseEntity<>(cacheLineHandService.cacheLineExcepOpt(param), HttpStatus.OK); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java index ee1a5c42..f494038e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java @@ -25,8 +25,6 @@ import org.nl.modules.wql.util.WqlUtil; import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.pda.dto.MaterialDto; import org.nl.wms.pda.service.CacheLineHandService; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.sch.tasks.SpeMachineryTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.scheduling.annotation.Async; @@ -77,7 +75,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ // stopWatch.start(); // stopWatch.stop(); // System.out.println("缓存本地花费时间 totalTime = " + stopWatch.getTotalTimeMillis()); - if(StringUtils.isEmpty(param)) { + if(StringUtils.isBlank(param)) { return WQL.getWO("PDA_QUERY").addParam("flag", "6").addParam("condition", param).process().getResultJSONArray(0).toJavaList(MaterialDto.class); } List materialList; @@ -117,7 +115,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ */ @NotNull private List getMaterialDto(List materialList, String param) { - if(StringUtils.isNotEmpty(param)) { + if(StringUtils.isNotBlank(param)) { //按条件搜索 materialList = materialList.stream().filter(m -> (m.getMaterial_name().contains(param)) || m.getMaterial_code().contains(param) || m.getMaterial_spec().contains(param) || m.getClass_name().contains(param)).collect(Collectors.toList()); return materialList; @@ -277,7 +275,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ @Async public void cacheLineMaterSync( String cachelineCode) { - if(StringUtils.isEmpty(cachelineCode)) { + if(StringUtils.isBlank(cachelineCode)) { return; } RedissonUtils.lock(() -> { @@ -378,7 +376,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ String cacheLine_code = param.getString("wcsdevice_code"); String weight = param.getString("weight"); String quantity = param.getString("quantity"); - if(StringUtils.isEmpty(quantity) || param.getInteger("quantity") <= 0) { + if(StringUtils.isBlank(quantity) || param.getInteger("quantity") <= 0) { throw new BadRequestException("数量必须大于0!"); } //缓存线位置表 @@ -550,7 +548,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ throw new BadRequestException("未找到该缓存线的点位信息!"); } //查不到任务信息 - if(StringUtils.isEmpty(posiObj.getString("task_code"))) { + if(StringUtils.isBlank(posiObj.getString("task_code"))) { throw new BadRequestException("未找到该缓存线的点位的任务信息!"); } JSONArray jsonArray = WQL.getWO("PDA_QUERY").addParam("flag", "10").addParam("task_code", posiObj.getString("task_code")).process().getResultJSONArray(0); @@ -717,7 +715,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ String wcsdevice_code = param.getString("wcsdevice_code"); WQLObject instructTab = WQLObject.getWQLObject("sch_base_task"); String where = "point_code2 = '" + wcsdevice_code + "' and vehicle_code = '" + vehicle_code + "' and task_status <> '7'"; - if(StringUtils.isEmpty(vehicle_code)) { + if(StringUtils.isBlank(vehicle_code)) { where = "point_code2 = '" + wcsdevice_code + "' and task_status <> '7'"; } JSONArray arr = instructTab.query(where).getResultJSONArray(0); @@ -770,7 +768,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ String wcsdevice_code = param.getString("wcsdevice_code"); JSONArray arr; WQLObject instructTab = WQLObject.getWQLObject("sch_base_task"); - if(StringUtils.isEmpty(vehicle_code)) { + if(StringUtils.isBlank(vehicle_code)) { arr = instructTab.query("point_code1 = '" + wcsdevice_code + "' and task_status <> '7'").getResultJSONArray(0); } else{ diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java index c5da13bf..e928e2df 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java @@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.WQL; @@ -24,196 +25,201 @@ import java.util.List; import java.util.Map; /** - * @description 服务实现 * @author lyd + * @description 服务实现 * @date 2023-03-17 **/ @Service @RequiredArgsConstructor @Slf4j -public class RegionServiceImpl implements RegionService { +public class RegionServiceImpl implements RegionService{ + @Override + public Map queryAll(Map whereJson, Pageable page) { + String region_code = MapUtil.getStr(whereJson, "region_code"); + String product_area = MapUtil.getStr(whereJson, "product_area"); + HashMap map = new HashMap<>(); + map.put("flag", "1"); + if(ObjectUtil.isNotEmpty(region_code)) { + map.put("region_code", "%" + region_code + "%"); + } + if(ObjectUtil.isNotEmpty(product_area)) { + map.put("product_area", product_area); + } + JSONObject json = WQL.getWO("QSCH_REGION_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "region.region_code ASC"); + return json; + } - @Override - public Map queryAll(Map whereJson, Pageable page) { - String region_code = MapUtil.getStr(whereJson, "region_code"); - String product_area = MapUtil.getStr(whereJson, "product_area"); + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + JSONArray arr = wo.query().getResultJSONArray(0); + if(ObjectUtil.isNotEmpty(arr)) { + return arr.toJavaList(RegionDto.class); + } + return null; + } - HashMap map = new HashMap<>(); - map.put("flag", "1"); - if (ObjectUtil.isNotEmpty(region_code)) map.put("region_code","%" + region_code + "%"); - if (ObjectUtil.isNotEmpty(product_area)) map.put("product_area", product_area); + @Override + public RegionDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + JSONObject json = wo.query("region_code ='" + code + "'").uniqueResult(0); + if(ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(RegionDto.class); + } + return null; + } - JSONObject json = WQL.getWO("QSCH_REGION_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "region.region_code ASC"); - return json; - } + @Override + @Transactional(rollbackFor = Exception.class) + public void create(RegionDto dto) { + WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + JSONObject jsonDto = wo.query("region_code = '" + dto.getRegion_code() + "'").uniqueResult(0); + if(ObjectUtil.isNotEmpty(jsonDto)) { + throw new BadRequestException("编码已存在"); + } + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_id(currentUserId); + dto.setUpdate_name(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } - @Override - public List queryAll(Map whereJson) { - WQLObject wo = WQLObject.getWQLObject("sch_base_region"); - JSONArray arr = wo.query().getResultJSONArray(0); - if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(RegionDto.class); - return null; - } + @Override + @Transactional(rollbackFor = Exception.class) + public void update(RegionDto dto) { + RegionDto entity = this.findByCode(dto.getRegion_code()); + if(entity == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_id(currentUserId); + dto.setUpdate_name(nickName); + WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } - @Override - public RegionDto findByCode(String code) { - WQLObject wo = WQLObject.getWQLObject("sch_base_region"); - JSONObject json = wo.query("region_code ='" + code + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(json)) { - return json.toJavaObject(RegionDto.class); - } - return null; - } + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(String[] codes) { + WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + for(String region_code : codes) { + wo.delete("region_code ='" + region_code + "'"); + } + } - @Override - @Transactional(rollbackFor = Exception.class) - public void create(RegionDto dto) { - WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + /** + * 获取点位状态下拉框 + * + * @param region_code + * @return + */ + @Override + public JSONArray getPointStatusSelectByCode(String region_code) { + /** + * label,value + */ + JSONArray res = new JSONArray(); + String point_status_explain = findByCode(region_code).getPoint_status_explain(); + if(ObjectUtil.isEmpty(point_status_explain)) { + return res; + } + String[] explain = point_status_explain.split(","); + for(int i = 0; i < explain.length; i++) { + String[] status = explain[i].split("-"); + JSONObject point_status = new JSONObject(); + point_status.put("label", status[1]); + point_status.put("value", status[0]); + res.add(point_status); + } + return res; + } - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - String now = DateUtil.now(); + /** + * 获取点位类型下拉框 + * + * @param region_code + * @return + */ + @Override + public JSONArray getPointTypeSelectByCode(String region_code) { + /** + * label,value + */ + JSONArray res = new JSONArray(); + String point_type_explain = findByCode(region_code).getPoint_type_explain(); + if(ObjectUtil.isEmpty(point_type_explain)) { + return res; + } + String[] explain = point_type_explain.split(","); + for(int i = 0; i < explain.length; i++) { + String[] types = explain[i].split("-"); + JSONObject point_type = new JSONObject(); + point_type.put("label", types[1]); + point_type.put("value", types[0]); + res.add(point_type); + } + return res; + } - JSONObject jsonDto = wo.query("region_code = '" + dto.getRegion_code() + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(jsonDto)) throw new BadRequestException("编码已存在"); - - dto.setCreate_id(currentUserId); - dto.setCreate_name(nickName); - dto.setUpdate_id(currentUserId); - dto.setUpdate_name(nickName); - dto.setUpdate_time(now); - dto.setCreate_time(now); - - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.insert(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void update(RegionDto dto) { - RegionDto entity = this.findByCode(dto.getRegion_code()); - if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); - - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - - String now = DateUtil.now(); - dto.setUpdate_time(now); - dto.setUpdate_id(currentUserId); - dto.setUpdate_name(nickName); - - WQLObject wo = WQLObject.getWQLObject("sch_base_region"); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.update(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteAll(String[] codes) { - WQLObject wo = WQLObject.getWQLObject("sch_base_region"); - for (String region_code : codes) { - wo.delete("region_code ='" + region_code + "'"); - } - } - - /** - * 获取点位状态下拉框 - * - * @param region_code - * @return - */ - @Override - public JSONArray getPointStatusSelectByCode(String region_code) { - /** - * label,value - */ - JSONArray res = new JSONArray(); - String point_status_explain = findByCode(region_code).getPoint_status_explain(); - if (ObjectUtil.isEmpty(point_status_explain)) return res; - String[] explain = point_status_explain.split(","); - for (int i = 0; i < explain.length; i++) { - String[] status = explain[i].split("-"); - JSONObject point_status = new JSONObject(); - point_status.put("label", status[1]); - point_status.put("value", status[0]); - res.add(point_status); - } - return res; - } - - /** - * 获取点位类型下拉框 - * - * @param region_code - * @return - */ - @Override - public JSONArray getPointTypeSelectByCode(String region_code) { - /** - * label,value - */ - JSONArray res = new JSONArray(); - String point_type_explain = findByCode(region_code).getPoint_type_explain(); - if (ObjectUtil.isEmpty(point_type_explain)) return res; - String[] explain = point_type_explain.split(","); - for (int i = 0; i < explain.length; i++) { - String[] types = explain[i].split("-"); - JSONObject point_type = new JSONObject(); - point_type.put("label", types[1]); - point_type.put("value", types[0]); - res.add(point_type); - } - return res; - } - - @Override - public JSONObject getRegionSelect(JSONObject whereJson) { - String stor_id = whereJson.getString("stor_id"); - JSONArray prodArr = WQL.getWO("QSCH_REGION_01").addParam("flag", "2").addParam("value",stor_id).process().getResultJSONArray(0); - - JSONArray new_ja = new JSONArray(); - for (int i = 0; i < prodArr.size(); i++) { - JSONObject json = prodArr.getJSONObject(i); - - JSONObject jsonMst = new JSONObject(); - jsonMst.put("value",json.getString("value")); - jsonMst.put("label",json.getString("label")); - - // 查询子类 - JSONArray DtlArr = WQL.getWO("QSCH_REGION_01").addParam("flag", "3").addParam("product_area", json.getString("value")).process().getResultJSONArray(0); - if (DtlArr.size() > 0) { - JSONArray sect_ja = new JSONArray(); - - for (int j = 0; j < DtlArr.size(); j++) { - JSONObject json2 = DtlArr.getJSONObject(j); - JSONObject sect_cas = new JSONObject(); - sect_cas.put("value", json2.getString("region_code")); - sect_cas.put("label", json2.getString("region_name")); - sect_ja.add(sect_cas); - } - jsonMst.put("children", sect_ja); - } - new_ja.add(jsonMst); - } - JSONObject jo = new JSONObject(); - jo.put("content", new_ja); - return jo; - } - - @Override - public Map getPointQuery(Map whereJson, Pageable page) { - String product_area = MapUtil.getStr(whereJson, "stor_id"); // 生产区域 - String region_code = MapUtil.getStr(whereJson, "sect_id"); // 所属区域 - String point_code = MapUtil.getStr(whereJson, "point_code"); - - JSONObject map = new JSONObject(); - map.put("flag", "4"); - map.put("product_area",product_area); - map.put("region_code",region_code); - if (ObjectUtil.isNotEmpty(point_code)) map.put("point_code","%"+point_code+"%"); - - JSONObject jsonObject = WQL.getWO("QSCH_REGION_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "point.point_code ASC"); - return jsonObject; - } + @Override + public JSONObject getRegionSelect(JSONObject whereJson) { + JSONObject jo = new JSONObject(); + String stor_id = whereJson.getString("stor_id"); + //库区作为区域 + if(StringUtils.isBlank(stor_id)) { + JSONArray jsonArray =WQLObject.getWQLObject("st_ivt_sectattr").query("is_used = '" + 1 + "' and is_delete = '0'").getResultJSONArray(0); + jo.put("content", jsonArray); + return jo; + } + JSONArray prodArr = WQL.getWO("QSCH_REGION_01").addParam("flag", "2").addParam("value", stor_id).process().getResultJSONArray(0); + JSONArray new_ja = new JSONArray(); + for(int i = 0; i < prodArr.size(); i++) { + JSONObject json = prodArr.getJSONObject(i); + JSONObject jsonMst = new JSONObject(); + jsonMst.put("value", json.getString("value")); + jsonMst.put("label", json.getString("label")); + // 查询子类 + JSONArray DtlArr = WQL.getWO("QSCH_REGION_01").addParam("flag", "3").addParam("product_area", json.getString("value")).process().getResultJSONArray(0); + if(DtlArr.size() > 0) { + JSONArray sect_ja = new JSONArray(); + for(int j = 0; j < DtlArr.size(); j++) { + JSONObject json2 = DtlArr.getJSONObject(j); + JSONObject sect_cas = new JSONObject(); + sect_cas.put("value", json2.getString("region_code")); + sect_cas.put("label", json2.getString("region_name")); + sect_ja.add(sect_cas); + } + jsonMst.put("children", sect_ja); + } + new_ja.add(jsonMst); + } + jo.put("content", new_ja); + return jo; + } + @Override + public Map getPointQuery(Map whereJson, Pageable page) { + String product_area = MapUtil.getStr(whereJson, "stor_id"); // 生产区域 + String region_code = MapUtil.getStr(whereJson, "sect_id"); // 所属区域 + String point_code = MapUtil.getStr(whereJson, "point_code"); + JSONObject map = new JSONObject(); + map.put("flag", "4"); + map.put("product_area", product_area); + map.put("region_code", region_code); + if(ObjectUtil.isNotEmpty(point_code)) { + map.put("point_code", "%" + point_code + "%"); + } + JSONObject jsonObject = WQL.getWO("QSCH_REGION_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "point.point_code ASC"); + return jsonObject; + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/ProductInTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/ProductInTask.java index 89b5d9eb..6a6c2494 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/ProductInTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/ProductInTask.java @@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSONObject; import org.nl.common.enums.StatusEnum; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; import org.nl.system.service.param.impl.SysParamServiceImpl; @@ -172,11 +173,14 @@ public class ProductInTask extends AbstractAcsTask { JSONObject json = new JSONObject(); json.put("task_id", IdUtil.getSnowflake(1, 1).nextId()); - json.put("task_code", IdUtil.getSnowflake(1,1).nextId()); + json.put("task_code", CodeUtil.getNewCode("TASK_CODE")); json.put("product_area", form.getString("product_area")); json.put("task_type", form.getString("task_type")); + json.put("task_name", form.getString("task_name")); json.put("is_send", "1"); json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + json.put("material_id", form.getString("material_id")); + json.put("material_qty", form.getString("plan_qty")); json.put("point_code1", start_device_code); json.put("point_code2", next_device_code); json.put("vehicle_code", form.getString("vehicle_code")); @@ -188,7 +192,6 @@ public class ProductInTask extends AbstractAcsTask { json.put("update_name", currentUsername); json.put("update_time", DateUtil.now()); WQLObject.getWQLObject("SCH_BASE_Task").insert(json); - return json.getString("task_id"); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/WashMachineryTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/WashMachineryTask.java index 18283fce..c2e72603 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/WashMachineryTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/WashMachineryTask.java @@ -78,7 +78,7 @@ public class WashMachineryTask extends AbstractAcsTask { Assert.notEmpty(new Object[]{param,param.getString("workorder_id")},"参数不能为空"); String inDevices = param.getString("in_devices"); String workorderId = param.getString("workorder_id"); - if (!StringUtils.isEmpty(inDevices)){ + if (!StringUtils.isBlank(inDevices)){ String sql = Arrays.stream(inDevices.split(",")).collect(Collectors.joining("','")); //跟新工单:状态为完成;跟新点位 material_id is not null and point_status = '2' pointTab.update(MapOf.of("material_id","","point_status","1"),"point_code in ('"+sql+"')"); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/rest/SemiProductInController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/rest/SemiProductInController.java new file mode 100644 index 00000000..8c042115 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/rest/SemiProductInController.java @@ -0,0 +1,188 @@ +package org.nl.wms.st.in.rest; + +import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.anno.Log; +import org.nl.common.utils.api.ResultCode; +import org.nl.modules.common.exception.BizCoreException; +import org.nl.wms.st.in.service.ProductInService; +import org.nl.wms.st.in.service.SemiProductInService; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequiredArgsConstructor +@Api(tags = "半成品入库") +@RequestMapping("/api/in/semiProductIn") +@Slf4j +@SaIgnore +public class SemiProductInController{ + private final SemiProductInService semiProductInService; + + @GetMapping + @Log("查询入库单据") + @ApiOperation("查询入库单据") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(semiProductInService.pageQuery(whereJson, page), HttpStatus.OK); + } + + @Log("删除出入库单") + @ApiOperation("删除出入库单") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + semiProductInService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/getBillDtl") + @Log("查询入库单来源") + @ApiOperation("查询入库单来源") + public ResponseEntity getBillDtl(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(semiProductInService.getBillDtl(whereJson, page), HttpStatus.OK); + } + + @PostMapping() + @Log("新增入库单") + @ApiOperation("新增入库单") + public ResponseEntity insertDtl(@RequestBody JSONObject whereJson) { + semiProductInService.insertDtl(whereJson); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PostMapping("/semiProductInFromPda") + @Log("C端半成品入库") + @ApiOperation("C端入库") + public ResponseEntity semiProductInFromPda(@RequestBody JSONObject whereJson) { + log.info("海亮缓存线手持服务 [半成品入库] 接口被请求, 请求参数-{}", whereJson); + //参数校验 + if(StringUtils.isBlank(whereJson.getString("iostorinv_id")) || StringUtils.isBlank(whereJson.getString("material_id")) || StringUtils.isBlank(whereJson.getString("plan_qty")) || StringUtils.isBlank(whereJson.getString("storagevehicle_code"))) { + throw new BizCoreException(ResultCode.VALIDATE_FAILED); + } + return new ResponseEntity<>(semiProductInService.semiProductInFromPda(whereJson), HttpStatus.OK); + } + + @PutMapping + @Log("修改入库单") + @ApiOperation("修改入库单") + public ResponseEntity update(@RequestBody JSONObject whereJson) { + semiProductInService.update(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/queryStor") + @Log("查询仓库") + @ApiOperation("查询仓库") + public ResponseEntity queryStor() { + return new ResponseEntity<>(semiProductInService.queryStor(), HttpStatus.OK); + } + + @PostMapping("/getIODtl") + @Log("查询出入库单明细") + @ApiOperation("查询出入库单明细") + public ResponseEntity getIODtl(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(semiProductInService.getIODtl(whereJson), HttpStatus.OK); + } + + @PostMapping("/commit") + @Log("出入单提交") + @ApiOperation("出入单提交") + public ResponseEntity commit(@RequestBody Map whereJson) { + semiProductInService.commit(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/getDisDtl") + @Log("查询入库分配明细") + @ApiOperation("查询入库分配明细") + public ResponseEntity getDisDtl(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(semiProductInService.getDisDtl(whereJson), HttpStatus.OK); + } + + @PostMapping("/confirmvehicle") + @Log("组盘确认") + @ApiOperation("组盘确认") + public ResponseEntity confirmvehicle(@RequestBody JSONObject whereJson) { + semiProductInService.confirmvehicle(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/divStruct") + @Log("分配货位") + @ApiOperation("分配货位") + public ResponseEntity divStruct(@RequestBody JSONObject whereJson) { + semiProductInService.divStruct(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/unDivStruct") + @Log("取消分配货位") + @ApiOperation("取消分配货位") + public ResponseEntity unDivStruct(@RequestBody JSONObject whereJson) { + semiProductInService.unDivStruct(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/divPoint") + @Log("设置起点") + @ApiOperation("设置起点") + public ResponseEntity divPoint(@RequestBody JSONObject whereJson) { + semiProductInService.divPoint(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/delDis") + @Log("删除分配") + @ApiOperation("删除分配") + public ResponseEntity delDis(@RequestBody JSONObject whereJson) { + semiProductInService.delDis(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/queryBoxMater") + @Log("查询箱内子卷") + @ApiOperation("查询箱内子卷") + public ResponseEntity queryBoxMater(@RequestBody JSONArray whereJson) { + return new ResponseEntity<>(semiProductInService.queryBoxMater(whereJson), HttpStatus.OK); + } + + @PostMapping("/updateTask") + @Log("变更任务") + @ApiOperation("变更任务") + public ResponseEntity updateTask(@RequestBody Map whereJson) { + semiProductInService.updateTask(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/confirm") + @Log("完成单据") + @ApiOperation("完成单据") + public ResponseEntity confirm(@RequestBody Map whereJson) { + semiProductInService.confirm(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/autoDis") + @Log("自动分配") + @ApiOperation("自动分配") + public ResponseEntity autoDis(@RequestBody JSONObject whereJson) { + semiProductInService.autoDis(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/getDisTask") + @Log("获取明细任务") + @ApiOperation("获取明细任务") + public ResponseEntity getDisTask(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(semiProductInService.getDisTask(whereJson), HttpStatus.OK); + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/SemiProductInService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/SemiProductInService.java new file mode 100644 index 00000000..0407b65f --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/SemiProductInService.java @@ -0,0 +1,127 @@ +package org.nl.wms.st.in.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.common.utils.api.CommonResult; +import org.springframework.data.domain.Pageable; + +import java.util.Map; + +public interface SemiProductInService{ + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map pageQuery(Map whereJson, Pageable page); + + Map getBillDtl(Map whereJson, Pageable page); + + /** + * 新增单据 + * + * @param whereJson / + * @return iostorinv_id + */ + String insertDtl(JSONObject whereJson); + + /** + * C端半成品入库 + * + * @param whereJson / + * @return 操作结果 + */ + CommonResult semiProductInFromPda(JSONObject whereJson); + + /** + * 删除单据 + * + * @param ids / + */ + void deleteAll(Long[] ids); + + void delDis(JSONObject whereJson); + + JSONArray queryBoxMater(JSONArray rows); + + /** + * 修改单据 + * + * @param whereJson / + */ + void update(JSONObject whereJson); + + void commit(Map whereJson); + + /** + * 查询出入库单明细 + * + * @param whereJson / + * @return JSONArray + */ + JSONArray getIODtl(JSONObject whereJson); + + /** + * 分配货位 + * + * @param whereJson / + */ + void divStruct(JSONObject whereJson); + + /** + * 取消分配 + * + * @param whereJson / + */ + void unDivStruct(JSONObject whereJson); + + /** + * 设置起点 + * + * @param whereJson / + */ + void divPoint(JSONObject whereJson); + + void updateTask(Map whereJson); + + void confirm(Map whereJson); + + /** + * 查询入库分配明细 + * + * @param whereJson / + * @return JSONArray + */ + JSONArray getDisDtl(JSONObject whereJson); + + /** + * 自动分配 + * + * @param whereJson / + * @return JSONObject + */ + JSONObject autoDis(JSONObject whereJson); + + /** + * 查询仓库 + * + * @return JSONArray + */ + JSONArray queryStor(); + + /** + * 组盘确认 + * + * @param whereJson / + */ + void confirmvehicle(JSONObject whereJson); + + /** + * 获取分配明细任务 + * + * @param whereJson / + */ + JSONArray getDisTask(JSONObject whereJson); +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/ProductInServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/ProductInServiceImpl.java index 7667ca20..6bae7052 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/ProductInServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/ProductInServiceImpl.java @@ -60,7 +60,6 @@ public class ProductInServiceImpl implements ProductInService { String begin_time = MapUtil.getStr(whereJson, "begin_time"); String end_time = MapUtil.getStr(whereJson, "end_time"); String bill_status = MapUtil.getStr(whereJson, "bill_status"); - String bill_type = MapUtil.getStr(whereJson, "bill_type"); JSONObject map = new JSONObject(); map.put("flag", "1"); @@ -68,7 +67,7 @@ public class ProductInServiceImpl implements ProductInService { map.put("begin_time",begin_time); map.put("end_time",end_time); map.put("bill_status",bill_status); - map.put("bill_type",bill_type); + map.put("bill_type", "0001"); if (ObjectUtil.isNotEmpty(bill_code)) map.put("bill_code","%"+bill_code+"%"); JSONObject jo = WQL.getWO("QST_IVT_PRODUCTIN_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "input_time desc"); @@ -137,11 +136,11 @@ public class ProductInServiceImpl implements ProductInService { io_mst.put("detail_count", rows.size()); io_mst.put("remark", whereJson.get("remark")); io_mst.put("bill_status", whereJson.getString("bill_status")); - io_mst.put("input_optid", currentUserId + ""); - io_mst.put("input_optname", nickName); + io_mst.put("input_id", currentUserId + ""); + io_mst.put("input_name", nickName); io_mst.put("input_time", now); - io_mst.put("update_optid", currentUserId + ""); - io_mst.put("update_optname", nickName); + io_mst.put("update_id", currentUserId + ""); + io_mst.put("update_name", nickName); io_mst.put("update_time", now); io_mst.put("is_delete", "0"); @@ -198,8 +197,8 @@ public class ProductInServiceImpl implements ProductInService { JSONObject param = new JSONObject(); param.put("iostorinv_id", String.valueOf(id)); param.put("is_delete", "1"); - param.put("update_optid", currentUserId); - param.put("update_optname", nickName); + param.put("update_id", currentUserId); + param.put("update_name", nickName); param.put("update_time", now); wo.update(param); } @@ -265,8 +264,8 @@ public class ProductInServiceImpl implements ProductInService { io_mst.put("product_name", json.getString("label")); io_mst.put("detail_count", rows.size()); io_mst.put("remark", whereJson.get("remark")); - io_mst.put("update_optid", currentUserId + ""); - io_mst.put("update_optname", nickName); + io_mst.put("update_id", currentUserId + ""); + io_mst.put("update_name", nickName); io_mst.put("update_time", now); for (int i = 0; i < rows.size(); i++) { @@ -322,8 +321,8 @@ public class ProductInServiceImpl implements ProductInService { String nickName = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); - map.put("update_optid", currentUserId + ""); - map.put("update_optname", nickName); + map.put("update_id", currentUserId + ""); + map.put("update_name", nickName); map.put("update_time", now); WQLObject.getWQLObject("ST_IVT_IOStorInv").update(map, "iostorinv_id = '" + iostorinv_id + "'"); WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").update(map, "iostorinv_id = '" + iostorinv_id + "'"); @@ -477,14 +476,14 @@ public class ProductInServiceImpl implements ProductInService { JSONArray dtl_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinv_id = '" + dis_jo.getString("iostorinv_id") + "' AND bill_status < '30'").getResultJSONArray(0); if (dtl_rows.size() == 0) { mst.put("bill_status", "30"); - mst.put("dis_optid", currentUserId); - mst.put("dis_optname", nickName); + mst.put("dis_id", currentUserId); + mst.put("dis_name", nickName); mst.put("dis_time", now); WQLObject.getWQLObject("ST_IVT_IOStorInv").update(mst); } else { mst.put("bill_status", "20"); - mst.put("dis_optid", currentUserId); - mst.put("dis_optname", nickName); + mst.put("dis_id", currentUserId); + mst.put("dis_name", nickName); mst.put("dis_time", now); WQLObject.getWQLObject("ST_IVT_IOStorInv").update(mst); } @@ -999,8 +998,8 @@ public class ProductInServiceImpl implements ProductInService { } mst_jo.put("bill_status", "99"); - mst_jo.put("confirm_optid", currentUserId); - mst_jo.put("confirm_optname", nickName); + mst_jo.put("confirm_id", currentUserId); + mst_jo.put("confirm_name", nickName); mst_jo.put("confirm_time", now); //更新主表状态为99 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/SemiProductInServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/SemiProductInServiceImpl.java new file mode 100644 index 00000000..ff640e2d --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/SemiProductInServiceImpl.java @@ -0,0 +1,1087 @@ +package org.nl.wms.st.in.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.enums.AcsTaskEnum; +import org.nl.common.enums.StatusEnum; +import org.nl.common.utils.SecurityUtils; +import org.nl.common.utils.api.CommonResult; +import org.nl.common.utils.api.RestBusinessTemplate; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.modules.wql.util.WqlUtil; +import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.wms.basedata.st.service.StorattrService; +import org.nl.wms.basedata.st.service.StructattrService; +import org.nl.wms.basedata.st.service.dto.StructattrDto; +import org.nl.wms.sch.service.PointService; +import org.nl.wms.sch.service.dto.PointDto; +import org.nl.wms.sch.tasks.ProductInTask; +import org.nl.wms.st.in.service.SemiProductInService; +import org.nl.wms.st.in.service.StorPublicService; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; + +/** + * PC端出入库新增 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class SemiProductInServiceImpl implements SemiProductInService{ + private final StorattrService storattrService; + private final StructattrService structattrService; + private final PointService pointService; + private final StorPublicService storPublicService; + + @Override + public Map pageQuery(Map whereJson, Pageable page) { + String bill_code = MapUtil.getStr(whereJson, "bill_code"); + String stor_id = MapUtil.getStr(whereJson, "stor_id"); + String begin_time = MapUtil.getStr(whereJson, "begin_time"); + String end_time = MapUtil.getStr(whereJson, "end_time"); + String bill_status = MapUtil.getStr(whereJson, "bill_status"); + JSONObject map = new JSONObject(); + map.put("flag", "1"); + map.put("stor_id", stor_id); + map.put("begin_time", begin_time); + map.put("end_time", end_time); + map.put("bill_status", bill_status); + map.put("bill_type", "0002"); + if(ObjectUtil.isNotEmpty(bill_code)) { + map.put("bill_code", "%" + bill_code + "%"); + } + JSONObject jo = WQL.getWO("QST_IVT_PRODUCTIN_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "input_time desc"); + return jo; + } + + @Override + public Map getBillDtl(Map whereJson, Pageable page) { + HashMap map = new HashMap<>(); + String bill_code = (String) whereJson.get("bill_code"); + String material_search = (String) whereJson.get("material_search"); + String begin_time = (String) whereJson.get("begin_time"); + String end_time = (String) whereJson.get("end_time"); + String container_name = (String) whereJson.get("container_name"); + String package_box_sn = (String) whereJson.get("package_box_sn"); + String sap_pcsn = (String) whereJson.get("sap_pcsn"); + map.put("flag", "2"); + if(StrUtil.isNotEmpty(package_box_sn)) { + map.put("package_box_sn", package_box_sn); + } + if(StrUtil.isNotEmpty(container_name)) { + map.put("container_name", container_name); + } + if(StrUtil.isNotEmpty(bill_code)) { + map.put("bill_code", bill_code); + } + if(StrUtil.isNotEmpty(sap_pcsn)) { + map.put("sap_pcsn", sap_pcsn); + } + if(StrUtil.isNotEmpty(material_search)) { + map.put("material_search", "%" + material_search + "%"); + } + if(StrUtil.isNotEmpty(begin_time)) { + map.put("begin_time", begin_time.substring(0, 10)); + map.put("end_time", end_time.substring(0, 10)); + } + JSONObject jo = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "date_of_FG_inbound,package_box_sn desc"); + return jo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public CommonResult semiProductInFromPda(JSONObject whereJson) { + WQLObject vehicleTab = WQLObject.getWQLObject("md_pb_storagevehicleinfo"); + WQLObject disTab = WQLObject.getWQLObject("st_ivt_iostorinvdis"); + //生成单据 + JSONObject iostorinvInfo = insertDtls(whereJson); + whereJson.put("iostorinv_id", iostorinvInfo.getString("iostorinv_id")); + whereJson.put("iostorinvdis_id", iostorinvInfo.getString("iostorinvdis_id")); + whereJson.put("iostorinvdtl_id", iostorinvInfo.getString("iostorinvdtl_id")); + //入库点,起点 + whereJson.put("start_point_code", "ARK02"); + //区域 + whereJson.put("sect_id", "KQ004"); + //组盘确认 + String storagevehicle_code = whereJson.getString("storagevehicle_code"); + // 1.校验载具是否存在 + JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + storagevehicle_code + "' and is_delete = '0' and is_used = '1'").uniqueResult(0); + if(ObjectUtil.isEmpty(jsonVehicle)) { + throw new BadRequestException("载具不存在"); + } + // 2.更新分配明细载具号 + JSONObject jsonDis = disTab.query("iostorinvdis_id = '" + iostorinvInfo.getString("iostorinvdis_id") + "'").uniqueResult(0); + // 校验此明细是否已经分配 + if(ObjectUtil.isNotEmpty(jsonDis.getString("struct_id"))) { + throw new BadRequestException("此明细已分配不可组盘!"); + } + jsonDis.put("storagevehicle_id", jsonVehicle.getString("storagevehicle_id")); + jsonDis.put("storagevehicle_code", jsonVehicle.getString("storagevehicle_code")); + disTab.update(jsonDis); + //自动分配货位 + HashMap dis_map = divStructs(whereJson); + whereJson.put("point_code", dis_map.get("struct_code")); + whereJson.put("point_id", dis_map.get("struct_id")); + //设置起点 + JSONObject mst = WQLObject.getWQLObject("st_ivt_iostorinv").query("iostorinv_id = '" + whereJson.getString("iostorinv_id") + "'").uniqueResult(0); + //如果终点已确定,创建任务 + ProductInTask task = new ProductInTask(); + JSONObject task_form = new JSONObject(); + task_form.put("material_id", whereJson.get("material_id")); + task_form.put("material_qty", whereJson.get("plan_qty")); + task_form.put("task_type", AcsTaskEnum.TASK_STRUCT_IN.getCode()); + task_form.put("task_name", AcsTaskEnum.TASK_STRUCT_IN.getDesc()); + task_form.put("start_device_code", whereJson.getString("start_point_code")); + task_form.put("next_device_code", whereJson.getString("point_code")); + task_form.put("vehicle_code", whereJson.getString("storagevehicle_code")); + task_form.put("product_area", mst.getString("product_code")); + String task_id = task.createTask(task_form); + HashMap point_map = new HashMap<>(); + point_map.put("task_id", task_id); + point_map.put("work_status", "01"); + point_map.put("point_id", whereJson.getString("point_id") + ""); + // 4.更新分配明细表 + int result = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").update(point_map, "iostorinvdtl_id = '" + whereJson.getString("iostorinvdtl_id") + "'").getSucess(); + return RestBusinessTemplate.execute(() -> result); + } + + public HashMap divStructs(JSONObject whereJson) { + String is_length = ""; + //出入单据主表 + JSONObject mst = WQLObject.getWQLObject("st_ivt_iostorinv").query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").uniqueResult(0); + //分配表 + JSONObject jsonDis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinvdis_id = '" + whereJson.getString("iostorinvdis_id") + "'").uniqueResult(0); + // 校验是否已分配 + if(StringUtils.isNotBlank(jsonDis.getString("struct_id"))) { + throw new BadRequestException("该明细已分配,无法继续分配!"); + } + // 校验是否已组盘 + if(StringUtils.isBlank(jsonDis.getString("storagevehicle_code"))) { + throw new BadRequestException("请先进行组盘"); + } + JSONObject jsonParam = new JSONObject(); + JSONObject jsonPoint; + if(whereJson.containsKey("sect_id")) { + //生产区域 + jsonParam.put("sect_id", whereJson.get("sect_id")); + //库区 + jsonParam.put("stor_id", whereJson.get("stor_id")); + jsonParam.put("material_id", whereJson.getString("material_id")); + jsonPoint = this.autoDis(jsonParam); + is_length = jsonPoint.getString("is_length"); + } + else{ + throw new BadRequestException("请选择需要分配的区域!"); + } + if(ObjectUtil.isEmpty(jsonPoint)) { + throw new BadRequestException("未查询到适用点位!"); + } + HashMap dis_map = new HashMap(); + dis_map.put("is_length", is_length); + dis_map.put("region_code", jsonPoint.getString("region_code")); + dis_map.put("region_name", jsonPoint.getString("region_name")); + dis_map.put("struct_id", jsonPoint.getString("point_id")); + dis_map.put("struct_code", jsonPoint.getString("point_code")); + dis_map.put("struct_name", jsonPoint.getString("point_name")); + dis_map.put("iostorinv_id", whereJson.getString("iostorinv_id")); + dis_map.put("iostorinvdis_id", whereJson.getString("iostorinvdis_id")); + dis_map.put("iostorinvdtl_id", whereJson.getString("iostorinvdtl_id")); + lockPoint(dis_map, mst); + return dis_map; + } + + private void lockPoint(HashMap dis_map, JSONObject mst) { + //仓位 + WQLObject pointTab = WQLObject.getWQLObject("st_ivt_structattr"); + //锁定货位 + JSONObject jsonPoint1 = pointTab.query("struct_id = '" + dis_map.get("struct_id") + "'").uniqueResult(0); + jsonPoint1.put("lock_type", StatusEnum.LOCK_ON.getCode()); + pointTab.update(jsonPoint1); + // 判断是否需要锁定两个货位 + if(StrUtil.equals(dis_map.get("is_length"), "1")) { + JSONObject jsonPoint2 = pointTab.query("struct_id = '" + jsonPoint1.getString("control_point") + "'").uniqueResult(0); + jsonPoint2.put("lock_type", StatusEnum.LOCK_ON.getCode()); + pointTab.update(jsonPoint2); + } + // 更新分配明细 + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").update(dis_map, "iostorinvdtl_id = '" + dis_map.get("iostorinvdtl_id") + "'"); + //更新库存,直接取出入库分配表的库存 + JSONArray dis_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinvdtl_id = '" + dis_map.get("iostorinvdtl_id") + "'").getResultJSONArray(0); + for(int i = 0; i < dis_rows.size(); i++) { + JSONObject dis_jo = dis_rows.getJSONObject(i); + JSONObject i_form = new JSONObject(); + i_form.put("struct_id", dis_jo.getString("struct_id")); + i_form.put("material_id", dis_jo.getString("material_id")); + i_form.put("pcsn", dis_jo.getString("pcsn")); + i_form.put("change_qty", dis_jo.getString("plan_qty")); + i_form.put("bill_type_scode", mst.getString("bill_type")); + i_form.put("quality_scode", "01"); + i_form.put("inv_id", mst.getString("iostorinv_id")); + i_form.put("bill_code", mst.getString("bill_code")); + i_form.put("bill_table", "ST_IVT_IOStorInv"); + i_form.put("qty_unit_id", dis_jo.getString("qty_unit_id")); + i_form.put("qty_unit_name", dis_jo.getString("qty_unit_name")); + //查询仓位信息 + i_form.put("isStructAttr", "1"); + storPublicService.IOStor(i_form, "31"); + JSONObject dtl_jo = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinvdtl_id = '" + dis_jo.getString("iostorinvdtl_id") + "'").uniqueResult(0); + if(dtl_jo.getDoubleValue("unassign_qty") == 0) { + //判断该明细下是否还存在未分配货位的分配明细 + JSONArray disdiv_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinvdtl_id = '" + dis_jo.getString("iostorinvdtl_id") + "' AND (struct_id = '' OR struct_id is null)").getResultJSONArray(0); + if(disdiv_rows.size() == 0) { + dtl_jo.put("bill_status", "30"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").update(dtl_jo); + //判断主表下的明细是否都为30 + JSONArray dtl_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinv_id = '" + dis_jo.getString("iostorinv_id") + "' AND bill_status < '30'").getResultJSONArray(0); + mst.put("dis_id", SecurityUtils.getCurrentUserId()); + mst.put("dis_name", SecurityUtils.getCurrentNickName()); + mst.put("dis_time", DateUtil.now()); + if(dtl_rows.size() == 0) { + mst.put("bill_status", "30"); + } + else{ + mst.put("bill_status", "20"); + } + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(mst); + } + } + } + } + + public JSONObject insertDtls(JSONObject whereJson) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + //批次 + String pcsn = whereJson.getString("iostorinv_id"); + String material_id = whereJson.getString("material_id"); + Double plan_qty = Double.parseDouble(whereJson.getString("plan_qty")); + // 插入主表 + JSONObject io_mst = new JSONObject(); + String iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + String bill_code = CodeUtil.getNewCode("IO_CODE"); + io_mst.put("iostorinv_id", iostorinv_id); + io_mst.put("bill_code", bill_code); + io_mst.put("io_type", "0"); + io_mst.put("bill_type", "0002"); + io_mst.put("biz_date", DateUtil.today()); + //获取生产区域信息 + JSONObject json = WQL.getWO("QSCH_REGION_01").addParam("flag", "2").addParam("value", "A1").process().uniqueResult(0); + io_mst.put("product_id", json.getString("dict_id")); + io_mst.put("product_code", json.getString("value")); + io_mst.put("product_name", json.getString("label")); + io_mst.put("detail_count", 1); + io_mst.put("bill_status", "10"); + io_mst.put("input_id", currentUserId + ""); + io_mst.put("input_name", nickName); + io_mst.put("input_time", now); + io_mst.put("update_id", currentUserId + ""); + io_mst.put("update_name", nickName); + io_mst.put("update_time", now); + io_mst.put("is_delete", "0"); + io_mst.put("total_qty", plan_qty); + WQLObject.getWQLObject("ST_IVT_IOStorInv").insert(io_mst); + // 插入明细表 + JSONObject row = new JSONObject(); + row.put("iostorinvdtl_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + row.put("iostorinv_id", iostorinv_id); + row.put("seq_no", 1); + JSONObject material = WQLObject.getWQLObject("md_me_materialbase").query("material_id = '" + material_id + "'").uniqueResult(0); + JSONObject unit = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id = '" + material.getString("base_unit_id") + "'").uniqueResult(0); + row.put("material_id", material_id); + row.put("pcsn", pcsn); + row.put("bill_status", "10"); + row.put("quality_scode", "01"); + row.put("qty_unit_id", material.getString("base_unit_id")); + row.put("qty_unit_name", unit.getString("unit_name")); + row.put("assign_qty", plan_qty); + row.put("plan_qty", plan_qty); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").insert(row); + // 插入分配表 + JSONObject dis = new JSONObject(); + dis.put("iostorinvdis_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + dis.put("iostorinv_id", iostorinv_id); + dis.put("iostorinvdtl_id", row.get("iostorinvdtl_id")); + dis.put("seq_no", 1); + dis.put("material_id", row.getString("material_id")); + dis.put("pcsn", row.getString("pcsn")); + dis.put("quality_scode", row.getString("quality_scode")); + dis.put("work_status", "00"); + dis.put("qty_unit_id", material.getString("base_unit_id")); + dis.put("qty_unit_name", unit.getString("unit_name")); + dis.put("plan_qty", row.getString("plan_qty")); + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").insert(dis); + return dis; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String insertDtl(JSONObject whereJson) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + JSONArray rows = whereJson.getJSONArray("tableData"); + // 插入主表 + JSONObject io_mst = new JSONObject(); + String iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + String bill_code = CodeUtil.getNewCode("IO_CODE"); + double total_qty = 0; + io_mst.put("iostorinv_id", iostorinv_id); + io_mst.put("bill_code", bill_code); + io_mst.put("io_type", "0"); + io_mst.put("bill_type", whereJson.getString("bill_type")); + io_mst.put("biz_date", whereJson.getString("biz_date").substring(0, 10)); + //获取生产区域信息 + JSONObject json = WQL.getWO("QSCH_REGION_01").addParam("flag", "2").addParam("value", whereJson.getString("product_code")).process().uniqueResult(0); + io_mst.put("product_id", json.getString("dict_id")); + io_mst.put("product_code", json.getString("value")); + io_mst.put("product_name", json.getString("label")); + io_mst.put("detail_count", rows.size()); + io_mst.put("remark", whereJson.get("remark")); + io_mst.put("bill_status", whereJson.getString("bill_status")); + io_mst.put("input_id", currentUserId + ""); + io_mst.put("input_name", nickName); + io_mst.put("input_time", now); + io_mst.put("update_id", currentUserId + ""); + io_mst.put("update_name", nickName); + io_mst.put("update_time", now); + io_mst.put("is_delete", "0"); + for(int i = 0; i < rows.size(); i++) { + // 插入明细表 + JSONObject row = rows.getJSONObject(i); + row.put("iostorinvdtl_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + row.put("iostorinv_id", iostorinv_id); + row.put("seq_no", (i + 1)); + JSONObject material = WQLObject.getWQLObject("md_me_materialbase").query("material_code = '" + row.get("material_code") + "'").uniqueResult(0); + row.put("material_id", material.getString("material_id")); + row.put("pcsn", row.getString("pcsn")); + row.put("bill_status", "10"); + row.put("quality_scode", "01"); + row.put("qty_unit_id", material.getString("base_unit_id")); + JSONObject unit = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id = '" + material.getString("base_unit_id") + "'").uniqueResult(0); + row.put("qty_unit_name", unit.getString("unit_name")); + row.put("assign_qty", row.getDoubleValue("plan_qty")); + row.put("plan_qty", row.getDoubleValue("plan_qty")); + String plan_qty = row.getString("plan_qty"); + total_qty += Double.parseDouble(plan_qty); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").insert(row); + // 插入分配表 + JSONObject dis = new JSONObject(); + dis.put("iostorinvdis_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + dis.put("iostorinv_id", iostorinv_id); + dis.put("iostorinvdtl_id", row.get("iostorinvdtl_id")); + dis.put("seq_no", 1); + dis.put("material_id", row.getString("material_id")); + dis.put("pcsn", row.getString("pcsn")); + dis.put("quality_scode", row.getString("quality_scode")); + dis.put("work_status", "00"); + dis.put("qty_unit_id", material.getString("base_unit_id")); + dis.put("qty_unit_name", unit.getString("unit_name")); + dis.put("plan_qty", row.getString("plan_qty")); + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").insert(dis); + } + io_mst.put("total_qty", total_qty); + WQLObject.getWQLObject("ST_IVT_IOStorInv").insert(io_mst); + return iostorinv_id; + } + + @Override + public void deleteAll(Long[] ids) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + WQLObject wo = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + for(Long id : ids) { + JSONObject param = new JSONObject(); + param.put("iostorinv_id", String.valueOf(id)); + param.put("is_delete", "1"); + param.put("update_id", currentUserId); + param.put("update_name", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + public void delDis(JSONObject whereJson) { + String box_no = whereJson.getString("package_box_sn"); + //将状态为包装的改为生成 + HashMap map = new HashMap<>(); + map.put("status", "0"); + WQLObject.getWQLObject("PDM_BI_SubPackageRelation").update(map, "package_box_SN = '" + box_no + "' AND status = '1'"); + } + + @Override + public JSONArray queryBoxMater(JSONArray rows) { + JSONArray total_rows = new JSONArray(); + HashSet set = new HashSet<>(); + for(int i = 0; i < rows.size(); i++) { + JSONObject row = rows.getJSONObject(i); + String package_box_sn = row.getString("package_box_sn"); + set.add(package_box_sn); + } + for(String s : set) { + JSONArray maters = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("flag", "16").addParam("package_box_sn", s).process().getResultJSONArray(0); + for(int i = 0; i < maters.size(); i++) { + JSONObject mater = maters.getJSONObject(i); + total_rows.add(mater); + } + } + return total_rows; + } + + @Override + public void update(JSONObject whereJson) { + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + WQLObject wo_dis = WQLObject.getWQLObject("st_ivt_iostorinvdis"); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + //先删除该单据下的所有明细 + String iostorinv_id = whereJson.getString("iostorinv_id"); + wo_dtl.delete("iostorinv_id = '" + iostorinv_id + "'"); + wo_dis.delete("iostorinv_id = '" + iostorinv_id + "'"); + JSONArray rows = whereJson.getJSONArray("tableData"); + // 更新主表 + JSONObject io_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + double total_qty = 0; + io_mst.put("iostorinv_id", iostorinv_id); + io_mst.put("io_type", "0"); + io_mst.put("bill_type", whereJson.getString("bill_type")); + io_mst.put("biz_date", whereJson.getString("biz_date").substring(0, 10)); + JSONObject json = WQL.getWO("QSCH_REGION_01").addParam("flag", "2").addParam("value", whereJson.getString("product_code")).process().uniqueResult(0); + io_mst.put("product_id", json.getString("dict_id")); + io_mst.put("product_code", json.getString("value")); + io_mst.put("product_name", json.getString("label")); + io_mst.put("detail_count", rows.size()); + io_mst.put("remark", whereJson.get("remark")); + io_mst.put("update_id", currentUserId + ""); + io_mst.put("update_name", nickName); + io_mst.put("update_time", now); + for(int i = 0; i < rows.size(); i++) { + // 插入明细表 + JSONObject row = rows.getJSONObject(i); + row.put("iostorinvdtl_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + row.put("iostorinv_id", iostorinv_id); + row.put("seq_no", (i + 1)); + JSONObject material = WQLObject.getWQLObject("md_me_materialbase").query("material_code = '" + row.get("material_code") + "'").uniqueResult(0); + row.put("material_id", material.getString("material_id")); + row.put("pcsn", row.getString("pcsn")); + row.put("bill_status", "10"); + row.put("quality_scode", "01"); + row.put("qty_unit_id", material.getString("base_unit_id")); + JSONObject unit = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id = '" + material.getString("base_unit_id") + "'").uniqueResult(0); + row.put("qty_unit_name", unit.getString("unit_name")); + row.put("assign_qty", row.getDoubleValue("plan_qty")); + row.put("plan_qty", row.getDoubleValue("plan_qty")); + String plan_qty = row.getString("plan_qty"); + total_qty += Double.parseDouble(plan_qty); + wo_dtl.insert(row); + // 插入分配表 + JSONObject dis = new JSONObject(); + dis.put("iostorinvdis_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + dis.put("iostorinv_id", iostorinv_id); + dis.put("iostorinvdtl_id", row.get("iostorinvdtl_id")); + dis.put("seq_no", 1); + dis.put("material_id", row.getString("material_id")); + dis.put("pcsn", row.getString("pcsn")); + dis.put("quality_scode", row.getString("quality_scode")); + dis.put("work_status", "00"); + dis.put("qty_unit_id", material.getString("base_unit_id")); + dis.put("qty_unit_name", unit.getString("unit_name")); + dis.put("plan_qty", row.getString("plan_qty")); + wo_dis.insert(dis); + } + io_mst.put("total_qty", total_qty); + wo_mst.update(io_mst); + } + + @Override + public void commit(Map whereJson) { + String iostorinv_id = (String) whereJson.get("iostorinv_id"); + JSONObject mst = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + if(!mst.getString("bill_status").equals("10")) { + throw new BadRequestException("请选择单据状态为生成的进行提交!"); + } + HashMap map = new HashMap<>(); + map.put("bill_status", "20"); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + map.put("update_id", currentUserId + ""); + map.put("update_name", nickName); + map.put("update_time", now); + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(map, "iostorinv_id = '" + iostorinv_id + "'"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").update(map, "iostorinv_id = '" + iostorinv_id + "'"); + } + + @Override + public JSONArray getIODtl(JSONObject whereJson) { + String bill_code = whereJson.getString("bill_code"); + String iostorinv_id = whereJson.getString("iostorinv_id"); + JSONArray ja = WQL.getWO("QST_IVT_PRODUCTIN_01").addParam("flag", "2").addParam("bill_code", bill_code).addParam("iostorinv_id", iostorinv_id).process().getResultJSONArray(0); + return ja; + } + + @Override + public JSONArray getDisDtl(JSONObject whereJson) { + //查询该明细下的所有入库分配明细 + JSONArray resultJSONArray = WQL.getWO("QST_IVT_PRODUCTIN_01").addParam("flag", "3").addParam("iostorinvdtl_id", whereJson.get("iostorinvdtl_id")).process().getResultJSONArray(0); + return resultJSONArray; + } + + /** + * 分配货位 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void divStruct(JSONObject whereJson) { + String region_code = ""; + String region_name = ""; + String point_id = ""; + String point_code = ""; + String point_name = ""; + String is_length = ""; + JSONObject map = whereJson.getJSONArray("tableMater").getJSONObject(0); + JSONObject jsonDtl = whereJson.getJSONObject("dtl_row"); + //出入单据主表 + JSONObject mst = WQLObject.getWQLObject("st_ivt_iostorinv").query("iostorinv_id = '" + map.getString("iostorinv_id") + "'").uniqueResult(0); + //分配表 + JSONObject jsonDis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinvdis_id = '" + map.getString("iostorinvdis_id") + "'").uniqueResult(0); + // 校验是否已分配 + if(StringUtils.isNotBlank(jsonDis.getString("struct_id"))) { + throw new BadRequestException("该明细已分配,无法继续分配!"); + } + // 校验是否已组盘 + if(StringUtils.isBlank(jsonDis.getString("storagevehicle_code"))) { + throw new BadRequestException("请先进行组盘"); + } + Boolean checked = whereJson.getBoolean("checked"); + // 自动分配选中 + if(ObjectUtil.isNotEmpty(checked) && checked) { + JSONObject jsonParam = new JSONObject(); + JSONObject jsonPoint; + if(whereJson.containsKey("sect_id")) { + //生产区域 + jsonParam.put("sect_id", whereJson.get("sect_id")); + //库区 + jsonParam.put("stor_id", whereJson.get("stor_id")); + jsonParam.put("material_id", jsonDtl.getString("material_id")); + jsonPoint = this.autoDis(jsonParam); + is_length = jsonPoint.getString("is_length"); + } + else{ + throw new BadRequestException("请选择需要分配的区域!"); + } + if(ObjectUtil.isEmpty(jsonPoint)) { + throw new BadRequestException("未查询到适用点位!"); + } + region_code = jsonPoint.getString("region_code"); + region_name = jsonPoint.getString("region_name"); + point_id = jsonPoint.getString("point_id"); + point_code = jsonPoint.getString("point_code"); + point_name = jsonPoint.getString("point_name"); + } + else{ + // 指定货位: 判断所选货位是否满足物料 + // 判断物料是否超长 + JSONObject jsonMater = WQLObject.getWQLObject("md_me_materialbase").query("material_id = '" + map.getString("material_id") + "'").uniqueResult(0); + String length_up = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MATERIAL_LENGTH_UP").getValue(); + double material_length = jsonMater.getDoubleValue("length"); + double material_length_up = Double.valueOf(length_up); + if(material_length > material_length_up) { + throw new BadRequestException("物料超长,请自动分配"); + } + region_code = map.getString("region_code"); + region_name = map.getString("region_name"); + point_id = map.getString("struct_id"); + point_code = map.getString("struct_code"); + point_name = map.getString("struct_name"); + } + HashMap dis_map = new HashMap(); + dis_map.put("region_code", region_code); + dis_map.put("region_name", region_name); + dis_map.put("struct_id", point_id); + dis_map.put("struct_code", point_code); + dis_map.put("struct_name", point_name); + dis_map.put("is_length", is_length); + dis_map.put("iostorinv_id", map.getString("iostorinv_id")); + dis_map.put("iostorinvdis_id", map.getString("iostorinvdis_id")); + dis_map.put("iostorinvdtl_id", jsonDtl.getString("iostorinvdtl_id")); + lockPoint(dis_map, mst); + } + + @Override + public JSONObject autoDis(JSONObject whereJson) { + /* + * 分配逻辑: + * 1、如果物料超长则占用两个货位并把物料放在一层 (暂时用系统参数) + * 2、如果物料超重则尽量把物料放在一层(暂时用系统参数) + * */ + JSONObject struct_jo = new JSONObject(); + String material_id = whereJson.getString("material_id"); + String region_code = whereJson.getString("sect_id"); + JSONObject jsonMater = WQLObject.getWQLObject("md_me_materialbase").query("material_id = '" + material_id + "'").uniqueResult(0); + double material_length = jsonMater.getDoubleValue("length"); + //预设的最大长度 + String length_up = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MATERIAL_LENGTH_UP").getValue(); + double material_length_up = Double.valueOf(length_up); + // 判断物料是否超长 + if(material_length > material_length_up) { + // 超长:找一层两个货位 + JSONArray pointArr = WQL.getWO("QST_IVT_DIS_01").addParam("flag", "4").addParam("region_code", region_code).process().getResultJSONArray(0); + for(int i = 0; i < pointArr.size(); i++) { + JSONObject json = pointArr.getJSONObject(i); + //查找相邻仓位,超长物料需要占两个仓位 + JSONObject jsonControlPoint = WQLObject.getWQLObject("st_ivt_structattr").query("struct_id = '" + json.getString("control_point") + "' and is_used = '1' and is_delete = '0' and lock_type = '0'").uniqueResult(0); + if(ObjectUtil.isNotEmpty(jsonControlPoint)) { + json.put("is_length", "1"); + struct_jo = json; + break; + } + else{ + continue; + } + } + } + else{ + // 未超长:判断是否超重 + String weight_up = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MATERIAL_WEIGHT_UP").getValue(); + double material_weight = jsonMater.getDoubleValue("net_weight"); + double material_weight_up = Double.valueOf(weight_up); + if(material_weight > material_weight_up) { + // TODO 查询点位改成查询仓位,需增加仓位层字段,对层进行排序,判断优先级 + // 超重: 尽量放在一层 + struct_jo = WQL.getWO("QST_IVT_DIS_01").addParam("flag", "5").addParam("region_code", region_code).process().uniqueResult(0); + } + else{ + // 未超重: 尽量放在三层 + struct_jo = WQL.getWO("QST_IVT_DIS_01").addParam("flag", "6").addParam("region_code", region_code).process().uniqueResult(0); + } + } + if(ObjectUtil.isEmpty(struct_jo)) { + throw new BadRequestException("未找到可用点位!"); + } + return struct_jo; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void unDivStruct(JSONObject jo) { + WQLObject dis_wql = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + WQLObject point_table = WQLObject.getWQLObject("st_ivt_structattr"); + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); + JSONArray rows = jo.getJSONArray("tableMater"); + JSONObject whereJson = rows.getJSONObject(0); + //解锁原货位点位 + JSONObject jsonPoint1 = point_table.query("struct_code = '" + whereJson.getString("struct_code") + "'").uniqueResult(0); + jsonPoint1.put("lock_type", StatusEnum.LOCK_OFF.getCode()); + point_table.update(jsonPoint1); + // 判断此物料是否超长 + JSONObject jsonMater = materTab.query("material_id = '" + whereJson.getString("material_id") + "'").uniqueResult(0); + String length_up = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MATERIAL_LENGTH_UP").getValue(); + double material_length = jsonMater.getDoubleValue("length"); + double material_length_up = Double.valueOf(length_up); + if(material_length > material_length_up) { + // 超长则解锁对应点位 + JSONObject jsonPoint2 = point_table.query("struct_id = '" + jsonPoint1.getString("control_point") + "'").uniqueResult(0); + jsonPoint2.put("lock_type", StatusEnum.LOCK_OFF.getCode()); + point_table.update(jsonPoint2); + } + //减去原货位的待入数 + JSONArray dis_rows = dis_wql.query("struct_code = '" + whereJson.get("struct_code") + "' AND work_status < '99'").getResultJSONArray(0); + if(dis_rows.size() <= 0) { + throw new BadRequestException("数据参数有误!"); + } + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + dis_rows.getJSONObject(0).getString("iostorinv_id") + "'").uniqueResult(0); + for(int i = 0; i < dis_rows.size(); i++) { + JSONObject i_form = new JSONObject(); + JSONObject dis_row = dis_rows.getJSONObject(i); + i_form.put("struct_id", dis_row.getString("struct_id")); + i_form.put("material_id", dis_row.getString("material_id")); + i_form.put("quality_scode", "01"); + i_form.put("pcsn", dis_row.getString("pcsn")); + i_form.put("change_qty", dis_row.getString("plan_qty")); + i_form.put("bill_type_scode", mst_jo.getString("bill_type")); + i_form.put("inv_id", mst_jo.getString("iostorinv_id")); + i_form.put("bill_code", mst_jo.getString("bill_code")); + i_form.put("bill_table", "ST_IVT_IOStorInv"); + i_form.put("qty_unit_id", dis_row.getString("qty_unit_id")); + i_form.put("qty_unit_name", dis_row.getString("qty_unit_name")); + //查询仓位信息 + i_form.put("isStructAttr", "1"); + storPublicService.IOStor(i_form, "32"); + } + //更新分配状态 + HashMap map = new HashMap<>(); + map.put("region_code", ""); + map.put("region_name", ""); + map.put("struct_id", ""); + map.put("struct_code", ""); + map.put("struct_name", ""); + map.put("work_status", "00"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").update(map, "iostorinvdtl_id = '" + whereJson.getString("iostorinvdtl_id") + "'"); + //修改明细状态 + HashMap dtl_map = new HashMap<>(); + dtl_map.put("bill_status", "10"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").update(dtl_map, "iostorinvdtl_id = '" + whereJson.get("iostorinvdtl_id") + "'"); + //更新主表状态 + JSONArray dtl_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinv_id = '" + mst_jo.get("iostorinv_id") + "' AND bill_status IN ('20','30')").getResultJSONArray(0); + if(dtl_rows.size() > 0) { + mst_jo.put("bill_status", "30"); + } + else{ + mst_jo.put("bill_status", "10"); + } + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(mst_jo); + } + + /** + * 设置起点 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void divPoint(JSONObject whereJson) { + JSONArray rows = whereJson.getJSONArray("tableMater"); + String point_code = whereJson.getString("point_code"); + JSONObject map = rows.getJSONObject(0); + //1.查询起点信息 + HashMap point_map = new HashMap<>(); + PointDto pointDto = pointService.findByCode(point_code); + point_map.put("point_id", pointDto.getPoint_id() + ""); + JSONObject mst = WQLObject.getWQLObject("st_ivt_iostorinv").query("iostorinv_id = '" + map.getString("iostorinv_id") + "'").uniqueResult(0); + //2.判断是否已确定终点 + JSONObject ios_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinvdtl_id = '" + map.getString("iostorinvdtl_id") + "'").uniqueResult(0); + if(StrUtil.isNotEmpty(ios_dis.getString("struct_code"))) { + //3.如果终点已确定,创建任务 + ProductInTask task = new ProductInTask(); + JSONObject task_form = new JSONObject(); + task_form.put("material_id", map.getString("material_id")); + task_form.put("material_qty", map.getString("plan_qty")); + task_form.put("task_type", AcsTaskEnum.TASK_STRUCT_IN.getCode()); + task_form.put("task_name", AcsTaskEnum.TASK_STRUCT_IN.getDesc()); + task_form.put("start_device_code", point_code); + task_form.put("next_device_code", ios_dis.getString("struct_code")); + task_form.put("vehicle_code", map.getString("storagevehicle_code")); + task_form.put("product_area", mst.getString("product_code")); + String task_id = task.createTask(task_form); + point_map.put("task_id", task_id); + point_map.put("work_status", "01"); + } + // 4.更新分配明细表 + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").update(point_map, "iostorinvdtl_id = '" + map.getString("iostorinvdtl_id") + "'"); + } + + @Override + public JSONArray queryStor() { + WQLObject storTab = WQLObject.getWQLObject("st_ivt_bsrealstorattr"); + JSONArray resultJSONArray = storTab.query("is_delete = '0' and is_used = '1'").getResultJSONArray(0); + return resultJSONArray; + } + + /** + * 组盘确认 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void confirmvehicle(JSONObject whereJson) { + WQLObject vehicleTab = WQLObject.getWQLObject("md_pb_storagevehicleinfo"); + WQLObject disTab = WQLObject.getWQLObject("st_ivt_iostorinvdis"); + String storagevehicle_code = whereJson.getString("storagevehicle_code"); + // 1.校验载具是否存在 + JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + storagevehicle_code + "' and is_delete = '0' and is_used = '1'").uniqueResult(0); + if(ObjectUtil.isEmpty(jsonVehicle)) { + throw new BadRequestException("载具不存在"); + } + // 2.更新分配明细载具号 + JSONObject jsonDis = disTab.query("iostorinvdis_id = '" + whereJson.getString("iostorinvdis_id") + "'").uniqueResult(0); + // 校验此明细是否已经分配 + if(ObjectUtil.isNotEmpty(jsonDis.getString("struct_id"))) { + throw new BadRequestException("此明细已分配不可组盘!"); + } + jsonDis.put("storagevehicle_id", jsonVehicle.getString("storagevehicle_id")); + jsonDis.put("storagevehicle_code", jsonVehicle.getString("storagevehicle_code")); + disTab.update(jsonDis); + } + + @Override + public JSONArray getDisTask(JSONObject whereJson) { + //查询该明细下的所有入库分配明细 + JSONArray resultJSONArray = WQL.getWO("QST_IVT_PRODUCTIN_01").addParam("flag", "4").addParam("iostorinvdtl_id", whereJson.get("iostorinvdtl_id")).process().getResultJSONArray(0); + return resultJSONArray; + } + + public JSONObject queryEmpStruct(JSONObject whereJson) { + JSONObject struct_jo = new JSONObject(); + String sect_id = whereJson.getString("sect_id"); + String placement_type = whereJson.getString("placement_type"); + String material_code = whereJson.getString("material_code"); + String sale_order_name = whereJson.getString("sale_order_name"); + //根据分切计划查询该订单物料大概还有多少未入 + JSONObject row_map = new JSONObject(); + row_map.put("material_code", material_code); + row_map.put("sale_order_name", sale_order_name); + row_map.put("sect_id", sect_id); + row_map.put("flag", "12"); + JSONArray plan_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + if(ObjectUtil.isEmpty(plan_rows)) { + plan_rows = new JSONArray(); + } + //查询该销售订单及行号有多少个生成状态的箱子 + row_map.put("flag", "27"); + JSONArray box_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + if(ObjectUtil.isEmpty(box_rows)) { + box_rows = new JSONArray(); + } + int box_num = (int) Math.ceil(plan_rows.size() / 2) + box_rows.size(); + //查询数量与订单物料箱子数量相近的一排 + JSONObject empty_row = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("sect_id", sect_id).addParam("flag", "13").addParam("sql_str", " ORDER BY abs(" + box_num + "-a.struct_num),block_num,row_num").process().uniqueResult(0); + if(ObjectUtil.isNotEmpty(empty_row)) { + String block_num2 = empty_row.getString("block_num"); + String row_num2 = empty_row.getString("row_num"); + String placement_type2 = empty_row.getString("placement_type"); + if(placement_type.equals("02")) { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '0' AND block_num = '" + block_num2 + "' AND row_num = '" + row_num2 + "' AND placement_type = '" + placement_type2 + "' AND is_delete = '0' AND is_used = '1' AND lock_type = '0' order by out_order_seq ASC").uniqueResult(0); + } + else{ + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '0' AND block_num = '" + block_num2 + "' AND row_num = '" + row_num2 + "' AND placement_type = '" + placement_type2 + "'AND is_delete = '0' AND is_used = '1' AND lock_type = '0' order by out_order_seq DESC").uniqueResult(0); + } + } + else{ + //如果查询不到空的一排,则查询有空位双通的一排 + JSONObject have_row = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("sect_id", sect_id).addParam("flag", "14").addParam("sql_str", " ORDER BY abs(" + box_num + "-a.struct_num)").process().uniqueResult(0); + if(ObjectUtil.isNotEmpty(have_row)) { + String block_num3 = have_row.getString("block_num"); + String row_num3 = have_row.getString("row_num"); + //判断该排是左边为空,还是右边为空 + JSONObject right_str = WQLObject.getWQLObject("st_ivt_structattr").query("block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' order by out_order_seq").uniqueResult(0); + JSONObject left_str = WQLObject.getWQLObject("st_ivt_structattr").query("block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' order by out_order_seq desc").uniqueResult(0); + if(StrUtil.isNotEmpty(right_str.getString("storagevehicle_code")) || !right_str.getString("lock_type").equals("0")) { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '0' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq").uniqueResult(0); + } + if(StrUtil.isNotEmpty(left_str.getString("storagevehicle_code")) || !left_str.getString("lock_type").equals("0")) { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '0' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq desc").uniqueResult(0); + } + } + } + return struct_jo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTask(Map whereJson) { + WQLObject dis_wql = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + WQLObject task_wql = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject point_table = WQLObject.getWQLObject("SCH_BASE_Point"); + WQLObject struct_table = WQLObject.getWQLObject("ST_IVT_StructAttr"); + //判断指令状态,只能修改生成状态的任务 + String task_code = (String) whereJson.get("task_code");/* + TaskDto taskDto = taskService.findByCode(task_code); + if (ObjectUtil.isEmpty(taskDto)) { + throw new BadRequestException("请输入正确的任务号!"); + } + if (!taskDto.getTask_status().equals("01")) { + throw new BadRequestException("只能修改任务状态为生成的任务!"); + }*/ + //判断入库点是否修改 + if(!whereJson.get("point_code").equals(whereJson.get("new_point_code"))) { + HashMap dis_map = new HashMap<>(); + HashMap task_map = new HashMap<>(); + PointDto pointDto = pointService.findByCode((String) whereJson.get("new_point_code")); + dis_map.put("point_code", pointDto.getPoint_code()); + dis_map.put("point_id", pointDto.getPoint_id() + ""); + dis_map.put("point_name", pointDto.getPoint_name()); + task_map.put("start_point_code", (String) whereJson.get("new_point_code")); + //修改分配表起点,任务表起点 + dis_wql.update(dis_map, "task_id = '" + whereJson.get("task_id") + "'"); + task_wql.update(task_map, "taskdtl_id = '" + whereJson.get("task_id") + "'"); + } + //判断目标货位是否修改 + if(!whereJson.get("struct_code").equals(whereJson.get("new_struct_code"))) { + //修改任务表终点 + HashMap task_map = new HashMap<>(); + task_map.put("next_point_code", (String) whereJson.get("new_struct_code")); + task_wql.update(task_map, "taskdtl_id = '" + whereJson.get("task_id") + "'"); + //更新分配表的目的仓位 + StructattrDto structattrDto = structattrService.findByCode((String) whereJson.get("new_struct_code")); + HashMap str_map = new HashMap<>(); + str_map.put("sect_id", structattrDto.getSect_id()); + str_map.put("sect_code", structattrDto.getSect_code()); + str_map.put("sect_name", structattrDto.getSect_name()); + str_map.put("struct_id", structattrDto.getStruct_id()); + str_map.put("struct_code", structattrDto.getStruct_code()); + str_map.put("struct_name", structattrDto.getStruct_name()); + dis_wql.update(str_map, "task_id = '" + whereJson.get("task_id") + "'"); + //原货位解锁,新货位加锁 + HashMap unlock_map = new HashMap(); + unlock_map.put("lock_type", StatusEnum.LOCK_OFF.getCode()); + point_table.update(unlock_map, "point_code = '" + whereJson.get("struct_code") + "'"); + struct_table.update(unlock_map, "struct_code = '" + whereJson.get("struct_code") + "'"); + HashMap lock_map = new HashMap(); + lock_map.put("lock_type", StatusEnum.LOCK_ON.getCode()); + point_table.update(lock_map, "point_code = '" + whereJson.get("new_struct_code") + "'"); + struct_table.update(lock_map, "struct_code = '" + whereJson.get("new_struct_code") + "'"); + //减去原库位待入数,加上新货位待入数 + //查询为该任务id的入库分配表,进行循环物料修改库存 + JSONArray dis_rows = dis_wql.query("task_id = '" + whereJson.get("task_id") + "'").getResultJSONArray(0); + if(dis_rows.size() <= 0) { + throw new BadRequestException("数据参数有误!"); + } + StructattrDto old_struct = structattrService.findByCode((String) whereJson.get("struct_code")); + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + dis_rows.getJSONObject(0).getString("iostorinv_id") + "'").uniqueResult(0); + for(int i = 0; i < dis_rows.size(); i++) { + JSONObject i_form = new JSONObject(); + JSONObject dis_row = dis_rows.getJSONObject(i); + i_form.put("struct_id", old_struct.getStruct_id()); + i_form.put("material_id", dis_row.getString("material_id")); + i_form.put("quality_scode", dis_row.getString("quality_scode")); + i_form.put("pcsn", dis_row.getString("pcsn")); + i_form.put("ivt_level", dis_row.getString("ivt_level")); + i_form.put("change_qty", dis_row.getString("plan_qty")); + i_form.put("bill_type_scode", mst_jo.getString("bill_type")); + i_form.put("inv_id", mst_jo.getString("iostorinv_id")); + i_form.put("bill_code", mst_jo.getString("bill_code")); + i_form.put("bill_table", "ST_IVT_IOStorInv"); + i_form.put("qty_unit_id", dis_row.getString("qty_unit_id")); + i_form.put("qty_unit_name", dis_row.getString("qty_unit_name")); + // storPublicService.IOStor(i_form, "32"); + i_form.put("struct_id", structattrDto.getStruct_id()); + // storPublicService.IOStor(i_form, "31"); + } + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void confirm(Map whereJson) { + WQLObject dis_wql = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + WQLObject dtl_wql = WQLObject.getWQLObject("st_ivt_iostorinvdtl"); + //校验主表状态为分配中、分配完 + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").uniqueResult(0); + if(!mst_jo.getString("bill_status").equals("30") && !mst_jo.getString("bill_status").equals("40")) { + throw new BadRequestException("主表状态必须为分配中、分配完!"); + } + //分配中任务状态必须全部为完成 + JSONArray dis_rows = dis_wql.query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "' AND work_status < '99'").getResultJSONArray(0); + if(dis_rows.size() > 0) { + throw new BadRequestException("存在未完成的作业,或存在组盘记录!"); + } + //将明细全部变为99 + HashMap map = new HashMap(); + map.put("bill_status", "99"); + dtl_wql.update(map, "iostorinv_id = '" + whereJson.get("iostorinv_id") + "' AND bill_status < '99'").getResultJSONArray(0); + //完成单据 + // inbillService.confirmMst(JSONObject.parseObject(JSON.toJSONString(whereJson))); + } + + @Transactional(rollbackFor = Exception.class) + public void confirmDis(JSONObject form) { + WQLObject dis_table = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + WQLObject dtl_table = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + String task_id = form.getString("task_id"); + if(StrUtil.isEmpty(task_id)) { + throw new BadRequestException("任务标识为空!"); + } + JSONArray dis_rows = dis_table.query("task_id = '" + task_id + "'").getResultJSONArray(0); + //回写入库分配表实际数量 + for(int i = 0; i < dis_rows.size(); i++) { + JSONObject dis_row = dis_rows.getJSONObject(i); + dis_row.put("work_status", "99"); + dis_table.update(dis_row); + JSONObject dtl_row = dtl_table.query("iostorinvdtl_id = '" + dis_row.getString("iostorinvdtl_id") + "'").uniqueResult(0); + //该明细下的所有分配明细都执行完成且未分配数=0,将明细变为99 + JSONArray unfinish_dis = dis_table.query("iostorinvdtl_id = '" + dis_row.getString("iostorinvdtl_id") + "' AND work_status < '99'").getResultJSONArray(0); + if(dtl_row.getDoubleValue("unassign_qty") == 0 && unfinish_dis.size() <= 0) { + dtl_row.put("bill_status", "99"); + } + dtl_table.update(dtl_row); + //判断主表是否改为完成 + JSONArray dtl_rows = dtl_table.query("iostorinv_id = '" + dtl_row.getString("iostorinv_id") + "' AND bill_status < '99'").getResultJSONArray(0); + if(dtl_rows.size() == 0) { + JSONObject data = new JSONObject(); + data.put("iostorinv_id", dtl_row.getString("iostorinv_id")); + this.confirmMst(data); + } + } + } + + @Transactional(rollbackFor = Exception.class) + public void confirmMst(JSONObject from) { + WQLObject dtl_table = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + WQLObject dis_table = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); + String iostorinv_id = from.getString("iostorinv_id"); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + //查询 + JSONArray dtl_rows = dtl_table.query("iostorinv_id = '" + iostorinv_id + "' AND bill_status < '99'").getResultJSONArray(0); + if(dtl_rows.size() > 0) { + throw new BadRequestException("主表下存在未完成的明细!"); + } + //更新目的点位,仓位、加库存 + JSONArray dis_rows = dis_table.query("iostorinv_id = '" + iostorinv_id + "'").getResultJSONArray(0); + for(int i = 0; i < dis_rows.size(); i++) { + JSONObject dis_row = dis_rows.getJSONObject(i); + //更新终点 + JSONObject jsonPoint1 = pointTab.query("point_id = '" + dis_row.getString("struct_id") + "'").uniqueResult(0); + jsonPoint1.put("vehicle_code", dis_row.getString("storagevehicle_code")); + jsonPoint1.put("lock_type", StatusEnum.LOCK_OFF.getCode()); + jsonPoint1.put("point_status", StatusEnum.POINT_STATUS_FULL.getCode()); + pointTab.update(jsonPoint1); + // 判断此物料是否占用了两个货位 + JSONObject jsonMater = materTab.query("material_id = '" + dis_row.getString("material_id") + "'").uniqueResult(0); + String length_up = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MATERIAL_LENGTH_UP").getValue(); + double material_length = jsonMater.getDoubleValue("length"); + double material_length_up = Double.valueOf(length_up); + if(material_length > material_length_up) { + // 找对应货位并更新 + JSONObject jsonPoint2 = pointTab.query("point_id = '" + jsonPoint1.getString("control_point") + "'").uniqueResult(0); + jsonPoint2.put("vehicle_code", dis_row.getString("storagevehicle_code")); + jsonPoint2.put("lock_type", StatusEnum.LOCK_OFF.getCode()); + jsonPoint2.put("point_status", StatusEnum.POINT_STATUS_FULL.getCode()); + pointTab.update(jsonPoint2); + } + //加库存 + JSONObject i_form = new JSONObject(); + i_form.put("struct_id", dis_row.getString("struct_id")); + i_form.put("material_id", dis_row.getString("material_id")); + i_form.put("quality_scode", dis_row.getString("quality_scode")); + i_form.put("pcsn", dis_row.getString("pcsn")); + i_form.put("change_qty", dis_row.getString("plan_qty")); + i_form.put("bill_type_scode", mst_jo.getString("bill_type")); + i_form.put("inv_id", mst_jo.getString("iostorinv_id")); + i_form.put("bill_code", mst_jo.getString("bill_code")); + i_form.put("bill_table", "ST_IVT_IOStorInv"); + i_form.put("qty_unit_id", dis_row.getString("qty_unit_id")); + i_form.put("qty_unit_name", dis_row.getString("qty_unit_name")); + storPublicService.IOStor(i_form, "33"); + } + mst_jo.put("bill_status", "99"); + mst_jo.put("cconfirm_id", currentUserId); + mst_jo.put("confirm_name", nickName); + mst_jo.put("confirm_time", now); + //更新主表状态为99 + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(mst_jo); + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/StorPublicServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/StorPublicServiceImpl.java index f1481400..ab55d236 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/StorPublicServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/StorPublicServiceImpl.java @@ -8,6 +8,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.WQL; @@ -30,11 +31,22 @@ public class StorPublicServiceImpl implements StorPublicService { void createStor(JSONObject from) { // 货位库存表 WQLObject wql_StructIvt = WQLObject.getWQLObject("ST_IVT_StructIvt"); - // 查询货位信息 - JSONObject jo = WQL.getWO("ST_PUB_QUERY_01") - .addParam("flag", "1") - .addParam("id", from.getString("struct_id")) - .process().uniqueResult(0); + JSONObject jo; + // 查询货位信息,半成品找仓位信息 + if(StringUtils.isNotBlank(from.getString("isStructAttr"))) + { + jo = WQL.getWO("ST_PUB_QUERY_01") + .addParam("flag", "5") + .addParam("id", from.getString("struct_id")) + .process().uniqueResult(0); + } + else + { + jo = WQL.getWO("ST_PUB_QUERY_01") + .addParam("flag", "1") + .addParam("id", from.getString("struct_id")) + .process().uniqueResult(0); + } if (jo == null) { throw new BadRequestException("点位不存在或者未启用:" + from.getString("struct_id")); } @@ -48,15 +60,17 @@ public class StorPublicServiceImpl implements StorPublicService { throw new BadRequestException("物料不存在或者未启用:" + from.getString("material_id")); } from.put("stockrecord_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + from.put("struct_code", jo.getString("point_code")); from.put("struct_name", jo.getString("point_name")); from.put("product_area", jo.getString("product_area")); + from.put("instorage_time", DateUtil.now()); wql_StructIvt.insert(from); // 更新库存变动日志 from.put("result_qty", from.getDoubleValue("ivt_qty")); from.put("stor_code", jo.getString("stor_code")); -// this.createStructIvtFlow(from); + //this.createStructIvtFlow(from); } @Transactional(rollbackFor = Exception.class) @@ -153,6 +167,7 @@ public class StorPublicServiceImpl implements StorPublicService { @Override @Transactional(rollbackFor = Exception.class) public void IOStor(JSONObject from, String change_type_scode) { + // 仓位库存表 WQLObject wql = WQLObject.getWQLObject("ST_IVT_StructIvt"); String struct_id_In = ""; @@ -161,6 +176,7 @@ public class StorPublicServiceImpl implements StorPublicService { String storagevehicle_code = from.getString("storagevehicle_code"); String quality_scode_In = ""; double change_qty = 0; + JSONObject jo; if (ObjectUtil.isEmpty(from)) { throw new BadRequestException("输入from异常,请检查"); } @@ -418,11 +434,21 @@ public class StorPublicServiceImpl implements StorPublicService { jo_in.put("bill_code", from.getString("bill_code")); jo_in.put("bill_table", from.getString("bill_table")); jo_in.put("change_qty", from.getString("change_qty")); - // 查询货位信息 - JSONObject jo = WQL.getWO("ST_PUB_QUERY_01") - .addParam("flag", "1") - .addParam("id", from.getString("struct_id")) - .process().uniqueResult(0); + // 查询货位信息,半成品找仓位信息 + if(StringUtils.isNotBlank(from.getString("isStructAttr"))) + { + jo = WQL.getWO("ST_PUB_QUERY_01") + .addParam("flag", "5") + .addParam("id", from.getString("struct_id")) + .process().uniqueResult(0); + } + else + { + jo = WQL.getWO("ST_PUB_QUERY_01") + .addParam("flag", "1") + .addParam("id", from.getString("struct_id")) + .process().uniqueResult(0); + } if (jo == null) { throw new BadRequestException("仓位不存在或者未启用:" + from.getString("struct_id")); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/rest/SemiProductOutController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/rest/SemiProductOutController.java new file mode 100644 index 00000000..25d5639e --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/rest/SemiProductOutController.java @@ -0,0 +1,166 @@ +package org.nl.wms.st.out.rest; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.anno.Log; +import org.nl.wms.st.out.service.ProductOutService; +import org.nl.wms.st.out.service.SemiProductOutService; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Map; + +@RestController +@RequiredArgsConstructor +@Api(tags = "半成品出库") +@RequestMapping("/api/semiProductOut") +@Slf4j +public class SemiProductOutController{ + private final SemiProductOutService semiProductOutService; + + @GetMapping + @Log("查询出库单") + @ApiOperation("查询出库单") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(semiProductOutService.pageQuery(whereJson,page), HttpStatus.OK); + } + + @GetMapping("/addDtl") + @Log("查询库存") + @ApiOperation("查询库存") + public ResponseEntity queryAddDtl(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(semiProductOutService.queryAddDtl(whereJson,page), HttpStatus.OK); + } + + @GetMapping("/queryDtl") + @Log("查询明细") + @ApiOperation("查询明细") + public ResponseEntity queryDtl(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(semiProductOutService.queryDtl(whereJson,page), HttpStatus.OK); + } + + @PostMapping("/getOutBillDtl") + @Log("查询分配明细") + @ApiOperation("查询分配明细") + public ResponseEntity getOutBillDtl(@RequestBody JSONObject whereJson){ + return new ResponseEntity<>(semiProductOutService.getOutBillDtl(whereJson), HttpStatus.OK); + } + + @Log("删除出库单") + @ApiOperation("删除出库单") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + semiProductOutService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PutMapping + @Log("修改出库单") + @ApiOperation("修改出库单") + public ResponseEntity update(@RequestBody JSONObject whereJson){ + semiProductOutService.update(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping() + @Log("新增出库单") + @ApiOperation("新增出库单") + public ResponseEntity insertDtl(@RequestBody JSONObject whereJson){ + semiProductOutService.insertDtl(whereJson); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PostMapping("/allDiv") + @Log("出库单全部分配") + @ApiOperation("出库单全部分配") + public ResponseEntity allDiv(@RequestBody JSONObject whereJson) { + semiProductOutService.allDiv(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/allDivOne") + @Log("分配一条出库明细") + @ApiOperation("分配一条出库明细") + public ResponseEntity allDivOne(@RequestBody JSONObject whereJson) { + semiProductOutService.allDivOne(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/allCancel") + @Log("出库单全部取消") + @ApiOperation("出库单全部取消") + public ResponseEntity allCancel(@RequestBody JSONObject whereJson) { + semiProductOutService.allCancel(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/oneCancel") + @Log("出库单全部取消") + @ApiOperation("出库单全部取消") + public ResponseEntity oneCancel(@RequestBody JSONObject whereJson) { + semiProductOutService.oneCancel(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/getOutBillDis") + @Log("查询出库单分配明细") + @ApiOperation("查询出库单分配明细") + public ResponseEntity getOutBillDis(@RequestBody JSONObject whereJson){ + return new ResponseEntity<>(semiProductOutService.getOutBillDis(whereJson), HttpStatus.OK); + } + + @PostMapping("/allSetPoint") + @Log("设置全部站点") + @ApiOperation("设置全部站点") + public ResponseEntity allSetPoint(@RequestBody JSONObject whereJson) { + semiProductOutService.allSetPoint(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/manualDiv") + @Log("出库单手动分配") + @ApiOperation("出库单手动分配") + public ResponseEntity manualDiv(@RequestBody JSONObject whereJson) { + semiProductOutService.manualDiv(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/confirm") + @Log("出库单强制确认") + @ApiOperation("出库单强制确认") + public ResponseEntity confirm(@RequestBody JSONObject whereJson) { + semiProductOutService.confirm(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/finishTask") + @Log("出库任务手动完成") + @ApiOperation("出库任务手动完成") + public ResponseEntity finishTask(@RequestBody JSONObject whereJson) { + semiProductOutService.finishTask(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/backConfirm") + @Log("出库单强制确认") + @ApiOperation("出库单强制确认") + public ResponseEntity backConfirm(@RequestBody JSONObject whereJson) { + semiProductOutService.backConfirm(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("下载发货单Excel") + @ApiOperation("下载发货单Excel") + @GetMapping(value = "/downloadExcel") + public ResponseEntity downloadExcel(HttpServletResponse response, @RequestParam Map whereJson) throws IOException { + semiProductOutService.downloadExcel(response,whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/SemiProductOutService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/SemiProductOutService.java new file mode 100644 index 00000000..a2d2b644 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/SemiProductOutService.java @@ -0,0 +1,121 @@ +package org.nl.wms.st.out.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.springframework.data.domain.Pageable; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Map; + +public interface SemiProductOutService{ + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map pageQuery(Map whereJson, Pageable page); + + /** + * 查询库存数据 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAddDtl(Map whereJson, Pageable page); + /** + * 查询明细 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryDtl(Map whereJson, Pageable page); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); + /** + * 新增出库单 + * @param whereJson + * 参数举例: + * {bill_code=, stor_id=1473161852946092032, stor_code=01, stor_name=原材料库, bill_status=10, total_qty=2, detail_count=1, bill_type=010201, remark=, biz_date=2022-01-08, create_mode=, tableData=[{material_id=1309, material_code=090301010001, bill_status=10, material_name=碳化钨粉 02, pcsn=, quality_scode=02, ivt_level=01, is_active=1, plan_qty=2, qty_unit_name=千克\公斤, qty_unit_id=1, remark=, edit=true}]} + * / + */ + String insertDtl (JSONObject whereJson); + /** + * 查询出库单明细 + * @param whereJson / + * @return JSONArray + */ + JSONArray getOutBillDtl(JSONObject whereJson); + /** + * 查询出库单分配明细 + * @param whereJson / + * @return + */ + JSONArray getOutBillDis(JSONObject whereJson); + /** + * 修改出库单 + * @param whereJson / + */ + void update(JSONObject whereJson); + /** + * 全部分配,对同一出库单明细进行分配 + * @param whereJson / + */ + void allDiv(JSONObject whereJson); + /** + * 分配一条出库明细 + * @param whereJson / + */ + void allDivOne(JSONObject whereJson); + /** + * 全部取消 + * @param whereJson / + */ + void allCancel(JSONObject whereJson); + /** + * 取消一个 + * @param whereJson / + */ + void oneCancel(JSONObject whereJson); + /** + * 设置全部站点 + * @param whereJson / + */ + void allSetPoint(JSONObject whereJson); + /** + * 出库单手动分配 + * @param whereJson / + */ + void manualDiv(JSONObject whereJson); + /** + * 出库单强制确认 + * @param whereJson / + */ + void confirm(JSONObject whereJson); + /** + * 出库任务手动完成 + * @param whereJson / + */ + void finishTask(JSONObject whereJson); + + /** + * 出库单强制确认 + * @param whereJson / + */ + void backConfirm(JSONObject whereJson); + + /** + * 下载发货单Excel + * @param whereJson / + */ + void downloadExcel(HttpServletResponse response, Map whereJson) throws IOException; + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/ProductOutServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/ProductOutServiceImpl.java index 9a79c8f0..8e195e98 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/ProductOutServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/ProductOutServiceImpl.java @@ -52,9 +52,9 @@ public class ProductOutServiceImpl implements ProductOutService { JSONObject map = new JSONObject(); map.put("flag", "1"); + map.put("bill_type","1001"); map.put("product_code",MapUtil.getStr(whereJson,"product_code")); map.put("bill_status",MapUtil.getStr(whereJson,"bill_status")); - map.put("bill_type",MapUtil.getStr(whereJson,"bill_type")); map.put("begin_time",MapUtil.getStr(whereJson, "begin_time")); map.put("end_time",MapUtil.getStr(whereJson, "end_time")); @@ -133,8 +133,8 @@ public class ProductOutServiceImpl implements ProductOutService { for (Long iostorinv_id : ids) { HashMap map = new HashMap<>(); map.put("is_delete", "1"); - map.put("update_optid", currentUserId + ""); - map.put("update_optname", nickName); + map.put("update_id", currentUserId + ""); + map.put("update_name", nickName); map.put("update_time", now); wo.update(map, "iostorinv_id='" + iostorinv_id + "'"); } @@ -165,11 +165,11 @@ public class ProductOutServiceImpl implements ProductOutService { jsonMst.put("detail_count", array.size() + ""); jsonMst.put("bill_status", "10"); jsonMst.put("remark", map.getString("remark")); - jsonMst.put("input_optid", currentUserId + ""); - jsonMst.put("input_optname", nickName); + jsonMst.put("input_id", currentUserId + ""); + jsonMst.put("input_name", nickName); jsonMst.put("input_time", now); - jsonMst.put("update_optid", currentUserId + ""); - jsonMst.put("update_optname", nickName); + jsonMst.put("update_id", currentUserId + ""); + jsonMst.put("update_name", nickName); jsonMst.put("update_time", now); jsonMst.put("is_delete", "0"); @@ -246,8 +246,8 @@ public class ProductOutServiceImpl implements ProductOutService { jsonMst.put("product_name", jsonArea.getString("label")); jsonMst.put("detail_count", array.size() + ""); jsonMst.put("remark", whereJson.getString("remark")); - jsonMst.put("update_optid", currentUserId + ""); - jsonMst.put("update_optname", nickName); + jsonMst.put("update_id", currentUserId + ""); + jsonMst.put("update_name", nickName); jsonMst.put("update_time", now); // 删除明细 @@ -1025,8 +1025,8 @@ public class ProductOutServiceImpl implements ProductOutService { HashMap map_mst = new HashMap<>(); map_mst.put("bill_status", "99"); - map_mst.put("confirm_optid", currentUserId + ""); - map_mst.put("confirm_optname", nickName); + map_mst.put("confirm_id", currentUserId + ""); + map_mst.put("confirm_name", nickName); map_mst.put("confirm_time", now); //更新主表状态 wo_mst.update(map_mst, "iostorinv_id = '" + iostorinv_id + "'"); @@ -1107,8 +1107,8 @@ public class ProductOutServiceImpl implements ProductOutService { HashMap map = new HashMap<>(); map.put("task_status", TaskStatusEnum.FINISHED.getCode()); - map.put("update_optid", currentUserId + ""); - map.put("update_optname", nickName); + map.put("update_id", currentUserId + ""); + map.put("update_name", nickName); map.put("update_time", now); //更新任务为完成 @@ -1181,8 +1181,8 @@ public class ProductOutServiceImpl implements ProductOutService { JSONObject mst_row2 = mst_wql.query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").uniqueResult(0); mst_row2.put("bill_status", "99"); - mst_row2.put("confirm_optid", currentUserId); - mst_row2.put("confirm_optname", nickName); + mst_row2.put("confirm_id", currentUserId); + mst_row2.put("confirm_name", nickName); mst_row2.put("confirm_time", now); //更新主表状态为99 mst_wql.update(mst_row2); @@ -1444,11 +1444,11 @@ public class ProductOutServiceImpl implements ProductOutService { String now = DateUtil.now(); //查询主表信息 JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); - jo_mst.put("update_optid", currentUserId + ""); - jo_mst.put("update_optname", nickName); + jo_mst.put("update_id", currentUserId + ""); + jo_mst.put("update_name", nickName); jo_mst.put("update_time", now); - jo_mst.put("dis_optid", currentUserId + ""); - jo_mst.put("dis_optname", nickName); + jo_mst.put("dis_id", currentUserId + ""); + jo_mst.put("dis_name", nickName); jo_mst.put("dis_time", now); //更新主表状态 JSONArray dtls_40 = wo_dtl.query("bill_status='30' and iostorinv_id = '" + iostorinv_id + "'").getResultJSONArray(0); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/SemiProductOutServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/SemiProductOutServiceImpl.java new file mode 100644 index 00000000..5aa52664 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/SemiProductOutServiceImpl.java @@ -0,0 +1,1495 @@ +package org.nl.wms.st.out.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillWrapper; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.enums.StatusEnum; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.modules.wql.util.WqlUtil; +import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.tasks.ProductOutTask; +import org.nl.wms.st.in.service.StorPublicService; +import org.nl.wms.st.out.service.ProductOutService; +import org.nl.wms.st.out.service.SemiProductOutService; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.*; + +/** + * PC端出入库新增 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class SemiProductOutServiceImpl implements SemiProductOutService{ + + private final StorPublicService storPublicService; + + @Override + public Map pageQuery(Map whereJson, Pageable page) { + String bill_code = MapUtil.getStr(whereJson, "bill_code"); + + JSONObject map = new JSONObject(); + map.put("flag", "1"); + map.put("bill_type","1002"); + map.put("product_code",MapUtil.getStr(whereJson,"product_code")); + map.put("bill_status",MapUtil.getStr(whereJson,"bill_status")); + map.put("begin_time",MapUtil.getStr(whereJson, "begin_time")); + map.put("end_time",MapUtil.getStr(whereJson, "end_time")); + + if (StrUtil.isNotEmpty(bill_code)) { + map.put("bill_code", "%" + bill_code + "%"); + } + + JSONObject jo = WQL.getWO("QST_IVT_PRODUCTOUT_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "bill_code desc"); + return jo; + } + + @Override + public Map queryAddDtl(Map whereJson, Pageable page) { + HashMap map = new HashMap<>(whereJson); + map.put("flag", "4"); + map.put("product_area", MapUtil.getStr(whereJson, "stor_id")); + + if (StrUtil.isNotEmpty(map.get("material_code"))) { + map.put("material_code", "%" + map.get("material_code") + "%"); + } + if (StrUtil.isNotEmpty(map.get("pcsn"))) { + map.put("pcsn", "%" + map.get("pcsn") + "%"); + } + if (StrUtil.isNotEmpty(map.get("material_spec"))) { + map.put("material_spec", "%" + map.get("material_spec") + "%"); + } + JSONObject jo = WQL.getWO("QST_IVT_PRODUCTOUT_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "ivt.struct_code ASC"); + return jo; + } + + @Override + public Map queryDtl(Map whereJson, Pageable page) { + HashMap map = new HashMap<>(whereJson); + map.put("flag", "12"); + + if (StrUtil.isNotEmpty(map.get("material_code"))) { + map.put("material_code", "%" + map.get("material_code") + "%"); + } + if (StrUtil.isNotEmpty(map.get("username"))) { + map.put("username", "%" + map.get("username") + "%"); + } + if (StrUtil.isNotEmpty(map.get("pcsn"))) { + map.put("pcsn", "%" + map.get("pcsn") + "%"); + } + String begin_time = map.get("begin_time"); + if (StrUtil.isNotEmpty(begin_time)) { + map.put("begin_time", begin_time.substring(0, 10)); + } + String end_time = map.get("end_time"); + if (StrUtil.isNotEmpty(end_time)) { + map.put("end_time", end_time.substring(0, 10)); + } + String source_bill_code = map.get("source_bill_code"); + if (StrUtil.isNotEmpty(source_bill_code)) { + StringBuilder sb = new StringBuilder(); + String[] strs = source_bill_code.split(","); + for (int i = 0; i < strs.length; i++) { + sb.append(",'" + strs[i] + "'"); + } + String str = sb.toString(); + str = "(" + str.substring(1) + ")"; + map.put("source_bill_code", str); + } + JSONObject jo = WQL.getWO("QST_IVT_CHECKOUTBILL").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "iosdtl2.material_id"); + return jo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + for (Long iostorinv_id : ids) { + HashMap map = new HashMap<>(); + map.put("is_delete", "1"); + map.put("update_id", currentUserId + ""); + map.put("update_name", nickName); + map.put("update_time", now); + wo.update(map, "iostorinv_id='" + iostorinv_id + "'"); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String insertDtl(JSONObject map) { + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + String iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + String bill_code = CodeUtil.getNewCode("IO_CODE"); + + JSONArray array = map.getJSONArray("tableData"); + JSONObject jsonMst = new JSONObject(); + + JSONObject jsonArea = WQL.getWO("QSCH_REGION_01").addParam("flag", "2").addParam("value", map.getString("product_code")).process().uniqueResult(0); + jsonMst.put("iostorinv_id", iostorinv_id); + jsonMst.put("bill_code", bill_code); + jsonMst.put("io_type", "1"); + jsonMst.put("biz_date", map.getString("biz_date").substring(0, 10)); + jsonMst.put("bill_type", map.getString("bill_type")); + jsonMst.put("product_id", jsonArea.getString("dict_id")); + jsonMst.put("product_code", jsonArea.getString("value")); + jsonMst.put("product_name", jsonArea.getString("label")); + jsonMst.put("detail_count", array.size() + ""); + jsonMst.put("bill_status", "10"); + jsonMst.put("remark", map.getString("remark")); + jsonMst.put("input_id", currentUserId + ""); + jsonMst.put("input_name", nickName); + jsonMst.put("input_time", now); + jsonMst.put("update_id", currentUserId + ""); + jsonMst.put("update_name", nickName); + jsonMst.put("update_time", now); + jsonMst.put("is_delete", "0"); + + double qty = 0.0; // 主表重量 + for (int i = 0; i < array.size(); i++) { + JSONObject row = array.getJSONObject(i); + // 校验计划数量不能为零 + double plan_qty = row.getDoubleValue("plan_qty"); + if (plan_qty == 0.0) { + throw new BadRequestException("数量不能为0"); + } + JSONObject jsonDtl = new JSONObject(); + jsonDtl.put("iostorinvdtl_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + jsonDtl.put("iostorinv_id", iostorinv_id); + jsonDtl.put("seq_no", (i + 1) + ""); + jsonDtl.put("material_id", row.getString("material_id")); + jsonDtl.put("pcsn", row.getString("pcsn")); + jsonDtl.put("quality_scode", "01"); + jsonDtl.put("bill_status", "10"); + jsonDtl.put("qty_unit_id", row.get("qty_unit_id")); + jsonDtl.put("qty_unit_name", row.getString("qty_unit_name")); + jsonDtl.put("plan_qty", row.get("plan_qty")); + jsonDtl.put("remark", row.getString("remark")); + jsonDtl.put("assign_qty", "0"); + jsonDtl.put("unassign_qty", row.get("plan_qty")); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").insert(jsonDtl); + qty += jsonDtl.getDoubleValue("plan_qty"); + + } + jsonMst.put("total_qty", qty); + WQLObject.getWQLObject("ST_IVT_IOStorInv").insert(jsonMst); + + return iostorinv_id; + } + + @Override + public JSONArray getOutBillDtl(JSONObject whereJson) { + whereJson.put("flag", "2"); + JSONArray jo = WQL.getWO("QST_IVT_PRODUCTOUT_01") + .addParamMap(whereJson) + .process() + .getResultJSONArray(0); + return jo; + } + + @Override + public JSONArray getOutBillDis(JSONObject whereJson) { + whereJson.put("flag", "3"); + JSONArray jo = WQL.getWO("QST_IVT_PRODUCTOUT_01") + .addParamMap(whereJson) + .process() + .getResultJSONArray(0); + return jo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(JSONObject whereJson) { + WQLObject dtlTab = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + JSONArray array = whereJson.getJSONArray("tableData"); + JSONObject jsonMst = mstTab.query("iostorinv_id = '" + whereJson.getString("iostorinv_id") + "'").uniqueResult(0); + + JSONObject jsonArea = WQL.getWO("QSCH_REGION_01").addParam("flag", "2").addParam("value", whereJson.getString("product_code")).process().uniqueResult(0); + jsonMst.put("biz_date", whereJson.getString("biz_date").substring(0, 10)); + jsonMst.put("bill_type", whereJson.getString("bill_type")); + jsonMst.put("product_id", jsonArea.getString("dict_id")); + jsonMst.put("product_code", jsonArea.getString("value")); + jsonMst.put("product_name", jsonArea.getString("label")); + jsonMst.put("detail_count", array.size() + ""); + jsonMst.put("remark", whereJson.getString("remark")); + jsonMst.put("update_id", currentUserId + ""); + jsonMst.put("update_name", nickName); + jsonMst.put("update_time", now); + + // 删除明细 + dtlTab.delete("iostorinv_id = '"+jsonMst.getString("iostorinv_id")+"'"); + double qty = 0.0; // 主表重量 + for (int i = 0; i < array.size(); i++) { + JSONObject row = array.getJSONObject(i); + // 校验计划数量不能为零 + double plan_qty = row.getDoubleValue("plan_qty"); + if (plan_qty == 0.0) { + throw new BadRequestException("数量不能为0"); + } + JSONObject jsonDtl = new JSONObject(); + jsonDtl.put("iostorinvdtl_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + jsonDtl.put("iostorinv_id", jsonMst.getLongValue("iostorinv_id")); + jsonDtl.put("seq_no", (i + 1) + ""); + jsonDtl.put("material_id", row.getString("material_id")); + jsonDtl.put("pcsn", row.getString("pcsn")); + jsonDtl.put("quality_scode", "01"); + jsonDtl.put("bill_status", "10"); + jsonDtl.put("qty_unit_id", row.get("qty_unit_id")); + jsonDtl.put("qty_unit_name", row.getString("qty_unit_name")); + jsonDtl.put("plan_qty", row.get("plan_qty")); + jsonDtl.put("remark", row.getString("remark")); + jsonDtl.put("assign_qty", "0"); + jsonDtl.put("unassign_qty", row.get("plan_qty")); + dtlTab.insert(jsonDtl); + + qty += jsonDtl.getDoubleValue("plan_qty"); + + } + jsonMst.put("total_qty", qty); + mstTab.update(jsonMst); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void allDiv(JSONObject whereJson) { + //出库分配表 + WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + //出库明细表 + WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + //出库主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + //点位表 + WQLObject wo_point = WQLObject.getWQLObject("sch_base_point"); + + String iostorinv_id = whereJson.getString("iostorinv_id"); + //查询主表信息 + JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jo_mst)) { + throw new BadRequestException("查不到出库单信息"); + } + + //查询生成和未分配完的明细 + JSONArray dtls = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01") + .addParam("flag", "1") + .addParam("bill_status", "20") + .addParam("unassign_flag", "1") + .addParam("iostorinv_id", iostorinv_id) + .addParam("iostorinvdtl_id", whereJson.getString("iostorinvdtl_id")) + .process() + .getResultJSONArray(0); + + if (ObjectUtil.isEmpty(dtls)) { + throw new BadRequestException("当前订单无可分配出库明细"); + } + + for (int i = 0; i < dtls.size(); i++) { + JSONObject dtl = dtls.getJSONObject(i); + double unassign_qty = dtl.getDoubleValue("unassign_qty"); + JSONObject jsonMap = new JSONObject(); + double assign_qty = dtl.getDoubleValue("assign_qty"); // 已分配重量 + + // 根据批次物料找到库存出掉 + jsonMap.put("flag", "2"); + jsonMap.put("material_id", dtl.getString("material_id")); + jsonMap.put("pcsn", dtl.getString("pcsn")); + jsonMap.put("region_code", whereJson.getString("sect_id")); + jsonMap.put("product_area", whereJson.getString("product_code")); + + JSONObject jsonIvt = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01").addParamMap(jsonMap).process().uniqueResult(0); + if (ObjectUtil.isEmpty(jsonIvt)) throw new BadRequestException("库存不足"); + + double canuse_qty = jsonIvt.getDoubleValue("canuse_qty"); + jsonIvt.put("change_qty", canuse_qty + ""); + unassign_qty = 0; + assign_qty = NumberUtil.add(assign_qty, canuse_qty); + + //更新库存 + jsonIvt.put("bill_type_scode", jo_mst.getString("bill_type")); + jsonIvt.put("inv_id", dtl.getString("iostorinv_id")); + jsonIvt.put("bill_code", jo_mst.getString("bill_code")); + jsonIvt.put("bill_table", "ST_IVT_IOStorInv"); + storPublicService.IOStor(jsonIvt, "11"); + + //生成分配明细 + JSONObject jsonDis = new JSONObject(); + jsonDis.put("iostorinvdis_id", IdUtil.getSnowflake(1, 1).nextId()); + jsonDis.put("iostorinv_id", dtl.getLongValue("iostorinv_id")); + jsonDis.put("iostorinvdtl_id", dtl.getLongValue("iostorinvdtl_id")); + jsonDis.put("seq_no", "1"); + jsonDis.put("region_code", jsonIvt.getString("region_code")); + jsonDis.put("region_name", jsonIvt.getString("region_name")); + jsonDis.put("struct_id", jsonIvt.getString("struct_id")); + jsonDis.put("struct_code", jsonIvt.getString("struct_code")); + jsonDis.put("struct_name", jsonIvt.getString("struct_name")); + jsonDis.put("material_id", jsonIvt.getString("material_id")); + jsonDis.put("pcsn", jsonIvt.getString("pcsn")); + jsonDis.put("work_status", StatusEnum.IOS_NOCREATE.getCode()); + jsonDis.put("storagevehicle_code", jsonIvt.getString("vehicle_code")); + jsonDis.put("qty_unit_id", dtl.getLongValue("qty_unit_id")); + jsonDis.put("qty_unit_name", dtl.getString("qty_unit_name")); + jsonDis.put("plan_qty", jsonIvt.getDoubleValue("change_qty")); + wo_dis.insert(jsonDis); + + // 锁定点位 + JSONObject jsonUpdataPoint = new JSONObject(); + jsonUpdataPoint.put("lock_type",StatusEnum.LOCK_ON.getCode()); + wo_point.update(jsonUpdataPoint,"vehicle_code = '"+jsonIvt.getString("vehicle_code")+"'"); + + + HashMap map_dtl = new HashMap(); + //更新明细 + map_dtl.put("unassign_qty", unassign_qty + ""); + map_dtl.put("assign_qty", assign_qty + ""); + if (unassign_qty == 0) { + map_dtl.put("bill_status", "30"); + } else { + map_dtl.put("bill_status", "20"); + } + wo_dtl.update(map_dtl, "iostorinvdtl_id='" + dtl.getString("iostorinvdtl_id") + "'"); + + //更新主表状态 + this.updateMststatus(iostorinv_id); + + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void allDivOne(JSONObject whereJson) { + //出库分配表 + WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + //出库明细表 + WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + //出库主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + //点位表 + WQLObject wo_point = WQLObject.getWQLObject("sch_base_point"); + + String iostorinv_id = whereJson.getString("iostorinv_id"); + //查询主表信息 + JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jo_mst)) { + throw new BadRequestException("查不到出库单信息"); + } + + //查询生成和未分配完的明细 + JSONArray dtls = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01") + .addParam("flag", "1") + .addParam("bill_status", "20") + .addParam("unassign_flag", "1") + .addParam("iostorinv_id", iostorinv_id) + .addParam("iostorinvdtl_id", whereJson.getString("iostorinvdtl_id")) + .process() + .getResultJSONArray(0); + + if (ObjectUtil.isEmpty(dtls)) { + throw new BadRequestException("当前订单无可分配出库明细"); + } + + for (int i = 0; i < dtls.size(); i++) { + JSONObject dtl = dtls.getJSONObject(i); + double unassign_qty = dtl.getDoubleValue("unassign_qty"); + JSONObject jsonMap = new JSONObject(); + double assign_qty = dtl.getDoubleValue("assign_qty"); // 已分配重量 + + // 根据批次物料找到库存出掉 + jsonMap.put("flag", "2"); + jsonMap.put("material_id", dtl.getString("material_id")); + jsonMap.put("pcsn", dtl.getString("pcsn")); + jsonMap.put("region_code", whereJson.getString("sect_id")); + jsonMap.put("product_area", whereJson.getString("product_code")); + + JSONObject jsonIvt = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01").addParamMap(jsonMap).process().uniqueResult(0); + if (ObjectUtil.isEmpty(jsonIvt)) throw new BadRequestException("库存不足"); + + double canuse_qty = jsonIvt.getDoubleValue("canuse_qty"); + jsonIvt.put("change_qty", canuse_qty + ""); + unassign_qty = 0; + assign_qty = NumberUtil.add(assign_qty, canuse_qty); + + //更新库存 + jsonIvt.put("bill_type_scode", jo_mst.getString("bill_type")); + jsonIvt.put("inv_id", dtl.getString("iostorinv_id")); + jsonIvt.put("bill_code", jo_mst.getString("bill_code")); + jsonIvt.put("bill_table", "ST_IVT_IOStorInv"); + storPublicService.IOStor(jsonIvt, "11"); + + //生成分配明细 + JSONObject jsonDis = new JSONObject(); + jsonDis.put("iostorinvdis_id", IdUtil.getSnowflake(1, 1).nextId()); + jsonDis.put("iostorinv_id", dtl.getLongValue("iostorinv_id")); + jsonDis.put("iostorinvdtl_id", dtl.getLongValue("iostorinvdtl_id")); + jsonDis.put("seq_no", "1"); + jsonDis.put("region_code", jsonIvt.getString("region_code")); + jsonDis.put("region_name", jsonIvt.getString("region_name")); + jsonDis.put("struct_id", jsonIvt.getString("struct_id")); + jsonDis.put("struct_code", jsonIvt.getString("struct_code")); + jsonDis.put("struct_name", jsonIvt.getString("struct_name")); + jsonDis.put("material_id", jsonIvt.getString("material_id")); + jsonDis.put("pcsn", jsonIvt.getString("pcsn")); + jsonDis.put("work_status", "00"); + jsonDis.put("storagevehicle_code", jsonIvt.getString("vehicle_code")); + jsonDis.put("qty_unit_id", dtl.getLongValue("qty_unit_id")); + jsonDis.put("qty_unit_name", dtl.getString("qty_unit_name")); + jsonDis.put("plan_qty", jsonIvt.getDoubleValue("change_qty")); + wo_dis.insert(jsonDis); + + // 锁定点位 + JSONObject jsonUpdataPoint = new JSONObject(); + jsonUpdataPoint.put("lock_type", StatusEnum.LOCK_ON.getCode()); + wo_point.update(jsonUpdataPoint,"vehicle_code = '"+jsonIvt.getString("vehicle_code")+"'"); + + + HashMap map_dtl = new HashMap(); + //更新明细 + map_dtl.put("unassign_qty", unassign_qty + ""); + map_dtl.put("assign_qty", assign_qty + ""); + if (unassign_qty == 0) { + map_dtl.put("bill_status", "30"); + } else { + map_dtl.put("bill_status", "20"); + } + wo_dtl.update(map_dtl, "iostorinvdtl_id='" + dtl.getString("iostorinvdtl_id") + "'"); + + //更新主表状态 + this.updateMststatus(iostorinv_id); + + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void allCancel(JSONObject whereJson) { + //出库分配表 + WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + //出库明细表 + WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + //出库主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + //任务表 + WQLObject wo_Task = WQLObject.getWQLObject("SCH_BASE_Task"); + //点位表 + WQLObject wo_point = WQLObject.getWQLObject("sch_base_point"); + + String iostorinv_id = whereJson.getString("iostorinv_id"); + //查询主表信息 + JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + //查询未生成和生成未下发的分配记录 + JSONArray disArr = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01") + .addParam("flag", "3") + .addParam("iostorinvdtl_id", whereJson.getString("iostorinvdtl_id")) + .addParam("iostorinvdis_id", whereJson.getString("iostorinvdis_id")) + .addParam("task_id", whereJson.getString("task_id")) + .addParam("iostorinv_id", iostorinv_id) + .addParam("bill_status", "01") + .process() + .getResultJSONArray(0); + + if (ObjectUtil.isEmpty(disArr)) { + throw new BadRequestException("不存在可以取消的出库分配明细"); + } + + for (int i = 0; i < disArr.size(); i++) { + JSONObject dis = disArr.getJSONObject(i); + HashMap map = new HashMap<>(); + String iostorinvdtl_id = dis.getString("iostorinvdtl_id"); + + // 判断此分配明细下是否有正在执行中的任务 + JSONArray dtl = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01") + .addParam("flag", "4") + .addParam("iostorinvdtl_id", iostorinvdtl_id) + .process() + .getResultJSONArray(0); + + //若存在记录,则不可取消该出库明细对应的任何分配记录 + if (dtl.size() != 0) { + throw new BadRequestException("存在出库明细对应任务执行中或完成!"); + } + + double plan_qty = dis.getDoubleValue("plan_qty"); + //更新库存 + dis.put("change_qty", plan_qty + ""); + dis.put("bill_type_scode", jo_mst.getString("bill_type")); + dis.put("inv_id", iostorinv_id); + dis.put("quality_scode", "01"); + dis.put("bill_code", jo_mst.getString("bill_code")); + dis.put("bill_table", "ST_IVT_IOStorInv"); + storPublicService.IOStor(dis, "12"); + + //删除【出入库单分配表】中分配记录 + wo_dis.delete("iostorinvdis_id='" + dis.getString("iostorinvdis_id") + "'"); + + //更新【出入库单明细表】中分配记录 + JSONObject jo_dtl = wo_dtl.query("iostorinvdtl_id = '" + iostorinvdtl_id + "'").uniqueResult(0); + jo_dtl.put("assign_qty", NumberUtil.sub(jo_dtl.getDoubleValue("assign_qty"), plan_qty)); + jo_dtl.put("unassign_qty", NumberUtil.sub(jo_dtl.getDoubleValue("plan_qty"), jo_dtl.getDoubleValue("assign_qty"))); + + if (jo_dtl.getDoubleValue("assign_qty") < 0) { + jo_dtl.put("assign_qty", 0); + } + + if (jo_dtl.getDoubleValue("unassign_qty") > jo_dtl.getDoubleValue("plan_qty")) { + jo_dtl.put("unassign_qty", jo_dtl.getDoubleValue("plan_qty")); + } + + if (jo_dtl.getDoubleValue("unassign_qty") == jo_dtl.getDoubleValue("plan_qty")) { + jo_dtl.put("bill_status", "10"); + } else { + jo_dtl.put("bill_status", "20"); + } + wo_dtl.update(jo_dtl); + + // 如果对应明细生成了任务 则删除任务 + JSONObject jsonTaskDel = new JSONObject(); + jsonTaskDel.put("is_delete","1"); + wo_Task.update(jsonTaskDel,"task_id = '"+dis.getString("task_id")+"'"); + + // 解锁点位 + JSONObject jsonUpdataPoint = new JSONObject(); + jsonUpdataPoint.put("lock_type",StatusEnum.LOCK_OFF.getCode()); + wo_point.update(jsonUpdataPoint,"vehicle_code = '"+dis.getString("storagevehicle_code")+"'"); + + //更新主表状态 + this.updateMststatus(iostorinv_id); + } + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void oneCancel(JSONObject whereJson) { + //出库分配表 + WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + //出库明细表 + WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + //出库主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + //任务表 + WQLObject wo_Task = WQLObject.getWQLObject("SCH_BASE_Task"); + + String iostorinv_id = whereJson.getString("iostorinv_id"); + //查询主表信息 + JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + // 查询此分配明细下的所有相同箱号的分配明细 + JSONArray diss = wo_dis.query("box_no = '" + whereJson.getString("storagevehicle_code") + "' and iostorinv_id = '" + iostorinv_id + "'").getResultJSONArray(0); + + for (int i = 0; i < diss.size(); i++) { + JSONObject dis = diss.getJSONObject(i); + HashMap map = new HashMap<>(); + + String iostorinvdtl_id = dis.getString("iostorinvdtl_id"); + //统计【出入库单分配表】执行状态大于等于执行中,或【任务指令表】任务状态大于等于下发时的记录和 + JSONArray dtl = WQL.getWO("QST_IVT_CHECKOUTBILL") + .addParam("flag", "4") + .addParam("iostorinvdtl_id", iostorinvdtl_id) + .process() + .getResultJSONArray(0); + //若存在记录,则不可取消该出库明细对应的任何分配记录 + if (dtl.size() != 0) { + throw new BadRequestException("存在出库明细对应任务执行中或完成!"); + } + double plan_qty = dis.getDoubleValue("plan_qty"); + //更新库存 + dis.put("change_qty", plan_qty + ""); + dis.put("bill_type_scode", jo_mst.getString("bill_type")); + dis.put("inv_id", iostorinv_id); + dis.put("bill_code", jo_mst.getString("bill_code")); + dis.put("bill_table", "ST_IVT_IOStorInv"); + storPublicService.IOStor(dis, "12"); + //删除【出入库单分配表】中分配记录 + wo_dis.delete("iostorinvdis_id='" + dis.getString("iostorinvdis_id") + "'"); + //更新【出入库单明细表】中分配记录 + JSONObject jo_dtl = wo_dtl.query("iostorinvdtl_id = '" + iostorinvdtl_id + "'").uniqueResult(0); + + + jo_dtl.put("assign_qty", NumberUtil.sub(jo_dtl.getDoubleValue("assign_qty"), plan_qty)); + jo_dtl.put("unassign_qty", NumberUtil.sub(jo_dtl.getDoubleValue("plan_qty"), jo_dtl.getDoubleValue("assign_qty"))); + + if (jo_dtl.getDoubleValue("assign_qty") < 0) { + jo_dtl.put("assign_qty", 0); + } + + if (jo_dtl.getDoubleValue("unassign_qty") > jo_dtl.getDoubleValue("plan_qty")) { + jo_dtl.put("unassign_qty", jo_dtl.getDoubleValue("plan_qty")); + } + + if (jo_dtl.getDoubleValue("unassign_qty") == jo_dtl.getDoubleValue("plan_qty")) { + jo_dtl.put("bill_status", "10"); + } else { + jo_dtl.put("bill_status", "30"); + } + + if (jo_dtl.getDoubleValue("unassign_qty") == 0) { + jo_dtl.put("bill_status", "40"); + } + + wo_dtl.update(jo_dtl); + //更新主表状态 + this.updateMststatus(iostorinv_id); + //判断是否存在同单据的同起点仓位的分配 + JSONArray flag = WQL.getWO("QST_IVT_CHECKOUTBILL") + .addParam("flag", "5") + .addParam("is_issued", "0") + .addParam("struct_id", dis.getString("struct_id")) + .addParam("iostorinv_id", iostorinv_id) + .addParam("bill_status", "01") + .process() + .getResultJSONArray(0); + if (flag.size() == 0) {//仓位载具冻结数为0 + //任务号不为空 + if (ObjectUtil.isNotEmpty(dis.getString("task_id"))) { + //更新对应任务为删除 + map.put("is_delete", StatusEnum.STATUS_TRUE.getCode()); + wo_Task.update(map, "task_id='" + dis.getString("task_id") + "'"); + } + //解锁起点仓位点位 + JSONObject from_start = new JSONObject(); + from_start.put("struct_id", dis.getString("struct_id")); + from_start.put("lock_type", StatusEnum.LOCK_OFF.getCode()); + storPublicService.updateStructAndPoint2(from_start); + //解锁终点仓位点位 + if (StrUtil.isNotEmpty(dis.getString("point_code"))) { + JSONObject from_end = new JSONObject(); + from_end.put("point_code", dis.getString("point_code")); + from_end.put("lock_type", StatusEnum.LOCK_OFF.getCode()); + storPublicService.updateStructAndPoint2(from_end); + } + } else {//仓位载具扔有冻结数,需改任务类型为拣选出库 + //任务号不为空 + /* if (ObjectUtil.isNotEmpty(dis.getString("task_id"))) { + //更新对应任务为拣选出库 + map.put("taskdtl_type", "05"); + wo_Task.update(map, "task_id='" + dis.getString("task_id") + "'"); + }*/ + } + } + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void allSetPoint(JSONObject whereJson) { + //出库分配表 + WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + //点位表 + WQLObject wo_Point = WQLObject.getWQLObject("SCH_BASE_Point"); + //出库主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + + String iostorinv_id = whereJson.getString("iostorinv_id"); + String iostorinvdtl_id = whereJson.getString("iostorinvdtl_id"); + + //查询主表信息 + JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jo_mst)) { + throw new BadRequestException("未查到相关出库单"); + } + + + // 查询此明细的所有未生成的分配明细 + JSONArray allArr = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01") + .addParam("flag", "5") + .addParam("iostorinvdtl_id", iostorinvdtl_id) + .addParam("iostorinv_id", iostorinv_id) + .process() + .getResultJSONArray(0); + + if (ObjectUtil.isEmpty(allArr)) throw new BadRequestException("当前没有可设置的分配明细"); + + for (int i = 0; i < allArr.size(); i++) { + JSONObject jsonDis = allArr.getJSONObject(i); + + // 找发货区点位 + JSONObject jsonSendOut = this.findSendOut(); + + // 创建任务 + JSONObject jsonTask = new JSONObject(); + jsonTask.put("task_type", "010502"); + jsonTask.put("point_code1", jsonDis.getString("struct_code")); + jsonTask.put("point_code2", jsonSendOut.getString("point_code")); + jsonTask.put("vehicle_code", jsonDis.getString("storagevehicle_code")); + jsonTask.put("product_area", jo_mst.getString("product_code")); + + ProductOutTask task = new ProductOutTask(); + String task_id = task.createTask(jsonTask); + + // 锁定终点 + jsonSendOut.put("lock_type",StatusEnum.LOCK_ON.getCode()); + wo_Point.update(jsonSendOut); + + // 修改明细状态 + jsonDis.put("work_status", StatusEnum.IOS_CREATE.getCode()); + jsonDis.put("point_id", jsonSendOut.getString("point_id")); + jsonDis.put("task_id", task_id); + wo_dis.update(jsonDis); + } + + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void manualDiv(JSONObject form) { + //出库分配表 + WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + //出库明细表 + WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + //出库主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + //库区表 + WQLObject wo_sect = WQLObject.getWQLObject("st_ivt_sectattr"); + + //定义需要更新的仓位集合 + HashMap Struct_map = new HashMap<>(); + JSONObject whereJson = form.getJSONObject("row"); + JSONArray rows = form.getJSONArray("rows"); + String iostorinv_id = whereJson.getString("iostorinv_id"); + //查询主表信息 + JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jo_mst)) { + throw new BadRequestException("当前订单无可分配出库明细"); + } + + // 如果是发货出库则判断运费和物流公司不能为空 + String bill_type = jo_mst.getString("bill_type"); + if (StrUtil.equals(bill_type, "1001")) { + String trans_code = jo_mst.getString("trans_code"); + String estimated_freight = jo_mst.getString("estimated_freight"); + + if (ObjectUtil.isEmpty(trans_code)) throw new BadRequestException("物流公司不能为空"); + if (ObjectUtil.isEmpty(estimated_freight)) throw new BadRequestException("预估运费不能为空"); + + } + + //查询生成和未分配完的明细 + JSONObject dtl = WQL.getWO("QST_IVT_CHECKOUTBILL") + .addParam("flag", "2") + .addParam("bill_status", "30") + .addParam("unassign_flag", "1") + .addParam("iostorinv_id", iostorinv_id) + .addParam("iostorinvdtl_id", whereJson.getString("iostorinvdtl_id")) + .process() + .uniqueResult(0); + if (ObjectUtil.isEmpty(dtl)) { + throw new BadRequestException("当前订单无可分配出库明细"); + } + + // 判断此明细是否有子卷号:没有则过滤箱号、将此箱子里的所有子卷带出来 + if (ObjectUtil.isEmpty(dtl.getString("pcsn"))) { + HashSet boxSet = new HashSet<>(); + JSONArray boxArr = new JSONArray(); + + for (int i = 0; i < rows.size(); i++) { + JSONObject json = rows.getJSONObject(i); + boxSet.add(json.getString("storagevehicle_code")); + } + + for (String box_no : boxSet) { + JSONArray boxIvtArr = WQL.getWO("QST_IVT_CHECKOUTBILL") + .addParam("flag", "3") + .addParam("box_no", box_no) + .process() + .getResultJSONArray(0); + + boxArr.addAll(boxIvtArr); + } + rows.clear(); + rows.addAll(boxArr); + } + + double assign_qty = dtl.getDoubleValue("assign_qty"); + double unassign_qty = dtl.getDoubleValue("unassign_qty"); + double plan_qty = dtl.getDoubleValue("plan_qty"); + + if (rows.size() != 0) { + for (int j = 0; j < rows.size(); j++) { + JSONObject ivt = rows.getJSONObject(j); + + double canuse_qty = ivt.getDoubleValue("ivt_qty"); + assign_qty = NumberUtil.add(assign_qty, canuse_qty); + + if (unassign_qty >= canuse_qty) { +// unassign_qty = unassign_qty - canuse_qty; + unassign_qty = NumberUtil.sub(unassign_qty, canuse_qty); + ivt.put("change_qty", canuse_qty + ""); + } else { + ivt.put("change_qty", canuse_qty + ""); + unassign_qty = 0; + } + //更新库存 + ivt.put("bill_type_scode", jo_mst.getString("bill_type")); + ivt.put("inv_id", dtl.getString("iostorinv_id")); + ivt.put("bill_code", jo_mst.getString("bill_code")); + ivt.put("bill_table", "ST_IVT_IOStorInv"); + storPublicService.IOStor(ivt, "11"); + //生成分配明细 + dtl.put("iostorinvdis_id", IdUtil.getSnowflake(1, 1).nextId()); + dtl.put("sect_id", ivt.getString("sect_id")); + dtl.put("sect_code", ivt.getString("sect_code")); + dtl.put("sect_name", ivt.getString("sect_name")); + dtl.put("struct_id", ivt.getString("struct_id")); + dtl.put("struct_code", ivt.getString("struct_code")); + dtl.put("struct_name", ivt.getString("struct_name")); + dtl.put("pcsn", ivt.getString("pcsn")); + dtl.put("box_no", ivt.getString("storagevehicle_code")); + dtl.put("storagevehicle_id", ivt.getString("storagevehicle_id")); + dtl.put("storagevehicle_code", ivt.getString("storagevehicle_code")); + dtl.put("storagevehicle_type", ivt.getString("storagevehicle_type")); + dtl.put("is_issued", "0"); + dtl.put("plan_qty", ivt.getDoubleValue("change_qty")); + dtl.put("real_qty", ivt.getDoubleValue("change_qty")); + // 如果所属仓位是虚拟区 则将分配明细状态变为生成 + JSONObject jsonSect = wo_sect.query("sect_id = '" + ivt.getString("sect_id") + "'").uniqueResult(0); + if (StrUtil.equals(jsonSect.getString("sect_type_attr"), "09")) { + dtl.put("work_status", "01"); + } else { + dtl.put("work_status", "00"); + } + wo_dis.insert(dtl); + //记录需锁定的仓位 + Struct_map.put(ivt.getString("struct_id"), ivt); + if (unassign_qty == 0) { + break; + } + } +// HashMap map_dtl = new HashMap(); + JSONObject map_dtl = new JSONObject(); + //更新明细 + map_dtl.put("unassign_qty", unassign_qty + ""); + map_dtl.put("assign_qty", assign_qty + ""); + if (map_dtl.getDoubleValue("unassign_qty") <= 0) { + map_dtl.put("bill_status", "40"); + } else { + map_dtl.put("bill_status", "30"); + } + wo_dtl.update(map_dtl, "iostorinvdtl_id='" + dtl.getString("iostorinvdtl_id") + "'"); + } + + // 判断是否还有相同物料相同仓位的明细 + if (ObjectUtil.isNotEmpty(dtl.getString("pcsn"))) { + JSONObject jsonMap = new JSONObject(); + jsonMap.put("flag", "4"); + jsonMap.put("material_id", dtl.getString("material_id")); + jsonMap.put("iostorinv_id", iostorinv_id); + jsonMap.put("iostorinvdtl_id", whereJson.getString("iostorinvdtl_id")); + + JSONArray dtlArr = WQL.getWO("ST_OUTIVT01").addParamMap(jsonMap).process().getResultJSONArray(0); + for (int i = 0; i < dtlArr.size(); i++) { + JSONObject json = dtlArr.getJSONObject(i); + + JSONObject ivt = WQL.getWO("ST_OUTIVT01") + .addParam("flag", "1") + .addParam("material_id", json.getString("material_id")) + .addParam("pcsn", json.getString("pcsn")) + .process().uniqueResult(0); + + //更新库存 + ivt.put("change_qty", ivt.getDoubleValue("canuse_qty")); + ivt.put("bill_type_scode", jo_mst.getString("bill_type")); + ivt.put("inv_id", json.getString("iostorinv_id")); + ivt.put("bill_code", jo_mst.getString("bill_code")); + ivt.put("bill_table", "ST_IVT_IOStorInv"); + storPublicService.IOStor(ivt, "11"); + //生成分配明细 + json.put("iostorinvdis_id", IdUtil.getSnowflake(1, 1).nextId()); + json.put("sect_id", ivt.getString("sect_id")); + json.put("sect_code", ivt.getString("sect_code")); + json.put("sect_name", ivt.getString("sect_name")); + json.put("struct_id", ivt.getString("struct_id")); + json.put("struct_code", ivt.getString("struct_code")); + json.put("struct_name", ivt.getString("struct_name")); + json.put("pcsn", ivt.getString("pcsn")); + json.put("box_no", ivt.getString("storagevehicle_code")); + json.put("storagevehicle_id", ivt.getString("storagevehicle_id")); + json.put("storagevehicle_code", ivt.getString("storagevehicle_code")); + json.put("storagevehicle_type", ivt.getString("storagevehicle_type")); + json.put("is_issued", "0"); + json.put("plan_qty", ivt.getDoubleValue("change_qty")); + json.put("real_qty", ivt.getDoubleValue("change_qty")); + // 如果所属仓位是虚拟区 则将分配明细状态变为生成 + JSONObject jsonSect = wo_sect.query("sect_id = '" + ivt.getString("sect_id") + "'").uniqueResult(0); + if (StrUtil.equals(jsonSect.getString("sect_type_attr"), "09")) { + json.put("work_status", StatusEnum.IOS_CREATE.getCode()); + } else { + json.put("work_status", StatusEnum.IOS_NOCREATE.getCode()); + } + wo_dis.insert(json); + + // 更新明细 + HashMap map_dtl = new HashMap(); + map_dtl.put("unassign_qty", "0"); + map_dtl.put("assign_qty", ivt.getString("change_qty")); + map_dtl.put("bill_status", "40"); + wo_dtl.update(map_dtl, "iostorinvdtl_id='" + json.getString("iostorinvdtl_id") + "'"); + } + } + + //更新主表状态 + this.updateMststatus(iostorinv_id); + //锁定点位、仓位 + Collection c = Struct_map.values(); + Iterator it = c.iterator(); + for (; it.hasNext(); ) { + JSONObject Struct = it.next(); + //锁定起点仓位点位 + JSONObject from_start = new JSONObject(); + from_start.put("struct_id", Struct.getString("struct_id")); + from_start.put("lock_type", StatusEnum.LOCK_ON.getCode()); + from_start.put("inv_type", jo_mst.getString("bill_type")); + from_start.put("inv_id", jo_mst.getString("iostorinv_id")); + from_start.put("inv_code", jo_mst.getString("bill_code")); + storPublicService.updateStructAndPoint(from_start); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void confirm(JSONObject form) { + //出库分配表 + WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + //出库明细表 + WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + //出库主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + // 任务表 + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); + // 点位表 + WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); + + String iostorinv_id = form.getString("iostorinv_id"); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + //查询主表信息 + JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jo_mst)) { + throw new BadRequestException("未查到相关出库单"); + } + + //判断分配明细中是否有未生成状态的分配明细 + JSONArray disArr = wo_dis.query("iostorinv_id = '" + iostorinv_id + "' and work_status = '00'").getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(disArr)) throw new BadRequestException("有未生成状态的分配明细,不允许强制确认"); + + //查询生成和未分配完的明细 + JSONArray dtls = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01") + .addParam("flag", "6") + .addParam("bill_status", "40") + .addParam("iostorinv_id", iostorinv_id) + .process() + .getResultJSONArray(0); + + if (dtls.size() != 0) { + for (int i = 0; i < dtls.size(); i++) { + JSONObject dtl = dtls.getJSONObject(i); + HashMap map_dtl = new HashMap<>(); + //更新明细状态 + map_dtl.put("bill_status", "99"); + wo_dtl.update(map_dtl, "iostorinvdtl_id='" + dtl.getString("iostorinvdtl_id") + "'"); + } + } + + HashMap map_mst = new HashMap<>(); + map_mst.put("bill_status", "99"); + map_mst.put("confirm_id", currentUserId + ""); + map_mst.put("confirm_name", nickName); + map_mst.put("confirm_time", now); + //更新主表状态 + wo_mst.update(map_mst, "iostorinv_id = '" + iostorinv_id + "'"); + + //查询需要更新库存的分配记录 + JSONArray diss = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01") + .addParam("flag", "7") + .addParam("iostorinv_id", iostorinv_id) + .process() + .getResultJSONArray(0); + + for (int i = 0; i < diss.size(); i++) { + JSONObject dis = diss.getJSONObject(i); + double plan_qty = dis.getDoubleValue("plan_qty"); + + //更新已出库重量 + dis.put("change_qty", plan_qty); + dis.put("bill_type_scode", jo_mst.getString("bill_type")); + dis.put("inv_id", iostorinv_id); + dis.put("bill_code", jo_mst.getString("bill_code")); + dis.put("bill_table", "ST_IVT_IOStorInv"); + dis.put("quality_scode", "01"); + storPublicService.IOStor(dis, "21"); + + //解锁起点 + JSONObject from_start = new JSONObject(); + from_start.put("lock_type", StatusEnum.LOCK_OFF.getCode()); + from_start.put("point_status", StatusEnum.POINT_STATUS_EMPTY.getCode()); + from_start.put("vehicle_code", ""); + pointTab.update(from_start,"vehicle_code = '"+dis.getString("storagevehicle_code")+"'"); + + // 解锁终点增加库存 + JSONObject jsonPoint = pointTab.query("point_id = '" + dis.getString("point_id") + "'").uniqueResult(0); + jsonPoint.put("lock_type", StatusEnum.LOCK_OFF.getCode()); + jsonPoint.put("point_status", StatusEnum.POINT_STATUS_FULL.getCode()); + jsonPoint.put("vehicle_code", dis.getString("storagevehicle_code")); + pointTab.update(jsonPoint); + + // 更新分配明细执行状态为 - 99 + JSONObject jsonDis = wo_dis.query("iostorinvdis_id = '" + dis.getString("iostorinvdis_id") + "'").uniqueResult(0); + jsonDis.put("work_status", StatusEnum.IOS_FINISH.getCode()); + wo_dis.update(jsonDis); + + // 更新对应任务为完成 + JSONObject jsonTask = taskTab.query("task_id = '" + jsonDis.getString("task_id") + "' and task_status < '"+TaskStatusEnum.FINISHED.getCode()+"'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonTask)) { + jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); + taskTab.update(jsonTask); + } + + } + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void finishTask(JSONObject whereJson) { + //出库分配表 + WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + //出库明细表 + WQLObject wo_dtl = WQLObject.getWQLObject("st_ivt_iostorinvdtl"); + //任务表 + WQLObject wo_Task = WQLObject.getWQLObject("SCH_BASE_Task"); + String task_id = whereJson.getString("task_id"); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + JSONObject task = wo_Task.query("task_status<>'7' and task_id='" + task_id + "'").uniqueResult(0); + + if (task == null) { + throw new BadRequestException("查询不到操作的任务记录!"); + } + + JSONObject dtljo = wo_dis.query("task_id='" + task_id + "'").uniqueResult(0); + whereJson.put("iostorinv_id", dtljo.getString("iostorinv_id")); + + HashMap map = new HashMap<>(); + map.put("task_status", TaskStatusEnum.FINISHED.getCode()); + map.put("update_id", currentUserId + ""); + map.put("update_name", nickName); + map.put("update_time", now); + + //更新任务为完成 + wo_Task.update(map, "task_id='" + task_id + "'"); + + // 查询此任务下所有的分配明细 + JSONArray disArr = wo_dis.query("task_id='" + task_id + "'").getResultJSONArray(0); + for (int i = 0; i < disArr.size(); i++) { + JSONObject jsonDis = disArr.getJSONObject(i); + // 更新分配明细为完成 + jsonDis.put("work_status", "99"); + wo_dis.update(jsonDis); + + // 判断此明细下是否还有未完成的分配明细 + JSONObject jsonDtl = wo_dtl.query("iostorinvdtl_id = '" + jsonDis.getString("iostorinvdtl_id") + "'").uniqueResult(0); + JSONArray disArr2 = wo_dis.query("iostorinvdtl_id = '" + jsonDtl.getString("iostorinvdtl_id") + "' and work_status <> '99'").getResultJSONArray(0); + if (ObjectUtil.isEmpty(disArr2)) { + // 更新明细为完成 + jsonDtl.put("bill_status", "99"); + wo_dtl.update(jsonDtl); + } + } + + //判断是否还有未完成的明细 + JSONArray ja = wo_dtl.query("bill_status<>'99' and iostorinv_id='" + whereJson.getString("iostorinv_id") + "'").getResultJSONArray(0); + if (ja.size() == 0) { + this.confirm(whereJson); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void backConfirm(JSONObject whereJson) { + WQLObject dtl_wql = WQLObject.getWQLObject("st_ivt_iostorinvdtl"); + WQLObject mst_wql = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + + JSONObject mst_row = mst_wql.query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").uniqueResult(0); + //校验主表状态为生成 + String bill_status = mst_row.getString("bill_status"); + if (!bill_status.equals("10")) { + throw new BadRequestException("主表状态必须为生成状态!"); + } + JSONArray dtl_rows = dtl_wql.query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").getResultJSONArray(0); + + //生成手工入库库单 + String iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + String bill_code = CodeUtil.getNewCode("IO_CODE"); + + for (int i = 0; i < dtl_rows.size(); i++) { + JSONObject dtl_row = dtl_rows.getJSONObject(i); + dtl_row.put("source_billdtl_id", dtl_row.getString("iostorinvdtl_id")); + dtl_row.put("source_bill_type", mst_row.getString("bill_type")); + dtl_row.put("source_bill_code", mst_row.getString("bill_code")); + dtl_row.put("source_bill_table", "ST_IVT_IOStorInvDtl"); + dtl_row.put("iostorinvdtl_id", IdUtil.getSnowflake(1, 1).nextId()); + dtl_row.put("iostorinv_id", iostorinv_id); + dtl_wql.insert(dtl_row); + } + + mst_row.put("iostorinv_id", iostorinv_id); + mst_row.put("bill_code", bill_code); + mst_row.put("io_type", "0"); + mst_row.put("bill_type", "000401"); + mst_row.put("buss_type", ((String) mst_row.get("bill_type")).substring(0, 4)); + mst_wql.insert(mst_row); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + JSONObject mst_row2 = mst_wql.query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").uniqueResult(0); + + mst_row2.put("bill_status", "99"); + mst_row2.put("confirm_id", currentUserId); + mst_row2.put("confirm_name", nickName); + mst_row2.put("confirm_time", now); + //更新主表状态为99 + mst_wql.update(mst_row2); + + HashMap map = new HashMap<>(); + map.put("bill_status", "99"); + dtl_wql.update(map, "iostorinv_id = '" + whereJson.get("iostorinv_id") + "'"); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void downloadExcel(HttpServletResponse response, Map whereJson) throws IOException { + + WQLObject custTab = WQLObject.getWQLObject("MD_CS_CustomerBase"); // 客户基本信息表 + WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_IOStorInv"); // 出入库主表 + WQLObject dtlTab = WQLObject.getWQLObject("st_ivt_iostorinvdtl"); // 出入库明细表 + WQLObject disTab = WQLObject.getWQLObject("st_ivt_iostorinvdis"); // 出入库分配明细 + WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation"); // 子卷包装关系表 + WQLObject tranTab = WQLObject.getWQLObject("MD_CS_TransportationBase"); // 物流公司表 + WQLObject storTab = WQLObject.getWQLObject("st_ivt_bsrealstorattr"); // 实物仓库表 + + + JSONObject jsonMst = mstTab.query("iostorinv_id = '" + MapUtil.getStr(whereJson, "iostorinv_id") + "'").uniqueResult(0); + String cust_code = jsonMst.getString("cust_code"); + + JSONObject jsonCust = custTab.query("cust_code = '" + cust_code + "'").uniqueResult(0); + String bill_type = jsonMst.getString("bill_type"); + + int j = Integer.parseInt((String) whereJson.get("j")); + + HashMap oneMap = new HashMap<>(); + // 2.获取输出流 + ServletOutputStream outputStream = response.getOutputStream(); + String code_template = ""; + int shd_dtl_num = 0; // 送货单明细数 + + // 调拨发货单 + if (StrUtil.equals(bill_type, "1004")) { + shd_dtl_num = 44; + //1.获取系统参数模板地址 + code_template = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("allot_order").getValue(); + + // 5.单组填充 + JSONObject jsonDtl = dtlTab.query("iostorinv_id = '" + jsonMst.getString("iostorinv_id") + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonDtl)) { + // 调拨单号 + oneMap.put("vbeln", jsonMst.getString("bill_code")); + // 调出仓库 + oneMap.put("out_stor", jsonMst.getString("stor_code")); + // 调入仓库 + JSONObject jsonStor = storTab.query("stor_id = '" + jsonMst.getString("out_stor_id") + "'").uniqueResult(0); + oneMap.put("in_stor", jsonStor.getString("stor_code")); + + } + String pageNow = String.valueOf(j + 1); // 页码 + oneMap.put("page", pageNow + "/" + MapUtil.getStr(whereJson, "pageNum")); + oneMap.put("consignee", jsonMst.getString("consignee")); // 收货单位 + oneMap.put("receiver", jsonMst.getString("receiver")); // 收货人 + String receiptaddress = jsonMst.getString("receiptaddress"); + oneMap.put("receiptaddress", receiptaddress); // 收货地址 + oneMap.put("receiptphone", jsonMst.getString("receiptphone")); // 收货人联系电话 + // 物流公司 + JSONObject jsonTran = tranTab.query("cust_code = '" + jsonMst.getString("trans_code") + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonTran)) { + oneMap.put("logisticscompany", jsonTran.getString("cust_name")); + } + oneMap.put("drivername", jsonMst.getString("drivername")); // 司机 + oneMap.put("carno", jsonMst.getString("carno")); // 车牌号 + oneMap.put("driverphone", jsonMst.getString("driverphone")); // 司机联系电话 + // 总箱数 + JSONArray jsonAllBox = WQL.getWO("ST_OUTIVT02").addParam("flag", "4").addParam("iostorinv_id", MapUtil.getStr(whereJson, "iostorinv_id")).process().getResultJSONArray(0); + oneMap.put("all_box", jsonAllBox.size()); + // 总毛重 + double all_box_qty = 0; + for (int t = 0; t < jsonAllBox.size(); t++) { + JSONObject json = jsonAllBox.getJSONObject(t); + all_box_qty = NumberUtil.add(all_box_qty, json.getDoubleValue("box_qty")); + } + oneMap.put("all_box_qty", NumberUtil.round(all_box_qty, 2).toString()); + oneMap.put("deliveryaddress", jsonMst.getString("deliveryaddress")); // 送货方地址 + oneMap.put("deliveryname", jsonMst.getString("deliveryname")); // 送货方联系人 + oneMap.put("deliveryphone", jsonMst.getString("deliveryphone")); // 送货方联系电话 + } else { + + if (ObjectUtil.isEmpty(jsonCust)) throw new BadRequestException("客户不存在"); + shd_dtl_num = jsonCust.getIntValue("shd_dtl_num"); + //1.根据出入库主表中 收货单位 查询客户表中的模板路径 + code_template = jsonCust.getString("shd_print_no"); + + JSONObject jsonDtl = dtlTab.query("iostorinv_id = '" + jsonMst.getString("iostorinv_id") + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonDtl)) { + // 送货单号 + oneMap.put("vbeln", jsonDtl.getString("vbeln")); + // 订单号 + String source_bill_code = jsonDtl.getString("source_bill_code"); + if (ObjectUtil.isNotEmpty(source_bill_code)) { + try { + oneMap.put("order_no", source_bill_code.substring(0, source_bill_code.indexOf("-"))); + } catch (Exception e) { + oneMap.put("order_no", source_bill_code); + } + } + } + String pageNow = String.valueOf(j + 1); // 页码 + oneMap.put("page", pageNow + "/" + MapUtil.getStr(whereJson, "pageNum")); + oneMap.put("consignee", jsonMst.getString("consignee")); // 收货单位 + oneMap.put("receiver", jsonMst.getString("receiver")); // 收货人 + String receiptaddress = jsonMst.getString("receiptaddress"); + /* StrBuilder strBuilder = new StrBuilder(receiptaddress); + + if (receiptaddress.length() > 10) { + strBuilder.insert(11,"\n"); + }*/ + oneMap.put("receiptaddress", receiptaddress); // 收货地址 + oneMap.put("receiptphone", jsonMst.getString("receiptphone")); // 收货人联系电话 + // 物流公司 + JSONObject jsonTran = tranTab.query("cust_code = '" + jsonMst.getString("trans_code") + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonTran)) { + oneMap.put("logisticscompany", jsonTran.getString("cust_name")); + } + oneMap.put("drivername", jsonMst.getString("drivername")); // 司机 + oneMap.put("carno", jsonMst.getString("carno")); // 车牌号 + oneMap.put("driverphone", jsonMst.getString("driverphone")); // 司机联系电话 + // 总箱数 + JSONArray jsonAllBox = WQL.getWO("ST_OUTIVT02").addParam("flag", "4").addParam("iostorinv_id", MapUtil.getStr(whereJson, "iostorinv_id")).process().getResultJSONArray(0); + oneMap.put("all_box", jsonAllBox.size()); + // 总毛重 + double all_box_qty = 0; + for (int t = 0; t < jsonAllBox.size(); t++) { + JSONObject json = jsonAllBox.getJSONObject(t); + all_box_qty = NumberUtil.add(all_box_qty, json.getDoubleValue("box_qty")); + } + oneMap.put("all_box_qty", NumberUtil.round(all_box_qty, 2).toString()); + oneMap.put("deliveryaddress", jsonMst.getString("deliveryaddress")); // 送货方地址 + oneMap.put("deliveryname", jsonMst.getString("deliveryname")); // 送货方联系人 + oneMap.put("deliveryphone", jsonMst.getString("deliveryphone")); // 送货方联系电话 + } + + // 6.多组填充 + JSONArray dtlArr = WQL.getWO("ST_OUTIVT02").addParam("flag", "3").addParam("iostorinv_id", MapUtil.getStr(whereJson, "iostorinv_id")).process().getResultJSONArray(0); + + + if (shd_dtl_num > dtlArr.size()) { + double all_qty = 0; + String order_no = ""; + ArrayList> flData = new ArrayList<>(); + WriteSheet sheet = EasyExcel.writerSheet().build(); + for (int i = 0; i < dtlArr.size(); i++) { + JSONObject json = dtlArr.getJSONObject(i); + + JSONObject jsonSub = subTab.query("package_box_sn = '" + json.getString("box_no") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonSub)) throw new BadRequestException("没有查询到子卷包装"); + order_no = jsonSub.getString("sale_order_name"); + + // 规格: 厚度*幅宽 + String material_spec = jsonSub.getString("thickness_request") + "*" + jsonSub.getString("width"); + // 箱号 + String box_no = json.getString("box_no"); + String sub_box_no = ""; + if (ObjectUtil.isNotEmpty(box_no)) { + try { + sub_box_no = box_no.substring(box_no.lastIndexOf("@") + 1, box_no.length()); + } catch (Exception e) { + sub_box_no = box_no; + } + } + + HashMap mapFL = new HashMap<>(); + // 明细 +// String date_of_production = jsonSub.getString("date_of_production").replaceAll("[[\\s-:punct:]]", ""); +// mapFL.put("date_of_production", date_of_production); // 批号 : 子卷包装生产日期 + mapFL.put("material_name", json.getString("material_name")); + mapFL.put("material_spec", material_spec); +// mapFL.put("qty_unit_name", "KG"); + mapFL.put("box_no", sub_box_no); + mapFL.put("qty", NumberUtil.round(json.getString("qty"), 2).doubleValue()); + flData.add(mapFL); + all_qty = NumberUtil.add(String.valueOf(all_qty), json.getString("qty")).doubleValue(); + } + // 订单号 + /* if (ObjectUtil.isNotEmpty(order_no)) { + oneMap.put("order_no",order_no.substring(0,order_no.indexOf("-"))); + }*/ + ExcelWriter workBook = EasyExcel.write(outputStream, null).withTemplate(code_template).build(); + + oneMap.put("all_qty", all_qty); // 合计 + workBook.fill(oneMap, sheet); + workBook.fill(new FillWrapper("data", flData), sheet); + workBook.finish(); + } else { + double div = NumberUtil.div(dtlArr.size(), shd_dtl_num); + double ceil = Math.ceil(div); + Integer integer = Integer.valueOf(String.valueOf(NumberUtil.round(ceil, 0))); + + double all_qty = 0; + String order_no = ""; + ArrayList> flData = new ArrayList<>(); + for (int i = j * shd_dtl_num; i < (j + 1) * shd_dtl_num; i++) { + if (i == dtlArr.size()) { + break; + } + + JSONObject json = dtlArr.getJSONObject(i); + JSONObject jsonSub = subTab.query("package_box_sn = '" + json.getString("box_no") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonSub)) throw new BadRequestException("没有查询到子卷包装"); + order_no = jsonSub.getString("sale_order_name"); + + // 规格: 厚度*幅宽 + String material_spec = jsonSub.getString("thickness_request") + "*" + jsonSub.getString("width"); + // 箱号 + String box_no = json.getString("box_no"); + String sub_box_no = ""; + if (ObjectUtil.isNotEmpty(box_no)) { + try { + sub_box_no = box_no.substring(box_no.lastIndexOf("@") + 1, box_no.length()); + } catch (Exception e) { + sub_box_no = box_no; + } + } + + HashMap mapFL = new HashMap<>(); + // 明细 +// String date_of_production = jsonSub.getString("date_of_production").replaceAll("[[\\s-:punct:]]", ""); +// mapFL.put("date_of_production", date_of_production); // 批号 : 子卷包装生产日期 + mapFL.put("material_name", json.getString("material_name")); + mapFL.put("material_spec", material_spec); +// mapFL.put("qty_unit_name", "KG"); + mapFL.put("box_no", sub_box_no); + mapFL.put("qty", NumberUtil.round(json.getString("qty"), 2).doubleValue()); + flData.add(mapFL); + + // 计算合计重量 + all_qty = NumberUtil.add(String.valueOf(all_qty), json.getString("qty")).doubleValue(); + + } + // 订单号 + ExcelWriter workBook = EasyExcel.write(outputStream, null).withTemplate(code_template).build(); + oneMap.put("all_qty", all_qty); // 合计 + WriteSheet sheet = EasyExcel.writerSheet(0).build(); + workBook.fill(oneMap, sheet); + workBook.fill(new FillWrapper("data", flData), sheet); + workBook.finish(); + } + } + + /** + * 更新主表状态 + * + * @param iostorinv_id + */ + void updateMststatus(String iostorinv_id) { + //出库主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + //出库明细表 + WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + //查询主表信息 + JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + jo_mst.put("update_id", currentUserId + ""); + jo_mst.put("update_name", nickName); + jo_mst.put("update_time", now); + jo_mst.put("dis_id", currentUserId + ""); + jo_mst.put("dis_name", nickName); + jo_mst.put("dis_time", now); + //更新主表状态 + JSONArray dtls_40 = wo_dtl.query("bill_status='30' and iostorinv_id = '" + iostorinv_id + "'").getResultJSONArray(0); + //已分配完明细数小于总明细数 + if (dtls_40.size() < jo_mst.getInteger("detail_count")) { + JSONArray dtls_30 = wo_dtl.query("bill_status='20' and iostorinv_id = '" + iostorinv_id + "'").getResultJSONArray(0); + //存在分配完的明细 + if (dtls_40.size() != 0) {//分配中明细数不为0 + jo_mst.put("bill_status", "20"); + } else if (dtls_40.size() == 0) { + //不存在分配中和分配完的明细 + if (dtls_30.size() == 0) { + jo_mst.put("bill_status", "10"); + }//存在分配中的明细 + else if (dtls_30.size() != 0) { + jo_mst.put("bill_status", "20"); + } + } + } else {//已分配完明细数等于总明细数 + jo_mst.put("bill_status", "30"); + } + wo_mst.update(jo_mst); + } + + @Transactional(rollbackFor = Exception.class) + public JSONObject findSendOut() { + + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + JSONObject jsonPoint = pointTab.query("point_status = '"+StatusEnum.POINT_STATUS_EMPTY.getCode() + +"' and lock_type = '"+StatusEnum.LOCK_OFF.getCode() + +"' and is_delete = '"+StatusEnum.STATUS_FLASE.getCode() + +"' and is_used = '"+StatusEnum.STATUS_TRUE.getCode() + +"' and region_code = 'FH01' and IFNULL(vehicle_code,'') = '' order by point_code").uniqueResult(0); + + + if (ObjectUtil.isEmpty(jsonPoint)) { + throw new BadRequestException("发货区无可用点位"); + } + + return jsonPoint; + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/WorkprocedureiosServiceOutImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/WorkprocedureiosServiceOutImpl.java index 49742eb7..73a170f5 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/WorkprocedureiosServiceOutImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/WorkprocedureiosServiceOutImpl.java @@ -282,8 +282,8 @@ public class WorkprocedureiosServiceOutImpl implements WorkprocedureiosOutServic String task_id = callMaterialTask.createTask(form); JSONObject json = new JSONObject(); json.put("task_id", task_id); - json.put("update_optid", SecurityUtils.getCurrentUserId()); - json.put("update_optname", SecurityUtils.getCurrentNickName()); + json.put("update_id", SecurityUtils.getCurrentUserId()); + json.put("update_name", SecurityUtils.getCurrentNickName()); json.put("update_time", DateUtil.now()); json.put("bill_status", "20"); wo.update(json, "iostorinv_id = '" + iostorinv_id + "'"); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_DIS_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_DIS_01.wql index 4934362d..66cddc84 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_DIS_01.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_DIS_01.wql @@ -124,4 +124,81 @@ ENDSELECT ENDQUERY - ENDIF \ No newline at end of file + ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + point.struct_id point_id, + point.struct_code point_code, + point.struct_name point_name, + point.control_point, + region.sect_code region_code, + region.sect_name region_name + FROM + st_ivt_structattr point + LEFT JOIN st_ivt_sectattr region ON point.sect_code = region.sect_code + WHERE + point.lock_type = '0' + AND point.is_delete = '0' + AND point.is_used = '1' + AND IFNULL(point.control_point,'') <> '' + OPTION 输入.region_code <> "" + point.sect_code = 输入.region_code + ENDOPTION + + order by point.struct_code ASC + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + point.struct_id point_id, + point.struct_code point_code, + point.struct_name point_name, + region.sect_code region_code, + region.sect_name region_name + FROM + st_ivt_structattr point + LEFT JOIN st_ivt_sectattr region ON point.sect_code = region.sect_code + WHERE + point.lock_type = '0' + AND point.is_delete = '0' + AND point.is_used = '1' + + OPTION 输入.region_code <> "" + point.sect_code = 输入.region_code + ENDOPTION + + order by point.struct_code ASC + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "6" + QUERY + SELECT + point.struct_id point_id, + point.struct_code point_code, + point.struct_name point_name, + region.sect_code region_code, + region.sect_name region_name + FROM + st_ivt_structattr point + LEFT JOIN st_ivt_sectattr region ON point.sect_code = region.sect_code + WHERE + point.lock_type = '0' + AND point.is_delete = '0' + AND point.is_used = '1' + + OPTION 输入.region_code <> "" + point.sect_code = 输入.region_code + ENDOPTION + + order by point.struct_code DESC + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/ST_PUB_QUERY_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/ST_PUB_QUERY_01.wql index a158b830..5c76e107 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/ST_PUB_QUERY_01.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/ST_PUB_QUERY_01.wql @@ -115,4 +115,23 @@ group by value ENDSELECT ENDQUERY - ENDIF \ No newline at end of file + ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + struct.struct_code point_code, + struct.struct_name point_name + FROM + st_ivt_structattr struct + WHERE + struct.is_delete = '0' + AND struct.is_used = '1' + + OPTION 输入.id <> "" + struct.struct_id = 输入.id + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file