From 16f34a5e3af8f0e89111746174dc882368528688 Mon Sep 17 00:00:00 2001 From: baoge <751575283@qq.com> Date: Fri, 14 Apr 2023 10:09:32 +0800 Subject: [PATCH] =?UTF-8?q?add:=E5=A2=9E=E5=8A=A0=E5=8D=8A=E6=88=90?= =?UTF-8?q?=E5=93=81=E5=85=A5=E5=BA=93=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/common/domain/query/PageQuery.java | 6 +- .../java/org/nl/common/enums/AcsTaskEnum.java | 3 + .../java/org/nl/common/enums/LevelEnum.java | 2 +- .../main/java/org/nl/config/DruidFilter.java | 4 +- .../org/nl/config/mybatis/CodeGenerator.java | 4 +- .../service/impl/EsLogServiceImpl.java | 10 +- .../service/dept/impl/SysDeptServiceImpl.java | 16 +- .../service/menu/impl/SysMenuServiceImpl.java | 10 +- .../service/role/impl/SysRoleServiceImpl.java | 2 +- .../user/impl/ISysUserServiceImpl.java | 2 +- .../java/org/nl/utils/PointLockUtils.java | 4 +- .../src/main/java/org/nl/utils/sys.xls | Bin 190464 -> 197120 bytes .../java/org/nl/wms/basedata/st/wql/stivt.xls | Bin 224256 -> 230400 bytes .../wms/ext/acs/rest/AcsToWmsController.java | 2 +- .../acs/service/impl/AcsToWmsServiceImpl.java | 2 +- .../ext/acs/service/impl/AgvInstService.java | 8 +- .../acs/service/impl/WmsToAcsServiceImpl.java | 2 +- .../wms/pda/rest/CacheLineHandController.java | 20 +- .../impl/CacheLineHandServiceImpl.java | 16 +- .../sch/service/impl/RegionServiceImpl.java | 360 ++-- .../org/nl/wms/sch/tasks/ProductInTask.java | 7 +- .../nl/wms/sch/tasks/WashMachineryTask.java | 2 +- .../st/in/rest/SemiProductInController.java | 188 +++ .../st/in/service/SemiProductInService.java | 127 ++ .../in/service/impl/ProductInServiceImpl.java | 35 +- .../impl/SemiProductInServiceImpl.java | 1087 ++++++++++++ .../service/impl/StorPublicServiceImpl.java | 48 +- .../st/out/rest/SemiProductOutController.java | 166 ++ .../st/out/service/SemiProductOutService.java | 121 ++ .../service/impl/ProductOutServiceImpl.java | 38 +- .../impl/SemiProductOutServiceImpl.java | 1495 +++++++++++++++++ .../impl/WorkprocedureiosServiceOutImpl.java | 4 +- .../java/org/nl/wms/st/wql/QST_IVT_DIS_01.wql | 79 +- .../org/nl/wms/st/wql/ST_PUB_QUERY_01.wql | 21 +- 34 files changed, 3603 insertions(+), 288 deletions(-) create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/rest/SemiProductInController.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/SemiProductInService.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/SemiProductInServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/rest/SemiProductOutController.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/SemiProductOutService.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/SemiProductOutServiceImpl.java 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 168c440c143764b3562db6e8a62a4fee82059cb8..699768be3a92cfa02716c08c6d1ee7fc3a75ab9c 100644 GIT binary patch literal 197120 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
t{bSmbah<~XLfMniQqi_=r=_B8-%d+Kr4FQ( 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 z zb#0tpO`=~RS^&B;kW3`{Ix8uzw1L(H5H+{xCfsJNHSoT+NYG)2+gYllQp!ZEC?z2% zwGd9@22x8HGmKN%j(GF+yu%l%bxdI0a`L=7jEYAwUKCwbFRLUc)Kn}|FG@HJ1s7Oy zb0G5%6wD#}bGf5Y=MV^M9qTpJ2Eq$48Vzx)C8~+rY@v|AiW|2`KuX>63|&b?JPA{x zT7rHOWSP~aZ2Kr!I@YZp&D=7<@fxb(*uOqAt~of0l&pOzeTQLUsKBXkptTCfEW<%) zaYn511DOT6J(SYPM_%@=VKt=sxggg7$WAZ)fCD~fXp zD%R0QLZ)_YaWA^PuDV}+WV+_mHgTt6Y}~NqI7fBYRJjAbD5e971O$oYD3YPvwBS`k zR>Fs{Xc+m;oT&k!6DK1na)fgdjKjU<-eOO}<;W2%xbbq!h)&Q6w`(|ZWZ@ij zI2tWVjREKpkfXM?<;0HE$iCce%$&-}EkKSa!!)`HR%Pr|V93h~;aj2Z%h}W#N#<`Ah6si0CTd#Xre4j31X`o4g3%?s7bjIYC zwFy}ej;48ys~F~EpM4uE|JTes(+fam8Y;RMpY%%l&}&6hTWQrJrG26>Vif7+=fvhy zlEoCzt(Pn>p&{47J9Sj47T0O|5^ALLZQi)H_Fkd}sMbZ|3uLQR+OTq_@_y;UgYzy5 zS-XTiseqNW-&AXZGid|)gi=L!26r}H1|6IDjG;q)qGasaF!o=`Sph(@eDAhO-t_y4 zZFpWfK(MN1v6qox^~9ab-risoFBh#=vF%Ab$r@cEV$b+*5p99#g|g1{P4j~KWPX~@ zhdHOTB~s!fw>FGs|9P8R$Z-*;# zMQQPc$BUN}kK4Z-*jv;H^}d5U58jviVqd!Iws|QJ?`f4T@JVXO zcq#FvC8CZHVN$4Xu^jrKLh+|a+liQS<4=hraTvoHL7s5t;Jb@Liey;V~eY?Ka#ZoXr7XK*AY@f!%?`R#{2FrZ6Fj z@Mc4}EJ_oek6sV-fKdV>6eK$Ng;GHfEdzrT)iIVB0c}!D8Os?buu3#WkxXLEm63K) zqp%B<_0mXI3D{6Ya$x&G?o>LsQ{hZ@jEQ)AZ=!|h?{>g5uQe;*Gqs#i)Fa} zwR(n`mf`xBBN<+ZccZu-tPRN%s`09g<8D#2qI}tm<{iy6n0?l{@twf2hhY%kMX^lo z)F$nf>TkM^O5nfIB^s|-5}d-VhJlYpel<)36kISW>Tka0sVoxj@gy>aZI#V&hI}~A z;k^Y66=r)SNQXJ?DuZO)iKR2`4mTxjns~yQE1*f?Oi?6z^cC~!6WMz2VUh!l^>Uek zlD+_@hGaxJku#l+hi9Yz6Ob>Zh4pkXZnsc6(1K!iRqFJ^}Yzuo+jQe!n659&} z7Kg)!UzIw1LDUug0j=wjpA_o9r&lC=PbdD9ZltXv)V>w3=F{c*^b%`jBmECQ!YS!^ z!&;uM`@AlT6c{Y41?UT{?%=Z%8M`HUC)F0Fqe!|ci=!DL+lFbD%^cb211k)cP;bmV zQzxh-Jjt-uS~!xi7i8Mv8r%Hxss*wVg=&2I(%pL)CJ0Y_3mabnY9nJ;GzMoCB+c;cp4)H{*MJOQ(Znq{9|Jy?UuVo{pT~>kH7koUL%g zoeiDwX*Fw=3WU~06((wL%K3D*=wnUA{I^V!okWVg*_MrqUd9bFPTkn{#)MBZ1do_KonZz5! zWQH(9s1{U6v@BMNM00C?5dP`zBZqP*-bTYm4BA);mMZ(v>5{4n?N^eUMGT zfmU{%V~2J+$cfhJ)dC|i6>`#IeV}qxktLz%2UZt!@8q=}A&lMdl)r?n9w5 z)GO30*sDX)P%P+3Y+3rjxCz4K@nM1LjL@z1ipJ)4xu0T209)=|#@4JVw4fsKl{(8) zV@EG}@&Kb`5}az0>H(pujq_vGfsU-2Wi2g{_mXqPmA+zYY3X#TRokj<*z(eaj%M*z zd+3aOr|*m;*ZJ_bLkhfq*mBIF|nrA%B`sI&UJ~Gxz1HqQ21HxjKQ4*xN+E>3A#XOql-zy z){$M&PBNK3`JT_hjMJ#0Og%NO=&r4j1VVh$_j~CoE5!8s66YO@E2k#xkE>}9cvqt? z)=hVC+B%!2cg*Q;$D~S?f$Ey!Dnnq4;zzYQ>c^Vr#bXQZqcWsFB}!S1&VQ_Q-`9J- zw)y=MBlVH8lPa=hKmJWmy(}G@|IxjIc<&O5-F1pB@8P{Sbtbg=oOIEGo>6-yHiVdj zuRj|0u+O`n?K=^ zCBQ$@-v9z)3HWB>oJ%@*6A_k5e1ycxBgaa!MRVjbrs+6*Po01YR-hDl`AsET0A(p) z#U9Kr5n);D7(iIwXn4tCEYOh{OGznbg|iGu1ZVSS13RDEDDiE>K2xch{W#HrLt2fY zfVB{5IovKE*ZE}H?)E{1wb92eDO_CH7>WpMM%DavqwGOmx`1K&AGUiXZ1+ms=0(XG zZR@foRrpBDw=her+jP9yA1>TF+#<-jK;LW;Xkr*K;Hs~{apO9P-C1c87)-Rzai8i6 zj#s{gT*L9M0*;ra>fe26os5JQl4*HYal8{Zcr}O8%hSR9Ly$YN?D%1O<10rxfgXao zh_?#*^{A8;tjj$*(W_Y^dfIW|&btF`4+S3Cz9Dd;*XqE^F?O2?7OEL9w>1-Q4;XJa zbOlm7GU)`PkbGcZ$R)PIIqyiu(=)1%_z7g?Z8V@YsVps>708jmw{eD0Duw-ACE+Xz zD}l~~q{Qjx9<8k36(HcSUJtP4fc7}7*DtVqy*Gwsotb*#`^92w(@{}B;``ZaMhr`Q z+^BDS&uTz@JtH;ii&v(zKLX-wyXW}Kqodmc$1vxP5Yh&iucs|T6QyaG_~cPp?xb+K zC%Q-qKNQlD3nclthcXyE{~wBl6yQ#NlOLV6n;t zR`RW!M|PJFy}KHz<6LRh=P8 zWFw83kZ>XZU_!+^Pf;yFN(Qx71W+M|2?@W(!REDbOX&t#)Pm`)XM_&(+SwE7mZGYn zj_`%8MG;bajY$8Nco9xO z&e-auyId)z1?`LGNcoiu4T1}q}$)pSf zbexrytR>pE%*i>o)7aB9vR&WNBxdO?`$A0g*kd0|e({l)8Xw>DLFE2GtIg@H>(TsR zA&3}Pj@&2QCwxZe>O6h;^uE&_Pai6qvi7VzcZAO&^62T#)5<%L<06$de*0a;E*y{At<(|h_k|K8JCf{)0C=ZVLwF9Ft=1(XcRO}E!r zaPT|c`(sXvOx$Rve}PcGiRDn2qzYMeLJ*g-=?pOGBS9ZA)84PwG1yVD6HhTLZ$Jzx ziSxE9ff_JQif^1i17db&w4hB$C7*zrXy%}S&BwP2RB)4TgwmTdvqM(+q#sRYV(jTIt=Q^>JsevN+_ z2BJzVtGQn?z0<+Qv2&Dh&ZMZY*Hw0;CF;01C&y9S-o1~CeVvguQKSRVm2-d0w9a+T zqanHXnHa~cT>)CA?1!#6{p17eQ9mlK3+&n~GeDx!j0rNYin?_2jWq$8b%~CUT2qAg zJ7MzOUgjr@Qxzw{tiBJmTF)h&5xo)fh2$JN?Q9U>s;-vK)QQ$t^bzrG8C_CW#+n6y zt9-KCViI31X$nA&Oo>ap?K=TG$*En{jpXQVL2piC#y0Hl6EC zuh9W2V)wVCDx?WM)_KKa8p+OMoXHaBRWy7nONCH(`@4N*WYB^Pi}CT@Nf&%#e3w`c zH?C=rTBS*2GGZilGQy|y!&gUmF)va;ZU@#`Q-K+qEbNK3c+CfCEQ`lLN@T`N4}<2M zM?h`EqHH#O5o0hSCnvg0+a&x>30ktO3fvW&6P{5!YjE%4(wGPc(hoIy4FUGh`E z`0#_l@!r%yx!b2E@i^6VwUC|Z)eJ2-87-cGe3?o8z{Q7v)za;3O@C>4`y*7O)mz8& zXKpm~S1@KrH1wuwy42P)qr9wKPDJ0RSPPX-js2>isMg6$UOwUwnW}tNE;~aCmAF5} z7grrcOMC+ftT_U=WmV1tW^0OS+JVPe#%S-@#z}@-78vstW<}DYAR3k&p!x(?aaia4 z)?K7j&-{x*ChHeU@P2b2#mj{GO9dUntWrQ_x&~^|qQ+7B2C9}yz@NmT2C9ZKQv1Ch zkW`GN%0tIezSe5*!~5CW!4f6pm-#|bY)kwxSdHYkEH!PnjQW6_RLXRQc`DTju)wMw z4r^RLg)J@w9;**UM1y0)DdXsGBVBvwlH`Vu>i=?1eDJ-DQyHgRBWKnL9vCz1<7VNK zn7&v;dh0rR_WNU>w7uU=FRLpRHe{SST7nsqK5t_(PF4S9slTZFDHoQhbGDcnaUxe?3`;m#-vr%>@NpknQ*fIgC%?rRd>YOV~n z+q|p}Z$&B~8s{-YG%EQMqVP`1-ZfIMm^D$2wx`eQ&GVKz<YQ0e7r*1rYYF_p$MI2>+AIa`NC|^pD-8ii?O#hg4#ddh6*Ye5VnyXT%5)@)xdZW% z^OG~jvJfp1XMw-MPmz#4(=m&hg|v^EmS+%ho8}MJvYCl&*QETQ_%5276yn|>pK(^0 zv8b_8XjJ&8P^%}!NUYg*IV=O8pyRLMj|9#*hvY{5QBOeB@tsE-6^6}7 zg~*-_3=1@jn(ef1tccj_N2we9p7?9|{D}Wr=%>>9X%BpROJ1aU#%gg~ z3_Z$0IOd3Q0^R4BqY0XwD+BLgQ}-;NnLePV+BUh9&1)tdx>oAdDLv9eW#}mj(Uov4 z((S%J%!>jrwQZ$#3&X9pj)2PYvNwE*NL4_^QHG+NX=Ck5{}IChJ89?0n-D!Ab_yke zP-+xK{%4LEWC1Mn+6nA8CAF{}yco{aaK71NB%vwXBo01d+?&O3q9io_69J#Eh|D6H z#7K%r0hvzn$s}SXCNkqDD&e!h^SS3@8}PW9f+g_$hrxLw9)Ikqd|CWe!ut#1JRHK! zK3@sXZ(^|Y)z7c|9X-#N5BLM`9}dq?=8F>w;xq&S1O|c-f(U{bf&_vTf((Ke1aAm( z2nq;35PpLf_JuPn5QDW7ApsBqAp}7f24Oga5fDZ~K!6Q~Fd9M#gir`9gfIvy2v`?} z2#7~QP(#o_h=PFWF>sEB5C3?0|e272+XME6Ga1M1(QpiG+c<}RoirG^EX6Dm8jqP?{d-p%W^QiydXAQIs)-Uq#x!__0c+dXW zc0LC8Z{cH})>C9EEY7WjfPZ=jsqi_AG!o}d0mm7GVkUQdAdN4_|0V(sxRdKmdL=E4K7M?;8kr{!P**Q*>fxUcxUp8Nw>12MkTz_lmFRlwEA zr(7?eC%>nK0G)sQ`0Y(>JXU!n#9;~yPDjV}{GZHN0MygHk-jwrPPiAhWXXg_L) z*%xnHA3)%9F)+8JK$D(CLf}3qA_54FrJ~7PGVuziO9U#NeFdy}AS({2Hy^(d)P<8o z5)bej4zL>zCC0%M3V{EpCiCIfN){3L*gNngmBa?T2{>&d%K*}oNfhJ*<7&9S2!5-s z$TgQtff6NLEq1tDMt}_`V1@$q)j~a`P?qO4Jm(Z>gU+35CU})a^58EV@*z)D4<#$1 zj!Zb)xw^4c$S1MHNNV7(l1sJ1lghdF*gajxoiqD;E)kT6N$}3P{=P|q=Ow{a9Q-D5 zsc~>W69Ud=?B7H#M*^I)AtZA(+zD++-x&HH%PKIkxFhDQVKz;Ghla=rnPG-V2KVD!@34P*uMj@nQ zk6R(99s1wKmBw-8+m5X$CKZqhIxk4ggIbHB1dbCJ4Zvt;awV)V-h+>q$xx7py*B`B zgJU-biF)qs`Tpb~aW=FEoK-*{EQR*Zg}wxX8hE>W2+1%ObK$CvyN~dRTr;vm4XJ>22n z&IosLjwQk$pRNZ?9?p#%j^f~Vx&EyB@6DuqXk#|GBr-v}bns-HeF$>{b7-j9I2a~b zt{g(%jp1Q%zkNOk0MWjF=(~QV}xJ zAP2%k9CrsiSV3MLpC zh*d%yyl6qb8i<(zGnc?sCG;$gB@YJ!?;Q{KmO-uILt^KFe80DUfIB5;;?43cJtLKC z;%UpKDP9LrV(|1CPlNQ(A4$*)DbOo?%9Xg{<}d`}N2FEP$GAvsJlGO@tq$_z+)aRZ z1z?6{WCirh&E*vdXbCr*mn8e+~WXvq=?Hw$Y>z0KS^Fb`s5g-VQ+DmK>_c>WjXVucQxix4^nM2PJ5ud37#*DR zNl-&LePuqE>)gHW`tY@%16B__`~k=et^UDk5n*0kt&YBa8J7zsL_CJ$BO*Ya!#5dd zZ5r3wgdwU;xT3XbQ0{GaRobDe(sNZI61=*FNmo>*hpPVmF4rjdI^vM6O6ICc8ltL{ zE2>I{s{UEaS7jNf$`9Be9)Wt0nU1RvTXuEZqUfP=yIjw}mv``3##MX#>V8Y&Dn!og z>I!?WXd#Y!#N&KbEdwnaJOq5(kd?l=s*6`trGu&(UgxWNa_FiOxmKkOQPp=>RFw!- zEqI=<$~kmZDO^?KhN$X?E2>I?s?s;}RdL@ZxfaG!xvItwQPrg@s!D~bo_mb1s&AlG zib3FtYy{4OTZX9YC;IA~Fp5EZbrMu$@GZMC6W{siLsa+6Rn=klCrsq4W3N{oKL;iZ zQQfasRfn@+A$Izuvu}(h=B)O2;%Dk-_({ z(SxrC$8jzWzV^hi-#l?VU=CF`g2hnjgVV@$$_~!+d*e8L|6Liq!8bX1 z>*h)OnJ=p{zxpN+^CSInzNEh6%MU`0huIe&VI$ikJn4$}3f_AC>}z=)<6cq(z3F?( zlWr`(aEN|1>%;RHbvssT<{5bn|_KieO`aRB|e;rm= zP1+o#-FHCt>Jd-+jHlDaWRK6yY0jSVU$0IZcQ;ZKe6NMh&n{Ow%v1jS)UcV~eQDe6 z$*;Y5K%Pdc-7^{K}eznisr?sv}GmajiY?27g5y8LGJn5AFj zyrP?Mj(tbH#FHP-PeKL<5{wdaz_*N;s$p#IdK_81N3@%K29l=R%FLzZb!!|T0JHuN>f?;ITN6=1i zW?H?}=Z9;G==mbw{{%(c#+0>-^wChnn*kM@N5i&o)w%xWr1e2_+)dMeJrGa+2gD@| z@5eV&zkQ5_c=1=9Ge>j%dh8|cHoEZ5yZg|<^=)wdn$bc68FXdo@#yPu=sV+`53nv= z&U9OQjfT7;a21ArPsW+?v88YauOc!mgks7qN*uaUOnK)#j#D`};{A4sg($Jh_^qGl z{Sll$c33UMzrVY{y{y~2tSzYo>)S9lqo&M2G;pqzxx9QdPg`=RaG3 zmG$h$;wG7T5Gk)3}D9Rno|N zFggpjg`J-a&1X0@sK?!C-sUf_ftW-dVrDJ35FdALv^cVXchbE3p13A^5}*Bo6CsMP zJgZm_c`wbpCT}XA_qJs?+I-$A%OUGm;n!qMp zK$4WN9Iciua)dU{r^UFhF$(SnD@!jY;7fRRVc2wU*5WPnVP{K{VKobjp&Bu98(Wqs z5KcV}=J&Hd1g()W{Jt63HnRmlnPJdq@T3%DHi&%Qa5951ntq|tUDm`1rggl6EErG@Yt4)tK#z!3%MfmfvP_jK^w zV3Gj!1d}AFXEaHHdP0WCIZ)S?v0hpPpB}$Ri;0?iM@vBW&44zBz#C&f{NM3^J@B9H zf!wTg)ygchIZ3ZGn&VOulXP*3nda=cw8Z3;xa90iQ({)4)|_Zgx)atmv#Lw#7ul-n z(g(9-V@73eWlTqmaWfD)5e)oQ&Qq|I+HmrEju|iPOCK^e-pTS$v3!{c7uER8{A8}!9Cp#?j_#f zUdj#brQYD4PJ5%9H)@UU%2!0Hm#!KR4PY>HY?U>pYS`tttPX)d3rVwVwRRv|fS7Bn zb>-k>AVHt5N=Qr4>-8|ckij%%V!A3VHO-i6G8)rhC$M=`g4yr+)&ac9!>Jaj@TK>o6iD44A z96z2D!&2k5S5yNH#Fc$Jd~3u8?HUa9>9CEr|KB8+^+WHKH(;-CDj)RP6o~1xcn$e^ z$i6bOJ2iR8)U+W}^+Tp64VkJNGBt6?)RZApQ-@5|X@^c8`gyu*n*86xZxpIbi0T?$ zK3}WfbY&8btLz__!m8fyJHY;s8U{s1KtRss zW=fBtcw0Kmd#&>PW@;G769Al&hoc%bkbFg~W6j9$`l?ST&w238vcVUBAkM)1d!B!@ z?;j2CzevD8tojc;b8r!SKAN%yL%7-Jr^54(yPxj{3Y~TkRG{M9lYS+z^@E#kFu0=K z$R9o!4axCVdZR@dW59O+J5Q|aPC|ChBcy8@Uhs!t`Z=$yTi*43>>SxkCciKZyb_ZZ zss&6bnYZ43`wK#RAs?rG-%7z7Xvi1vqEbQ}aDt^vJVp#CJK$_YV|v{6y2~NC1hB?4guTi#2bXq2k+bJ#F#8ogd`KK2QvTr3BJYurSnE`7~-J8brWTF;GI!9 zj#vRj!wNGYXQ6L!xa2OmYr(XyTJTKh09ac_a3tg)gtaO{Hr`&CPhe5lNC_Q~)L+Lp zo~d=+GGhR+2rRIHnQ^_cIG?lsf(@atvOTgfcK+b<^^j-anF9ASS*|<|A(rRuU9jYM zk_GU`O$~VV&}I2&52C=%-5*@{c{7j za`-N!<>zS#E;nwcl7vB4B&x+@uFd;Cq_0(Z`eQiS(mNmt$KYv1P0Ma2WGx3k=x_%oyWx@UevSG;%+vB(XW8)WvIHmLPMXx)~*OvV@Kh1_^ag1+V_F9;p4-L3+ z|6C1M%Ll=gdHRS!b7E+?I4hk%G&`z-iY>Ut)^YQ_z8RNqNtUpl`rDmF1wm%CVKtUr>knFpo}`nw&J~Zk`QZ zmOJon;^12|s%!W=T)~6{Xfa&#mCi0Nty|DvOqY<9#^2?ZOJ>#-RNG-a51Pk461H)_ z_0tC@Pj!EE^5ikD67(H``VUaS^jDIYh+oYE&s8_*%HM!E$N&beJ`lWm*0lcfr~C!V zr?yH+jQYSQ$Yy;70niYPJM2$_0Efc@KY;qd6b#ulpc@bn*KUV^>{J^BWYeC8fHd<3 z2>uXyAb1XJK?hWV>A05w=L6PR3bxZr;f&Y#+{f==2}>T!$6v!#7E%Z?Kyd8ti5wq) zgu*yszEYvQhH*zz#uvT69iy;3g4|G6#RE2|$Xfrt<9hvv??az@=hUO|qm=hP0R0#H z)3aHSCcG-`Wk|#R0v46)(^NRa;V{4tvWqzourJ%V!~^f);W-=NWpSMF!1{4aFXIn9pMlD;ezaM{K0)go9FH+@#hv>^Iqd>=VR)ML>fG-V*l(%qKITooGXAhd07DFNM^62xte52lgY*gUN6| z-@UJ;6rPQ{9WvpJeNhT@53R28!2ZU5xOxxnL@sYBX5q#H#}6&;XTcfAWAJ>#F@<42 zl+*E^5$6gI2K>Ckaj1Zvse&gO`k^ZxVo3Sm_i7F+JQ*1bbE;q?AC; zQb;X>fCs)?7z7;{?4m8d9`a#++`ofX$!Oh=Hp!{b(-?RoR8xo3_Wi5?uTyN-^A~z zLOcKYH{Iqxvj4gi8nxB~pf~-b>t{sX#dBOg*MIJg=h=Av&pqY(HUDov|N1SvnL9V) PZf>Uh|K<7b^uYfEMGO#j literal 190464 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 B>IMk~zY~tw`qh^v@9kU~ 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 literal 224256 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 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