From a57445f55e84b7cf6bd26cf152a0ffa7f62f54f2 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期四, 25 九月 2025 20:06:59 +0800 Subject: [PATCH] 添加容器管理 商品档案管理 --- src/main/java/com/zy/asrs/entity/Task.java | 9 src/main/webapp/static/js/mat/mat.js | 7 src/main/java/com/zy/asrs/entity/param/AgvCallParams.java | 3 src/main/webapp/static/js/basContainer/basContainer.js | 249 +++++++++++++ src/main/java/com/zy/asrs/controller/BasStationController.java | 40 +- src/main/java/com/zy/asrs/entity/BasStation.java | 1 src/main/java/com/zy/asrs/enums/CommonEnum.java | 25 + src/main/java/com/zy/asrs/service/impl/BasContainerServiceImpl.java | 12 src/main/webapp/static/js/task/task.js | 14 src/main/java/com/zy/asrs/entity/Mat.java | 27 + src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java | 163 ++++++++ src/main/java/com/zy/asrs/service/BasContainerService.java | 8 src/main/webapp/static/js/common.js | 2 src/main/java/com/zy/asrs/mapper/BasContainerMapper.java | 12 src/main/java/com/zy/asrs/service/MobileService.java | 8 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java | 116 +++++ src/main/resources/mapper/BasContainerMapper.xml | 12 src/main/java/com/zy/asrs/controller/TaskController.java | 47 +- src/main/java/com/zy/asrs/controller/MobileController.java | 10 src/main/java/com/zy/asrs/entity/BasContainer.java | 88 ++++ src/main/java/com/zy/asrs/enums/MatTagType.java | 20 + src/main/java/basContainer.sql | 18 src/main/java/com/zy/common/CodeBuilder.java | 2 src/main/webapp/views/basStation/basStation.html | 3 src/main/webapp/views/basContainer/basContainer.html | 92 ++++ src/main/java/com/zy/asrs/enums/ContainerType.java | 27 + src/main/java/com/zy/asrs/controller/BasContainerController.java | 125 ++++++ 27 files changed, 1,056 insertions(+), 84 deletions(-) diff --git a/src/main/java/basContainer.sql b/src/main/java/basContainer.sql new file mode 100644 index 0000000..e1cd330 --- /dev/null +++ b/src/main/java/basContainer.sql @@ -0,0 +1,18 @@ +-- save basContainer record +-- mysql +insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basContainer/basContainer.html', 'basContainer绠$悊', null , '2', null , '1'); + +insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basContainer#view', '鏌ヨ', '', '3', '0', '1'); +insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basContainer#btn-add', '鏂板', '', '3', '1', '1'); +insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basContainer#btn-edit', '缂栬緫', '', '3', '2', '1'); +insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basContainer#btn-delete', '鍒犻櫎', '', '3', '3', '1'); +insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basContainer#btn-export', '瀵煎嚭', '', '3', '4', '1'); + +-- sqlserver +insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basContainer/basContainer.html', N'basContainer绠$悊', null, '2', null, '1'); + +insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basContainer#view', N'鏌ヨ', '90623', '3', '0', '1'); +insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basContainer#btn-add', N'鏂板', '90623', '3', '1', '1'); +insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basContainer#btn-edit', N'缂栬緫', '90623', '3', '2', '1'); +insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basContainer#btn-delete', N'鍒犻櫎', '90623', '3', '3', '1'); +insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basContainer#btn-export', N'瀵煎嚭', '90623', '3', '4', '1'); diff --git a/src/main/java/com/zy/asrs/controller/BasContainerController.java b/src/main/java/com/zy/asrs/controller/BasContainerController.java new file mode 100644 index 0000000..c9efadb --- /dev/null +++ b/src/main/java/com/zy/asrs/controller/BasContainerController.java @@ -0,0 +1,125 @@ +package com.zy.asrs.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.baomidou.mybatisplus.mapper.Wrapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.core.common.DateUtils; +import com.zy.asrs.entity.BasContainer; +import com.zy.asrs.service.BasContainerService; +import com.core.annotations.ManagerAuth; +import com.core.common.BaseRes; +import com.core.common.Cools; +import com.core.common.R; +import com.zy.common.web.BaseController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +@RestController +public class BasContainerController extends BaseController { + + @Autowired + private BasContainerService basContainerService; + + @RequestMapping(value = "/basContainer/{id}/auth") + @ManagerAuth + public R get(@PathVariable("id") String id) { + return R.ok(basContainerService.selectById(String.valueOf(id))); + } + + @RequestMapping(value = "/basContainer/list/auth") + @ManagerAuth + public R list(@RequestParam(defaultValue = "1")Integer curr, + @RequestParam(defaultValue = "10")Integer limit, + @RequestParam(required = false)String orderByField, + @RequestParam(required = false)String orderByType, + @RequestParam(required = false)String condition, + @RequestParam Map<String, Object> param){ + EntityWrapper<BasContainer> wrapper = new EntityWrapper<>(); + excludeTrash(param); + convert(param, wrapper); + allLike(BasContainer.class, param.keySet(), wrapper, condition); + if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} + return R.ok(basContainerService.selectPage(new Page<>(curr, limit), wrapper)); + } + + private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ + for (Map.Entry<String, Object> entry : map.entrySet()){ + String val = String.valueOf(entry.getValue()); + if (val.contains(RANGE_TIME_LINK)){ + String[] dates = val.split(RANGE_TIME_LINK); + wrapper.ge(entry.getKey(), DateUtils.convert(dates[0])); + wrapper.le(entry.getKey(), DateUtils.convert(dates[1])); + } else { + wrapper.like(entry.getKey(), val); + } + } + } + + @RequestMapping(value = "/basContainer/add/auth") + @ManagerAuth + public R add(BasContainer basContainer) { + basContainerService.insert(basContainer); + return R.ok(); + } + + @RequestMapping(value = "/basContainer/update/auth") + @ManagerAuth + public R update(BasContainer basContainer){ + if (Cools.isEmpty(basContainer) || null==basContainer.getId()){ + return R.error(); + } + basContainerService.updateById(basContainer); + return R.ok(); + } + + @RequestMapping(value = "/basContainer/delete/auth") + @ManagerAuth + public R delete(@RequestParam(value="ids[]") Long[] ids){ + for (Long id : ids){ + basContainerService.deleteById(id); + } + return R.ok(); + } + + @RequestMapping(value = "/basContainer/export/auth") + @ManagerAuth + public R export(@RequestBody JSONObject param){ + EntityWrapper<BasContainer> wrapper = new EntityWrapper<>(); + List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); + Map<String, Object> map = excludeTrash(param.getJSONObject("basContainer")); + convert(map, wrapper); + List<BasContainer> list = basContainerService.selectList(wrapper); + return R.ok(exportSupport(list, fields)); + } + + @RequestMapping(value = "/basContainerQuery/auth") + @ManagerAuth + public R query(String condition) { + EntityWrapper<BasContainer> wrapper = new EntityWrapper<>(); + wrapper.like("_id", condition); + Page<BasContainer> page = basContainerService.selectPage(new Page<>(0, 10), wrapper); + List<Map<String, Object>> result = new ArrayList<>(); + for (BasContainer basContainer : page.getRecords()){ + Map<String, Object> map = new HashMap<>(); + map.put("id", basContainer.getId()); + map.put("value", basContainer.getId()); + result.add(map); + } + return R.ok(result); + } + + @RequestMapping(value = "/basContainer/check/column/auth") + @ManagerAuth + public R query(@RequestBody JSONObject param) { + Wrapper<BasContainer> wrapper = new EntityWrapper<BasContainer>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val")); + if (null != basContainerService.selectOne(wrapper)){ + return R.parse(BaseRes.REPEAT).add(getComment(BasContainer.class, String.valueOf(param.get("key")))); + } + return R.ok(); + } + +} diff --git a/src/main/java/com/zy/asrs/controller/BasStationController.java b/src/main/java/com/zy/asrs/controller/BasStationController.java index b26e914..c562cc7 100644 --- a/src/main/java/com/zy/asrs/controller/BasStationController.java +++ b/src/main/java/com/zy/asrs/controller/BasStationController.java @@ -32,24 +32,26 @@ @RequestMapping(value = "/basStation/list/auth") @ManagerAuth - public R list(@RequestParam(defaultValue = "1")Integer curr, - @RequestParam(defaultValue = "10")Integer limit, - @RequestParam(required = false)String orderByField, - @RequestParam(required = false)String orderByType, - @RequestParam(required = false)String condition, - @RequestParam Map<String, Object> param){ + public R list(@RequestParam(defaultValue = "1") Integer curr, + @RequestParam(defaultValue = "10") Integer limit, + @RequestParam(required = false) String orderByField, + @RequestParam(required = false) String orderByType, + @RequestParam(required = false) String condition, + @RequestParam Map<String, Object> param) { EntityWrapper<BasStation> wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); allLike(BasStation.class, param.keySet(), wrapper, condition); - if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} + if (!Cools.isEmpty(orderByField)) { + wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); + } return R.ok(basStationService.selectPage(new Page<>(curr, limit), wrapper)); } - private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ - for (Map.Entry<String, Object> entry : map.entrySet()){ + private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper) { + for (Map.Entry<String, Object> entry : map.entrySet()) { String val = String.valueOf(entry.getValue()); - if (val.contains(RANGE_TIME_LINK)){ + if (val.contains(RANGE_TIME_LINK)) { String[] dates = val.split(RANGE_TIME_LINK); wrapper.ge(entry.getKey(), DateUtils.convert(dates[0])); wrapper.le(entry.getKey(), DateUtils.convert(dates[1])); @@ -70,10 +72,10 @@ return R.ok(); } - @RequestMapping(value = "/basStation/update/auth") - @ManagerAuth - public R update(BasStation basStation){ - if (Cools.isEmpty(basStation) || null==basStation.getId()){ + @RequestMapping(value = "/basStation/update/auth") + @ManagerAuth + public R update(BasStation basStation) { + if (Cools.isEmpty(basStation) || null == basStation.getId()) { return R.error(); } basStationService.updateById(basStation); @@ -82,8 +84,8 @@ @RequestMapping(value = "/basStation/delete/auth") @ManagerAuth - public R delete(@RequestParam(value="ids[]") Long[] ids){ - for (Long id : ids){ + public R delete(@RequestParam(value = "ids[]") Long[] ids) { + for (Long id : ids) { basStationService.deleteById(id); } return R.ok(); @@ -91,7 +93,7 @@ @RequestMapping(value = "/basStation/export/auth") @ManagerAuth - public R export(@RequestBody JSONObject param){ + public R export(@RequestBody JSONObject param) { EntityWrapper<BasStation> wrapper = new EntityWrapper<>(); List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); Map<String, Object> map = excludeTrash(param.getJSONObject("basStation")); @@ -107,7 +109,7 @@ wrapper.like("dev_no", condition); Page<BasStation> page = basStationService.selectPage(new Page<>(0, 10), wrapper); List<Map<String, Object>> result = new ArrayList<>(); - for (BasStation basStation : page.getRecords()){ + for (BasStation basStation : page.getRecords()) { Map<String, Object> map = new HashMap<>(); map.put("id", basStation.getId()); map.put("value", basStation.getId()); @@ -120,7 +122,7 @@ @ManagerAuth public R query(@RequestBody JSONObject param) { Wrapper<BasStation> wrapper = new EntityWrapper<BasStation>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val")); - if (null != basStationService.selectOne(wrapper)){ + if (null != basStationService.selectOne(wrapper)) { return R.parse(BaseRes.REPEAT).add(getComment(BasStation.class, String.valueOf(param.get("key")))); } return R.ok(); diff --git a/src/main/java/com/zy/asrs/controller/MobileController.java b/src/main/java/com/zy/asrs/controller/MobileController.java index 6909e83..95e7cda 100644 --- a/src/main/java/com/zy/asrs/controller/MobileController.java +++ b/src/main/java/com/zy/asrs/controller/MobileController.java @@ -167,6 +167,16 @@ } + @PostMapping("/cache/out/call") + @ApiOperation("鍛煎彨AGV鎼繍") + @ManagerAuth + public R OutCallAgv(@RequestBody AgvCallParams params) { + if (Objects.isNull(params)) { + return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒"); + } + return mobileService.OutCallAgv(params, getUserId()); + } + // 缁勬墭 ---------------------------------------------------------------------------------------------------- diff --git a/src/main/java/com/zy/asrs/controller/TaskController.java b/src/main/java/com/zy/asrs/controller/TaskController.java index 2faafe5..b453629 100644 --- a/src/main/java/com/zy/asrs/controller/TaskController.java +++ b/src/main/java/com/zy/asrs/controller/TaskController.java @@ -32,25 +32,29 @@ @RequestMapping(value = "/task/list/auth") @ManagerAuth - public R list(@RequestParam(defaultValue = "1")Integer curr, - @RequestParam(defaultValue = "10")Integer limit, - @RequestParam(required = false)String orderByField, - @RequestParam(required = false)String orderByType, - @RequestParam(required = false)String condition, - @RequestParam Map<String, Object> param){ + public R list(@RequestParam(defaultValue = "1") Integer curr, + @RequestParam(defaultValue = "10") Integer limit, + @RequestParam(required = false) String orderByField, + @RequestParam(required = false) String orderByType, + @RequestParam(required = false) String condition, + @RequestParam Map<String, Object> param) { EntityWrapper<Task> wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); allLike(Task.class, param.keySet(), wrapper, condition); - if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "desc".equals(orderByType));} - if (Cools.isEmpty(orderByField)) {wrapper.orderDesc(Arrays.asList("wrk_no"));} + if (!Cools.isEmpty(orderByField)) { + wrapper.orderBy(humpToLine(orderByField), "desc".equals(orderByType)); + } + if (Cools.isEmpty(orderByField)) { + wrapper.orderDesc(Arrays.asList("wrk_no")); + } return R.ok(taskService.selectPage(new Page<>(curr, limit), wrapper)); } - private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ - for (Map.Entry<String, Object> entry : map.entrySet()){ + private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper) { + for (Map.Entry<String, Object> entry : map.entrySet()) { String val = String.valueOf(entry.getValue()); - if (val.contains(RANGE_TIME_LINK)){ + if (val.contains(RANGE_TIME_LINK)) { String[] dates = val.split(RANGE_TIME_LINK); wrapper.ge(entry.getKey(), DateUtils.convert(dates[0])); wrapper.le(entry.getKey(), DateUtils.convert(dates[1])); @@ -67,10 +71,10 @@ return R.ok(); } - @RequestMapping(value = "/task/update/auth") - @ManagerAuth - public R update(Task task){ - if (Cools.isEmpty(task) || null==task.getId()){ + @RequestMapping(value = "/task/update/auth") + @ManagerAuth + public R update(Task task) { + if (Cools.isEmpty(task) || null == task.getId()) { return R.error(); } taskService.updateById(task); @@ -79,8 +83,8 @@ @RequestMapping(value = "/task/delete/auth") @ManagerAuth - public R delete(@RequestParam(value="ids[]") Long[] ids){ - for (Long id : ids){ + public R delete(@RequestParam(value = "ids[]") Long[] ids) { + for (Long id : ids) { taskService.deleteById(id); } return R.ok(); @@ -90,7 +94,7 @@ @RequestMapping("/task/control") @ManagerAuth(memo = "鎵嬪姩澶勭悊宸ヤ綔妗�") public R handControlWrkMast(@RequestParam String workNo, - @RequestParam Integer type){ + @RequestParam Integer type) { if (type == 1) { taskService.completeWrkMast(workNo, getUserId()); return R.ok("宸ヤ綔妗e凡瀹屾垚"); @@ -105,10 +109,9 @@ } - @RequestMapping(value = "/task/export/auth") @ManagerAuth - public R export(@RequestBody JSONObject param){ + public R export(@RequestBody JSONObject param) { EntityWrapper<Task> wrapper = new EntityWrapper<>(); List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); Map<String, Object> map = excludeTrash(param.getJSONObject("task")); @@ -124,7 +127,7 @@ wrapper.like("id", condition); Page<Task> page = taskService.selectPage(new Page<>(0, 10), wrapper); List<Map<String, Object>> result = new ArrayList<>(); - for (Task task : page.getRecords()){ + for (Task task : page.getRecords()) { Map<String, Object> map = new HashMap<>(); map.put("id", task.getId()); map.put("value", task.getId()); @@ -137,7 +140,7 @@ @ManagerAuth public R query(@RequestBody JSONObject param) { Wrapper<Task> wrapper = new EntityWrapper<Task>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val")); - if (null != taskService.selectOne(wrapper)){ + if (null != taskService.selectOne(wrapper)) { return R.parse(BaseRes.REPEAT).add(getComment(Task.class, String.valueOf(param.get("key")))); } return R.ok(); diff --git a/src/main/java/com/zy/asrs/entity/BasContainer.java b/src/main/java/com/zy/asrs/entity/BasContainer.java new file mode 100644 index 0000000..5dc10ee --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/BasContainer.java @@ -0,0 +1,88 @@ +package com.zy.asrs.entity; + +import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.enums.IdType; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.zy.asrs.enums.CommonEnum; +import com.zy.asrs.enums.ContainerType; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import com.baomidou.mybatisplus.annotations.TableName; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +@Data +@Accessors(chain = true) +@TableName("asr_bas_container") +public class BasContainer implements Serializable { + + private static final long serialVersionUID = 1L; + /** + * 涓婚敭 + */ + @ApiModelProperty(value= "涓婚敭") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 瀹瑰櫒缂栫爜 + */ + @ApiModelProperty(value= "瀹瑰櫒缂栫爜") + private String barcode; + + @ApiModelProperty("瀹瑰櫒绫诲瀷") + private String type; + + @ApiModelProperty("鏄惁娣锋斁") + private Integer flagMix; + + @ApiModelProperty("鏈�澶ф贩鏀剧绫�") + private Integer mixMax; + + @ApiModelProperty("鍒涘缓鏃堕棿") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + @ApiModelProperty("淇敼鏃堕棿") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + public BasContainer() {} + + public BasContainer(String barcode) { + this.barcode = barcode; + } + + + public String getType$() { + if (Cools.isEmpty(type)) { + return "鏂欑"; + } + if (type.equals(ContainerType.CONTAINER_TYPE_BOX.type)) { + return ContainerType.CONTAINER_TYPE_BOX.desc; + } else if (type.equals(ContainerType.CONTAINER_TYPE_SALVER.type)) { + return ContainerType.CONTAINER_TYPE_SALVER.desc; + } else if (type.equals(ContainerType.CONTAINER_TYPE_CAGE.type)) { + return ContainerType.CONTAINER_TYPE_CAGE.desc; + } + return null; + } + + public String getFlagMix$() { + if (Cools.isEmpty(flagMix)) { + return null; + } + if (flagMix.equals(CommonEnum.COMMON_ENUM_N.type)) { + return CommonEnum.COMMON_ENUM_N.desc; + } else if (flagMix.equals(CommonEnum.COMMON_ENUM_Y.type)) { + return CommonEnum.COMMON_ENUM_Y.desc; + } + return null; + } + +} diff --git a/src/main/java/com/zy/asrs/entity/BasStation.java b/src/main/java/com/zy/asrs/entity/BasStation.java index eccdf1a..d2c4670 100644 --- a/src/main/java/com/zy/asrs/entity/BasStation.java +++ b/src/main/java/com/zy/asrs/entity/BasStation.java @@ -32,7 +32,6 @@ * 涓婚敭 */ @ApiModelProperty(value= "涓婚敭") - @TableId(value = "id", type = IdType.AUTO) private Long id; /** diff --git a/src/main/java/com/zy/asrs/entity/Mat.java b/src/main/java/com/zy/asrs/entity/Mat.java index f666131..bdd9654 100644 --- a/src/main/java/com/zy/asrs/entity/Mat.java +++ b/src/main/java/com/zy/asrs/entity/Mat.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.enums.IdType; import com.core.common.Cools; import com.core.common.SpringUtils; +import com.zy.asrs.enums.ContainerType; +import com.zy.asrs.service.BasContainerService; import com.zy.asrs.service.TagService; import com.zy.common.utils.Synchro; import com.zy.system.entity.User; @@ -164,7 +166,7 @@ private String manuDate; /** - * 鍝侀」鏁� + * 鍝侀」鏁�/鏈�澶х粍鎵樻暟閲� */ @ApiModelProperty(value= "鍝侀」鏁�") @ExcelProperty(value = "鍝侀」鏁�") @@ -185,6 +187,11 @@ @ApiModelProperty(value= "閲嶉噺") @ExcelProperty(value = "閲嶉噺") private Double weight; + + @ApiModelProperty(value= "鏈�澶х粍鎵樹笂闄�") + @ExcelProperty(value = "鏈�澶х粍鎵樹笂闄�") + @TableField("up_qty") + private Double upQty; /** * 闀垮害 @@ -300,6 +307,10 @@ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date updateTime; + @ApiModelProperty("搴撲綅绫诲瀷") + @TableField("loc_type") + private Long locType; + /** * 澶囨敞 */ @@ -416,6 +427,20 @@ return null; } + public String getLocType$(){ + if (Cools.isEmpty(locType)) { + return "鏂欑"; + } + if (locType.equals(ContainerType.CONTAINER_TYPE_BOX.type)) { + return ContainerType.CONTAINER_TYPE_BOX.desc; + } else if (locType.equals(ContainerType.CONTAINER_TYPE_SALVER.type)) { + return ContainerType.CONTAINER_TYPE_SALVER.desc; + } else if (locType.equals(ContainerType.CONTAINER_TYPE_CAGE.type)) { + return ContainerType.CONTAINER_TYPE_CAGE.desc; + } + return null; + } + public String getBeBatch$(){ if (null == this.beBatch){ return null; } switch (this.beBatch){ diff --git a/src/main/java/com/zy/asrs/entity/Task.java b/src/main/java/com/zy/asrs/entity/Task.java index 51fff6b..79496f2 100644 --- a/src/main/java/com/zy/asrs/entity/Task.java +++ b/src/main/java/com/zy/asrs/entity/Task.java @@ -1,5 +1,6 @@ package com.zy.asrs.entity; +import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.enums.IdType; import com.baomidou.mybatisplus.annotations.TableField; @@ -396,8 +397,8 @@ public String getStaNo$(){ - BasDevpService service = SpringUtils.getBean(BasDevpService.class); - BasDevp basDevp = service.selectById(this.staNo); + BasStationService service = SpringUtils.getBean(BasStationService.class); + BasStation basDevp = service.selectOne(new EntityWrapper<BasStation>().eq("dev_no", this.staNo)); if (!Cools.isEmpty(basDevp)){ return String.valueOf(basDevp.getDevNo()); } @@ -405,8 +406,8 @@ } public String getSourceStaNo$(){ - BasDevpService service = SpringUtils.getBean(BasDevpService.class); - BasDevp basDevp = service.selectById(this.sourceStaNo); + BasStationService service = SpringUtils.getBean(BasStationService.class); + BasStation basDevp = service.selectOne(new EntityWrapper<BasStation>().eq("dev_no", this.sourceStaNo)); if (!Cools.isEmpty(basDevp)){ return String.valueOf(basDevp.getDevNo()); } diff --git a/src/main/java/com/zy/asrs/entity/param/AgvCallParams.java b/src/main/java/com/zy/asrs/entity/param/AgvCallParams.java index 62886aa..7fc4bc4 100644 --- a/src/main/java/com/zy/asrs/entity/param/AgvCallParams.java +++ b/src/main/java/com/zy/asrs/entity/param/AgvCallParams.java @@ -14,6 +14,9 @@ @ApiModelProperty("璧峰浣嶇疆") private String orgSite; + @ApiModelProperty("婧愬簱浣�") + private String orgLoc; + @ApiModelProperty("缁堢偣浣嶇疆") private String tarSite; diff --git a/src/main/java/com/zy/asrs/enums/CommonEnum.java b/src/main/java/com/zy/asrs/enums/CommonEnum.java new file mode 100644 index 0000000..f6faefa --- /dev/null +++ b/src/main/java/com/zy/asrs/enums/CommonEnum.java @@ -0,0 +1,25 @@ +package com.zy.asrs.enums; + +/** + * @author Ryan + * @date 2025/9/25 + * @description: 閫氱敤绫诲瀷鏋氫妇 + * @version 1.0 + */ +public enum CommonEnum { + + //閫氱敤绫诲瀷 + COMMON_ENUM_Y(0, "鍚�"), + //閫氱敤 + COMMON_ENUM_N(1, "鏄�"); + + public Integer type; + + public String desc; + + CommonEnum(Integer type, String desc) { + this.type = type; + this.desc = desc; + } + +} diff --git a/src/main/java/com/zy/asrs/enums/ContainerType.java b/src/main/java/com/zy/asrs/enums/ContainerType.java new file mode 100644 index 0000000..379d1aa --- /dev/null +++ b/src/main/java/com/zy/asrs/enums/ContainerType.java @@ -0,0 +1,27 @@ +package com.zy.asrs.enums; + +public enum ContainerType { + + //鏂欑 + CONTAINER_TYPE_BOX("12", "鏂欑"), + //鎵樼洏 + CONTAINER_TYPE_SALVER("14", "鎵樼洏"), + + CONTAINER_TYPE_CAGE("13", "绗兼"), + + CONTAINER_TYPE_CAR("3", "鍙拌溅"), + ; + + public Long type; + + public String desc; + + ContainerType(String type, String desc) { + this.type = Long.valueOf(type); + this.desc = desc; + } + + + + +} diff --git a/src/main/java/com/zy/asrs/enums/MatTagType.java b/src/main/java/com/zy/asrs/enums/MatTagType.java new file mode 100644 index 0000000..dbf9a6d --- /dev/null +++ b/src/main/java/com/zy/asrs/enums/MatTagType.java @@ -0,0 +1,20 @@ +package com.zy.asrs.enums; + +public enum MatTagType { + //涓欢 + MAT_TAGT_YPE_MIDDLE("13", "涓欢"), + //灏忎欢 + MAT_TAGT_YPE_SMALL("12", "灏忎欢"), + //婊よ姱 + MAT_TAGT_YPE_XIN("14", "婊よ姱") + ; + + public String id; + + public String type; + + MatTagType(String id, String type) { + this.type = type; + this.id = id; + } +} diff --git a/src/main/java/com/zy/asrs/mapper/BasContainerMapper.java b/src/main/java/com/zy/asrs/mapper/BasContainerMapper.java new file mode 100644 index 0000000..c7b3df9 --- /dev/null +++ b/src/main/java/com/zy/asrs/mapper/BasContainerMapper.java @@ -0,0 +1,12 @@ +package com.zy.asrs.mapper; + +import com.zy.asrs.entity.BasContainer; +import com.baomidou.mybatisplus.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +@Mapper +@Repository +public interface BasContainerMapper extends BaseMapper<BasContainer> { + +} diff --git a/src/main/java/com/zy/asrs/service/BasContainerService.java b/src/main/java/com/zy/asrs/service/BasContainerService.java new file mode 100644 index 0000000..925a7af --- /dev/null +++ b/src/main/java/com/zy/asrs/service/BasContainerService.java @@ -0,0 +1,8 @@ +package com.zy.asrs.service; + +import com.zy.asrs.entity.BasContainer; +import com.baomidou.mybatisplus.service.IService; + +public interface BasContainerService extends IService<BasContainer> { + +} diff --git a/src/main/java/com/zy/asrs/service/MobileService.java b/src/main/java/com/zy/asrs/service/MobileService.java index 779f434..2455c90 100644 --- a/src/main/java/com/zy/asrs/service/MobileService.java +++ b/src/main/java/com/zy/asrs/service/MobileService.java @@ -91,4 +91,12 @@ * @version 1.0 */ R getMatsByQRcode(PakinMatsByQRParams params); + + /** + * @author Ryan + * @date 2025/9/24 + * @description: 鍛煎彨AGV鍑哄簱鎼繍 + * @version 1.0 + */ + R OutCallAgv(AgvCallParams params, Long userId); } diff --git a/src/main/java/com/zy/asrs/service/impl/BasContainerServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasContainerServiceImpl.java new file mode 100644 index 0000000..c4fbcbf --- /dev/null +++ b/src/main/java/com/zy/asrs/service/impl/BasContainerServiceImpl.java @@ -0,0 +1,12 @@ +package com.zy.asrs.service.impl; + +import com.zy.asrs.mapper.BasContainerMapper; +import com.zy.asrs.entity.BasContainer; +import com.zy.asrs.service.BasContainerService; +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +@Service("basContainerService") +public class BasContainerServiceImpl extends ServiceImpl<BasContainerMapper, BasContainer> implements BasContainerService { + +} diff --git a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java index c02566b..716a7ed 100644 --- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java @@ -8,6 +8,7 @@ import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.*; +import com.zy.asrs.enums.CommonEnum; import com.zy.asrs.enums.LocStsType; import com.zy.asrs.mapper.LocMastMapper; import com.zy.asrs.mapper.ManLocDetlMapper; @@ -28,6 +29,8 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; @@ -107,6 +110,10 @@ @Autowired private TaskDetlService taskDetlService; + @Autowired + private BasStationService basStationService; + @Autowired + private BasContainerService basContainerService; @Override @Transactional @@ -578,7 +585,6 @@ } Date now = new Date(); - // 鏃犲崟缁勬墭 if (Cools.isEmpty(param.getOrderNo())) { // 鐢熸垚鍏ュ簱閫氱煡妗� @@ -595,19 +601,21 @@ } }); - for (DetlDto detlDto : detlDtos) { Mat mat = matService.selectByMatnr(detlDto.getMatnr()); if (Cools.isEmpty(mat)) { throw new CoolException(detlDto.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�"); } + if (mat.getUpQty().compareTo(detlDto.getAnfme()) < 0) { + throw new CoolException("鐗╂枡锛�" + detlDto.getMatnr() + "鍗曟鏈�澶х粍鎵樹笂闄愪负锛�" + mat.getUpQty()); + } WaitPakin waitPakin = new WaitPakin(); BeanUtils.copyProperties(mat, waitPakin); waitPakin.setBatch(detlDto.getBatch()); - waitPakin.setZpallet(param.getBarcode()); // 鎵樼洏鐮� - waitPakin.setIoStatus("N"); // 鍏ュ嚭鐘舵�� - waitPakin.setAnfme(detlDto.getAnfme()); // 鏁伴噺 - waitPakin.setStatus("Y"); // 鐘舵�� + waitPakin.setZpallet(param.getBarcode()); + waitPakin.setIoStatus("N"); + waitPakin.setAnfme(detlDto.getAnfme()); + waitPakin.setStatus("Y"); waitPakin.setAppeUser(userId); waitPakin.setAppeTime(now); waitPakin.setModiUser(userId); @@ -654,11 +662,41 @@ detlDtos.add(detlDto); } }); + + BasContainer container = basContainerService.selectOne(new EntityWrapper<BasContainer>().eq("barcode", param.getBarcode())); + if (Objects.isNull(container)) { + throw new CoolException("鏁版嵁閿欒锛氬鍣ㄧ爜涓嶅瓨鍦紒锛�"); + } + if (container.getMixMax() < detlDtos.size()) { + throw new CoolException("瓒呭嚭瀹瑰櫒鏈�澶ф贩瑁呮暟閲忥紝褰撳墠瀹瑰櫒鏈�澶ф暟閲忎负锛�" + container.getMixMax() + "!!"); + } + Set<String> matnrs = detlDtos.stream().map(DetlDto::getMatnr).collect(Collectors.toSet()); + List<Mat> mats = matService.selectList(new EntityWrapper<Mat>().in("matnr", matnrs)); + Set<Long> tagIds = mats.stream().map(Mat::getTagId).collect(Collectors.toSet()); + if (tagIds.size() > 1) { + throw new CoolException("缁勬墭鐗╂枡绫诲瀷涓嶄竴鑷达紝鍙湁鐩稿悓鐨勭墿鏂欏垎绫绘墠鍙互缁勬墭锛侊紒"); + } + //杩樺彲浠ユ斁鍏ュ灏戠鐗╂枡 + Integer suplus = container.getMixMax(); for (DetlDto detlDto : detlDtos) { Mat mat = matService.selectByMatnr(detlDto.getMatnr()); if (Cools.isEmpty(mat)) { throw new CoolException(detlDto.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�"); } + + //鏈�澶氬彲鏀炬暟閲� + Double singleMax = mat.getUpQty() * suplus; + if (singleMax.compareTo(detlDto.getAnfme()) < 0) { + throw new CoolException("鍗曟鏈�澶х粍鎵樹笂闄愪负锛�" + singleMax); + } + BigDecimal decimal = new BigDecimal(detlDto.getAnfme() / mat.getUpQty()); + //褰撳墠鐗╂枡闇�瑕佸崰鐢ㄦ枡绠辨牸鏁� + Integer curr = decimal.setScale(0, RoundingMode.CEILING).intValue(); + suplus = suplus - curr; + if (suplus == 0 || suplus < 0) { + throw new CoolException("鐗╂枡锛�" + detlDto.getMatnr() + ", 瓒呭嚭褰撳墠鎵樼洏瑁呰浇涓婇檺锛侊紒"); + } + WaitPakin waitPakin = new WaitPakin(); BeanUtils.copyProperties(mat, waitPakin); // waitPakin.sync(mat); @@ -1209,6 +1247,117 @@ /** * @author Ryan + * @date 2025/9/24 + * @description: AGV鍛煎彨鎼繍 + * @version 1.0 + */ + @Override + public R OutCallAgv(AgvCallParams params, Long userId) { + LocCache locCaches = locCacheService.selectOne(new EntityWrapper<LocCache>() + .eq("loc_sts", LocStsType.LOC_STS_TYPE_F.type) + .eq("frozen", 0) + .orderDesc(Arrays.asList("sort", "first_time")) + .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY")); + if (Objects.isNull(locCaches)) { + throw new CoolException("鏆傛棤婊¤冻闇�姹傚簱浣嶏紒"); + } + BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>() + .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type) + .eq("dev_no", params.getTarSite())); + if (Objects.isNull(station)) { + throw new CoolException("绔欑偣姝e湪鎵ц浠诲姟锛侊紒"); + } + + generateOutTask(station, locCaches, userId); + + return R.ok(); + } + + /** + * @author Ryan + * @date 2025/9/25 + * @description: 鍛煎彨AGV鐢熸垚鍑哄簱浠诲姟 + * @version 1.0 + */ + @Transactional(rollbackFor = Exception.class) + public void generateOutTask(BasStation station, LocCache loc, Long userId) { + // 鑾峰彇宸ヤ綔鍙� + int workNo = commonService.getWorkNo(WorkNoType.PICK.type); + // 淇濆瓨宸ヤ綔妗� + Task task = new Task(); + task.setWrkNo(workNo) + .setIoTime(new Date()) + .setWrkSts(11L) // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID + .setIoType(101) // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇 + .setTaskType("agv") + .setIoPri(10D) + .setFullPlt("Y") // 婊℃澘锛歒 + .setPicking("N") // 鎷f枡 + .setExitMk("N")// 閫�鍑� + .setStaNo(station.getDevNo()) + .setSourceLocNo(loc.getLocNo()) + .setEmptyMk(loc.getLocSts().equals("D") ? "Y" : "N")// 绌烘澘 + .setBarcode(loc.getBarcode())// 鎵樼洏鐮� + .setLinkMis("N") + .setAppeUser(userId) + .setAppeTime(new Date()) + .setModiUser(userId) + .setModiTime(new Date()); + if (!taskService.insert(task)) { + throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); + } + List<LocDetl> detls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_id", loc.getId())); + if (Objects.isNull(detls) || detls.isEmpty()) { + throw new CoolException("鏁版嵁閿欒锛氬簱浣嶆槑缁嗕负绌猴紒锛�"); + } + List<TaskDetl> taskDetls = new ArrayList<>(); + detls.forEach(pakin -> { + TaskDetl wrkDetl = new TaskDetl(); + BeanUtils.copyProperties(pakin, wrkDetl); + wrkDetl.setWrkNo(workNo) + .setIoTime(new Date()) + .setOrderNo(pakin.getOrderNo()) + .setAnfme(pakin.getAnfme()) + .setZpallet(pakin.getZpallet()) + .setBatch(pakin.getBatch()) + .setMatnr(pakin.getMatnr()) + .setMaktx(pakin.getMaktx()) + .setAppeUser(userId) + .setUnit(pakin.getUnit()) + .setModel(pakin.getModel()) + .setAppeTime(new Date()) + .setModiUser(userId); + taskDetls.add(wrkDetl); + }); + + //淇濆瓨宸ヤ綔妗f槑缁� + if (!taskDetlService.insertBatch(taskDetls)) { + throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�"); + } + + loc.setLocSts(LocStsType.LOC_STS_TYPE_R.type); + loc.setModiUser(userId); + loc.setModiTime(new Date()); + + if (!locCacheService.updateById(loc)) { + throw new CoolException("鏇存柊搴撲綅鐘舵�佷俊鎭紒锛�"); + } + + // 淇敼鐩爣绔欑偣淇℃伅 + if (station.getLocSts().equals("O")) { + station.setLocSts("S"); // S.鍏ュ簱棰勭害 + station.setModiTime(new Date()); + station.setModiUser(userId); + if (!basStationService.updateById(station)) { + throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�"); + } + } else { + throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細" + station.getLocSts()); + } + } + + /** + * @author Ryan * @date 2025/9/22 * @description: 鐢熸垚AGV鎼繍浠诲姟 * @version 1.0 @@ -1225,7 +1374,7 @@ Task task = new Task(); task.setWrkNo(workNo) .setIoTime(new Date()) - .setWrkSts(11L) // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID + .setWrkSts(1L) // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID .setIoType(11) // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇 .setTaskType("agv") .setIoPri(10D) diff --git a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java index 308d93b..9bab122 100644 --- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java +++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java @@ -6,8 +6,10 @@ import com.zy.asrs.entity.*; import com.zy.asrs.enums.LocStsType; import com.zy.asrs.service.*; +import com.zy.asrs.service.impl.BasStationServiceImpl; import com.zy.asrs.service.impl.LocCacheServiceImpl; import com.zy.asrs.service.impl.OrderPakinServiceImpl; +import com.zy.asrs.service.impl.TaskDetlServiceImpl; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import lombok.extern.slf4j.Slf4j; @@ -50,6 +52,10 @@ private OrderPakinService orderPakinService; @Autowired private TaskService taskService; + @Autowired + private TaskDetlService taskDetlService; + @Autowired + private BasStationServiceImpl basStationService; public ReturnT<String> start(WrkMast wrkMast) { // 4.鍏ュ簱瀹屾垚 @@ -471,18 +477,16 @@ if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) { -// exceptionHandle("鍏ㄦ澘鍑哄簱 ===>> 鏇存柊璁㈠崟瀹屾垚鏁伴噺澶辫触锛沎workNo={0}],[locNo={1}]", -// wrkMast.getWrkNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("鍏ㄦ澘鍑哄簱 ===>> 鏇存柊璁㈠崟瀹屾垚鏁伴噺澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); } } } catch (Exception ignore) { + } } // 鍒犻櫎宸ヤ綔妗f簮搴撲綅鐨勫簱瀛樻槑缁� if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()))) { -// exceptionHandle("鍏ㄦ澘鍑哄簱 ===>> 鍒犻櫎搴撳瓨鏄庣粏澶辫触锛沎workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("鍏ㄦ澘鍑哄簱 ===>> 鍒犻櫎搴撳瓨鏄庣粏澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); } @@ -493,7 +497,6 @@ locMast.setModiTime(now); locMast.setIoTime(now); if (!locMastService.updateById(locMast)) { -// exceptionHandle("鍏ㄦ澘鍑哄簱 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐ワ紱[workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("鍏ㄦ澘鍑哄簱 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); } @@ -575,13 +578,103 @@ * @version 1.0 */ @Transactional(rollbackFor = Exception.class) - public ReturnT<String> AgvStart(Task wrkMast) { + public ReturnT<String> AgvStart(Task task) { + // 4.鍏ュ簱瀹屾垚 + if (task.getWrkSts() == 4) { + return agvDoIn(task); + // 14.鍑哄簱瀹屾垚 + } else if (task.getWrkSts() == 14) { + return agvDoOut(task); + } + return SUCCESS; + } + + + /** + * @author Ryan + * @date 2025/9/25 + * @description: AGV鍑哄簱浠诲姟 + * @version 1.0 + */ + public ReturnT<String> agvDoOut(Task task) { + if (task.getIoType().equals(101)) { + Date now = new Date(); + LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no" ,task.getSourceLocNo())); + if (Objects.isNull(locMast)) { + throw new RuntimeException("鏁版嵁閿欒锛氬簱浣嶄俊鎭笉鑳戒负绌猴紒锛�"); + } + List<TaskDetl> wrkDetls101 = taskDetlService.selectList(new EntityWrapper<TaskDetl>().eq("wrk_no", task.getWrkNo())); + if (wrkDetls101.isEmpty()) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return FAIL.setMsg("鍏ㄦ澘鍑哄簱 ===>> 宸ヤ綔鏄庣粏妗d负绌�; [workNo=" + task.getWrkNo() + "],[locNo=" + task.getSourceLocNo() + "]"); + } + for (TaskDetl wrkDetl : wrkDetls101) { + // 鏇存柊璁㈠崟瀹屾垚鏁伴噺 + OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), + wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); + if (orderDetlPakout == null) { + orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), + wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); + } + try { + if (!Cools.isEmpty(orderDetlPakout)) { + if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), + orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), + wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return FAIL.setMsg("鍏ㄦ澘鍑哄簱 ===>> 鏇存柊璁㈠崟瀹屾垚鏁伴噺澶辫触; [workNo=" + task.getWrkNo() + "],[locNo=" + task.getSourceLocNo() + "]"); + } + } + } catch (Exception ignore) { + } + } + // 鍒犻櫎宸ヤ綔妗f簮搴撲綅鐨勫簱瀛樻槑缁� + if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", task.getSourceLocNo()))) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return FAIL.setMsg("鍏ㄦ澘鍑哄簱 ===>> 鍒犻櫎搴撳瓨鏄庣粏澶辫触; [workNo=" + task.getWrkNo() + "],[locNo=" + task.getSourceLocNo() + "]"); + } + // 淇敼婧愬簱浣嶇姸鎬� R ===>> O + if (locMast.getLocSts().equals(LocStsType.LOC_STS_TYPE_R.type)) { + locMast.setLocSts(LocStsType.LOC_STS_TYPE_O.type); + locMast.setBarcode(""); + locMast.setModiTime(now); + locMast.setIoTime(now); + if (!locCacheService.updateById(locMast)) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return FAIL.setMsg("鍏ㄦ澘鍑哄簱 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐�; [workNo=" + task.getWrkNo() + "],[locNo=" + task.getSourceLocNo() + "]"); + } + } else { + throw new CoolException("褰撳墠搴撲綅鐘舵��" + locMast.getLocSts() + ", 鏃犳硶鎵ц鍑哄簱鎿嶄綔锛侊紒"); + } + + BasStation devNo = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", task.getStaNo())); + if (Objects.isNull(devNo)) { + throw new CoolException("绔欑偣锛�" + task.getSourceStaNo() + ", 涓嶅瓨鍦紒锛�"); + } + devNo.setLocSts(LocStsType.LOC_STS_TYPE_F.type); + devNo.setModiTime(new Date()); + if (!basStationService.updateById(devNo)) { + throw new CoolException("绔欑偣淇℃伅淇敼澶辫触锛侊紒"); + } +// task.setWrkSts(15L); +// if (!taskService.updateById(task)) { +// throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�"); +// } + } else { + + } + return SUCCESS; + } + + + @Transactional(rollbackFor = Exception.class) + public ReturnT<String> agvDoIn(Task wrkMast) { LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo())); if (Objects.isNull(locCache)) { throw new CoolException("鏁版嵁閿欒锛屽簱浣嶄笉瀛樺湪锛侊紒"); } if (!locCache.getLocSts().equals(LocStsType.LOC_STS_TYPE_S.type)) { - throw new CoolException("褰撳墠搴撲綅鐘舵�佷负锛�" + LocStsType.LOC_STS_TYPE_S.type + "." + LocStsType.LOC_STS_TYPE_S.desc + "锛屼笉鏄嚭搴撻绾︾姸鎬�"); + throw new CoolException("褰撳墠搴撲綅鐘舵�佷负锛�" + LocStsType.LOC_STS_TYPE_S.type + "." + LocStsType.LOC_STS_TYPE_S.desc + "锛屼笉鏄嚭搴撻绾︾姸鎬�"); } List<WaitPakin> apallet = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode())); if (Objects.isNull(apallet)) { @@ -626,17 +719,6 @@ if (Objects.isNull(pakins) || pakins.isEmpty()) { throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�"); } - -// pakins.forEach(orderPakin -> { -// orderPakin.setSettle(4L); -// if (!orderPakinService.updateById(orderPakin)) { -// throw new CoolException("鍗曟嵁淇敼澶辫触锛侊紒"); -// } -// List<OrderDetlPakin> detlPakins = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>().eq("order_id", orderPakin.getId())); -// if (Objects.isNull(detlPakins) || detlPakins.isEmpty()) { -// throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�"); -// } -// }); return SUCCESS; } diff --git a/src/main/java/com/zy/common/CodeBuilder.java b/src/main/java/com/zy/common/CodeBuilder.java index e83f56e..ed14c1d 100644 --- a/src/main/java/com/zy/common/CodeBuilder.java +++ b/src/main/java/com/zy/common/CodeBuilder.java @@ -20,7 +20,7 @@ generator.url="127.0.0.1:1433;databasename=jsxswms"; generator.username="sa"; generator.password="Skyouc#23"; - generator.table="agv_task_detl_log"; + generator.table="asr_bas_container"; generator.packagePath="com.zy.asrs"; generator.build(); } diff --git a/src/main/resources/mapper/BasContainerMapper.xml b/src/main/resources/mapper/BasContainerMapper.xml new file mode 100644 index 0000000..844171a --- /dev/null +++ b/src/main/resources/mapper/BasContainerMapper.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.zy.asrs.mapper.BasContainerMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasContainer"> + <id column="Id" property="Id" /> + <result column="barcode" property="barcode" /> + + </resultMap> + +</mapper> diff --git a/src/main/webapp/static/js/basContainer/basContainer.js b/src/main/webapp/static/js/basContainer/basContainer.js new file mode 100644 index 0000000..e63b6af --- /dev/null +++ b/src/main/webapp/static/js/basContainer/basContainer.js @@ -0,0 +1,249 @@ +var pageCurr; +layui.config({ + base: baseUrl + "/static/layui/lay/modules/" +}).use(['table','laydate', 'form', 'admin'], function(){ + var table = layui.table; + var $ = layui.jquery; + var layer = layui.layer; + var layDate = layui.laydate; + var form = layui.form; + var admin = layui.admin; + + // 鏁版嵁娓叉煋 + tableIns = table.render({ + elem: '#basContainer', + headers: {token: localStorage.getItem('token')}, + url: baseUrl+'/basContainer/list/auth', + page: true, + limit: 15, + limits: [15, 30, 50, 100, 200, 500], + toolbar: '#toolbar', + cellMinWidth: 50, + height: 'full-120', + cols: [[ + {type: 'checkbox'} + ,{field: 'barcode', align: 'center',title: '瀹瑰櫒缂栫爜'} + ,{field: 'type$', align: 'center',title: '瀹瑰櫒绫诲瀷'} + ,{field: 'flagMix$', align: 'center',title: '鏄惁娣锋斁'} + ,{field: 'mixMax', align: 'center',title: '娣锋斁绉嶇被'} + ,{field: 'createTime', align: 'center',title: '鍒涘缓鏃堕棿'} + ,{field: 'updateTime', align: 'center',title: '淇敼鏃堕棿'} + ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120} + ]], + request: { + pageName: 'curr', + pageSize: 'limit' + }, + parseData: function (res) { + return { + 'code': res.code, + 'msg': res.msg, + 'count': res.data.total, + 'data': res.data.records + } + }, + response: { + statusCode: 200 + }, + done: function(res, curr, count) { + if (res.code === 403) { + top.location.href = baseUrl+"/"; + } + pageCurr=curr; + limit(); + } + }); + + // 鐩戝惉鎺掑簭浜嬩欢 + table.on('sort(basContainer)', function (obj) { + var searchData = {}; + $.each($('#search-box [name]').serializeArray(), function() { + searchData[this.name] = this.value; + }); + searchData['orderByField'] = obj.field; + searchData['orderByType'] = obj.type; + tableIns.reload({ + where: searchData, + page: {curr: 1} + }); + }); + + // 鐩戝惉澶村伐鍏锋爮浜嬩欢 + table.on('toolbar(basContainer)', function (obj) { + var checkStatus = table.checkStatus(obj.config.id).data; + switch(obj.event) { + case 'addData': + showEditModel(); + break; + case 'deleteData': + if (checkStatus.length === 0) { + layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2}); + return; + } + del(checkStatus.map(function (d) { + return d.id; + })); + break; + case 'exportData': + admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){ + var titles=[]; + var fields=[]; + obj.config.cols[0].map(function (col) { + if (col.type === 'normal' && col.hide === false && col.toolbar == null) { + titles.push(col.title); + fields.push(col.field); + } + }); + var exportData = {}; + $.each($('#search-box [name]').serializeArray(), function() { + exportData[this.name] = this.value; + }); + var param = { + 'basContainer': exportData, + 'fields': fields + }; + $.ajax({ + url: baseUrl+"/basContainer/export/auth", + headers: {'token': localStorage.getItem('token')}, + data: JSON.stringify(param), + dataType:'json', + contentType:'application/json;charset=UTF-8', + method: 'POST', + success: function (res) { + layer.closeAll(); + if (res.code === 200) { + table.exportFile(titles,res.data,'xls'); + } else if (res.code === 403) { + top.location.href = baseUrl+"/"; + } else { + layer.msg(res.msg, {icon: 2}) + } + } + }); + }); + break; + } + }); + + // 鐩戝惉琛屽伐鍏蜂簨浠� + table.on('tool(basContainer)', function(obj){ + var data = obj.data; + switch (obj.event) { + case 'edit': + showEditModel(data); + break; + case "del": + del([data.id]); + break; + } + }); + + /* 寮圭獥 - 鏂板銆佷慨鏀� */ + function showEditModel(mData) { + admin.open({ + type: 1, + area: '600px', + title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��', + content: $('#editDialog').html(), + success: function (layero, dIndex) { + layDateRender(mData); + form.val('detail', mData); + form.on('submit(editSubmit)', function (data) { + var loadIndex = layer.load(2); + $.ajax({ + url: baseUrl+"/basContainer/"+(mData?'update':'add')+"/auth", + headers: {'token': localStorage.getItem('token')}, + data: data.field, + method: 'POST', + success: function (res) { + layer.close(loadIndex); + if (res.code === 200){ + layer.close(dIndex); + layer.msg(res.msg, {icon: 1}); + tableReload(); + } else if (res.code === 403){ + top.location.href = baseUrl+"/"; + }else { + layer.msg(res.msg, {icon: 2}); + } + } + }) + return false; + }); + $(layero).children('.layui-layer-content').css('overflow', 'visible'); + layui.form.render('select'); + } + }); + } + + /* 鍒犻櫎 */ + function del(ids) { + layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', { + skin: 'layui-layer-admin', + shade: .1 + }, function (i) { + layer.close(i); + var loadIndex = layer.load(2); + $.ajax({ + url: baseUrl+"/basContainer/delete/auth", + headers: {'token': localStorage.getItem('token')}, + data: {ids: ids}, + method: 'POST', + success: function (res) { + layer.close(loadIndex); + if (res.code === 200){ + layer.msg(res.msg, {icon: 1}); + tableReload(); + } else if (res.code === 403){ + top.location.href = baseUrl+"/"; + } else { + layer.msg(res.msg, {icon: 2}); + } + } + }) + }); + } + + // 鎼滅储 + form.on('submit(search)', function (data) { + pageCurr = 1; + tableReload(false); + }); + + // 閲嶇疆 + form.on('submit(reset)', function (data) { + pageCurr = 1; + clearFormVal($('#search-box')); + tableReload(false); + }); + + // 鏃堕棿閫夋嫨鍣� + function layDateRender(data) { + setTimeout(function () { + layDate.render({ + elem: '.layui-laydate-range' + ,type: 'datetime' + ,range: true + }); + + }, 300); + } + layDateRender(); + +}); + +// 鍏抽棴鍔ㄤ綔 +$(document).on('click','#data-detail-close', function () { + parent.layer.closeAll(); +}); + +function tableReload(child) { + var searchData = {}; + $.each($('#search-box [name]').serializeArray(), function() { + searchData[this.name] = this.value; + }); + tableIns.reload({ + where: searchData, + page: {curr: pageCurr} + }); +} diff --git a/src/main/webapp/static/js/common.js b/src/main/webapp/static/js/common.js index 9328d87..e003331 100644 --- a/src/main/webapp/static/js/common.js +++ b/src/main/webapp/static/js/common.js @@ -183,9 +183,7 @@ {field: 'matnr', align: 'center',title: '鍟嗗搧缂栧彿锛堝搧鍙凤級', width: 180} // {field: 'id', align: 'center',title: 'ID'} // ,{field: 'uuid', align: 'center',title: '缂栧彿'} - // ,{field: 'tagId$', align: 'center',title: '鎵�灞炲綊绫�'} ,{field: 'maktx', align: 'center',title: '鍟嗗搧鍚嶇О锛堝搧鍚嶏級', width: 200} - // ,{field: 'name', align: 'center',title: '鍒悕'} ,{field: 'specs', align: 'center',title: '瑙勬牸'} ,{field: 'model', align: 'center',title: '浠g爜', hide: true} ,{field: 'color', align: 'center',title: '棰滆壊', hide: true} diff --git a/src/main/webapp/static/js/mat/mat.js b/src/main/webapp/static/js/mat/mat.js index 2805440..3e02ded 100644 --- a/src/main/webapp/static/js/mat/mat.js +++ b/src/main/webapp/static/js/mat/mat.js @@ -5,9 +5,10 @@ var cols = [ {type: 'checkbox'} ,{field: 'tagId$', align: 'center',title: '褰掔被', templet: '#tagTpl'} - ,{field: 'store_max', align: 'center',title: '搴撳瓨涓婇檺'} - ,{field: 'store_min', align: 'center',title: '搴撳瓨涓嬮檺'} - ,{field: 'store_max_date', align: 'center',title: '搴撻緞涓婇檺(澶�)'} + ,{field: 'locType$', align: 'center',title: '搴撲綅绫诲瀷'} + // ,{field: 'store_max', align: 'center',title: '搴撳瓨涓婇檺'} + // ,{field: 'store_min', align: 'center',title: '搴撳瓨涓嬮檺'} + // ,{field: 'store_max_date', align: 'center',title: '搴撻緞涓婇檺(澶�)'} ]; cols.push.apply(cols, matCols); cols.push( diff --git a/src/main/webapp/static/js/task/task.js b/src/main/webapp/static/js/task/task.js index 618cef1..6235ea8 100644 --- a/src/main/webapp/static/js/task/task.js +++ b/src/main/webapp/static/js/task/task.js @@ -22,23 +22,23 @@ height: 'full-120', cols: [[ {type: 'checkbox'} - , {field: 'wrkNo', align: 'center', title: '宸ヤ綔鍙�', sort: true, width: 115} + , {field: 'wrkNo', align: 'center', title: '宸ヤ綔鍙�', sort: true, width: 105} , {field: 'ioTime$', align: 'center', title: '宸ヤ綔鏃堕棿', width: 160} , {field: 'wrkSts$', align: 'center', title: '宸ヤ綔鐘舵��', width: 150} , {field: 'ioType$', align: 'center', title: '鍏ュ嚭搴撶被鍨�', width: 150} - , {field: 'ioPri', align: 'center', title: '浼樺厛绾�'} + , {field: 'ioPri', align: 'center', title: '浼樺厛绾�', width: 80} , {field: 'taskType$', align: 'center', title: '浠诲姟绫诲瀷'} , {field: 'crnNo$', align: 'center', title: '鍫嗗灈鏈�', hide: true} , {field: 'sourceStaNo$', align: 'center', title: '婧愮珯'} - , {field: 'staNo$', align: 'center', title: '鐩爣绔�'} - , {field: 'sourceLocNo', align: 'center', title: '婧愬簱浣�'} - , {field: 'locNo', align: 'center', title: '鐩爣搴撲綅'} - , {field: 'barcode', align: 'center', title: '鏉$爜'} + , {field: 'staNo$', align: 'center', title: '鐩爣绔�', width: 120} + , {field: 'sourceLocNo', align: 'center', title: '婧愬簱浣�', width: 120} + , {field: 'locNo', align: 'center', title: '鐩爣搴撲綅', width: 120} + , {field: 'barcode', align: 'center', title: '鏉$爜', width: 110} , {field: 'preHave', align: 'center', title: '鍏堝叆鍝�', hide: true} , {field: 'takeNone', align: 'center', title: '绌烘搷浣�', hide: true} , {field: 'modiUser$', align: 'center', title: '淇敼浜哄憳', hide: true} , {field: 'modiTime$', align: 'center', title: '淇敼鏃堕棿', hide: true, width: 160} - , {fixed: 'right', title: '鎿嶄綔', align: 'center', toolbar: '#operate', width: 250} + , {fixed: 'right', title: '鎿嶄綔', align: 'center', toolbar: '#operate', width: 200} ]], request: { pageName: 'curr', diff --git a/src/main/webapp/views/basContainer/basContainer.html b/src/main/webapp/views/basContainer/basContainer.html new file mode 100644 index 0000000..f4ee0cf --- /dev/null +++ b/src/main/webapp/views/basContainer/basContainer.html @@ -0,0 +1,92 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title></title> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> +</head> +<body> + +<div class="layui-fluid"> + <div class="layui-card"> + <div class="layui-card-body"> + <div class="layui-form toolbar" id="search-box"> + <div class="layui-form-item"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off"> + </div> + </div> + <div class="layui-inline" style="width: 300px"> + <div class="layui-input-inline"> + <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px"> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off"> + </div> + </div> + <div class="layui-inline">  + <button class="layui-btn icon-btn" lay-filter="search" lay-submit> + <i class="layui-icon"></i>鎼滅储 + </button> + <button class="layui-btn icon-btn" lay-filter="reset" lay-submit> + <i class="layui-icon"></i>閲嶇疆 + </button> + </div> + </div> + </div> + <table class="layui-hide" id="basContainer" lay-filter="basContainer"></table> + </div> + </div> +</div> + +<script type="text/html" id="toolbar"> + <div class="layui-btn-container"> + <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button> + <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button> + <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button> + </div> +</script> + +<script type="text/html" id="operate"> + <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a> + <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a> +</script> + +<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> +<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/basContainer/basContainer.js" charset="utf-8"></script> +</body> +<!-- 琛ㄥ崟寮圭獥 --> +<script type="text/html" id="editDialog"> + <form id="detail" lay-filter="detail" class="layui-form admin-form model-form"> + <input name="id" type="hidden"> + <div class="layui-row"> + <div class="layui-col-md12"> + <div class="layui-form-item"> + <label class="layui-form-label">瀹瑰櫒缂栫爜: </label> + <div class="layui-input-block"> + <input class="layui-input" name="barcode" placeholder="璇疯緭鍏ュ鍣ㄧ紪鐮�"> + </div> + </div> + + </div> + </div> + <hr class="layui-bg-gray"> + <div class="layui-form-item text-right"> + <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button> + <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button> + </div> + </form> +</script> +</html> + diff --git a/src/main/webapp/views/basStation/basStation.html b/src/main/webapp/views/basStation/basStation.html index 33836e2..ec8de94 100644 --- a/src/main/webapp/views/basStation/basStation.html +++ b/src/main/webapp/views/basStation/basStation.html @@ -73,6 +73,9 @@ <div class="layui-row"> <div class="layui-col-md12"> <div class="layui-form-item"> + <input class="layui-input" name="id" style="display: none"> + </div> + <div class="layui-form-item"> <label class="layui-form-label layui-form-required">缂栧彿: </label> <div class="layui-input-block"> <input class="layui-input" name="devNo" placeholder="璇疯緭鍏ョ紪鍙�" lay-vertype="tips" -- Gitblit v1.9.1