From b5efde54cc5a192bbedef8550be335bd73f4f606 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Tue, 12 Mar 2024 18:06:58 +0800 Subject: [PATCH] =?UTF-8?q?add:=20=E5=BA=9F=E7=AE=94=E7=A7=B0=E9=87=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BstIvtScaleboundController.java | 60 ++++++++++ .../service/IBstIvtScaleboundService.java | 43 +++++++ .../bound/service/dao/BstIvtScalebound.java | 34 ++++++ .../dao/mapper/BstIvtScaleboundMapper.java | 12 ++ .../dao/mapper/BstIvtScaleboundMapper.xml | 5 + .../service/dto/BstIvtScaleboundDto.java | 25 +++++ .../service/dto/BstIvtScaleboundQuery.java | 12 ++ .../impl/BstIvtScaleboundServiceImpl.java | 63 +++++++++++ .../BstIvtScalehistoryController.java | 60 ++++++++++ .../service/IBstIvtScalehistoryService.java | 43 +++++++ .../service/dao/BstIvtScalehistory.java | 46 ++++++++ .../dao/mapper/BstIvtScalehistoryMapper.java | 12 ++ .../dao/mapper/BstIvtScalehistoryMapper.xml | 5 + .../service/dto/BstIvtScalehistoryDto.java | 37 ++++++ .../service/dto/BstIvtScalehistoryQuery.java | 12 ++ .../impl/BstIvtScalehistoryServiceImpl.java | 69 ++++++++++++ .../tasks/slitter/service/SlitterService.java | 27 +++++ .../service/impl/SlitterServiceImpl.java | 73 ++++++++++++ .../java/org/nl/wms/basedata/st/wql/stivt.xls | Bin 333312 -> 375808 bytes .../bst/ivt/scale/bound/bstIvtScalebound.js | 27 +++++ .../views/b_lms/bst/ivt/scale/bound/index.vue | 86 ++++++++++++++ .../ivt/scale/history/bstIvtScalehistory.js | 27 +++++ .../b_lms/bst/ivt/scale/history/index.vue | 106 ++++++++++++++++++ 23 files changed, 884 insertions(+) create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/controller/BstIvtScaleboundController.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/IBstIvtScaleboundService.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dao/BstIvtScalebound.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dao/mapper/BstIvtScaleboundMapper.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dao/mapper/BstIvtScaleboundMapper.xml create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dto/BstIvtScaleboundDto.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dto/BstIvtScaleboundQuery.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/impl/BstIvtScaleboundServiceImpl.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/controller/BstIvtScalehistoryController.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/IBstIvtScalehistoryService.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dao/BstIvtScalehistory.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dao/mapper/BstIvtScalehistoryMapper.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dao/mapper/BstIvtScalehistoryMapper.xml create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dto/BstIvtScalehistoryDto.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dto/BstIvtScalehistoryQuery.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/impl/BstIvtScalehistoryServiceImpl.java create mode 100644 lms/nladmin-ui/src/views/b_lms/bst/ivt/scale/bound/bstIvtScalebound.js create mode 100644 lms/nladmin-ui/src/views/b_lms/bst/ivt/scale/bound/index.vue create mode 100644 lms/nladmin-ui/src/views/b_lms/bst/ivt/scale/history/bstIvtScalehistory.js create mode 100644 lms/nladmin-ui/src/views/b_lms/bst/ivt/scale/history/index.vue diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/controller/BstIvtScaleboundController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/controller/BstIvtScaleboundController.java new file mode 100644 index 000000000..c72055bc0 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/controller/BstIvtScaleboundController.java @@ -0,0 +1,60 @@ +package org.nl.b_lms.bst.ivt.scale.bound.controller; + +import lombok.extern.slf4j.Slf4j; +import org.nl.common.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.modules.logging.annotation.Log; +import org.nl.b_lms.bst.ivt.scale.bound.service.IBstIvtScaleboundService; +import org.nl.b_lms.bst.ivt.scale.bound.service.dao.BstIvtScalebound; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; +/** +* @author lyd +* @date 2024-03-12 +**/ +@Slf4j +@RestController +@RequestMapping("/api/bstIvtScalebound") +public class BstIvtScaleboundController { + + @Autowired + private IBstIvtScaleboundService bstIvtScaleboundService; + + @GetMapping + @Log("查询设备与称重机绑定") + //@SaCheckPermission("@el.check('bstIvtScalebound:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(bstIvtScaleboundService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增设备与称重机绑定") + //@SaCheckPermission("@el.check('bstIvtScalebound:add')") + public ResponseEntity + create(@Validated @RequestBody BstIvtScalebound entity){ + bstIvtScaleboundService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改设备与称重机绑定") + //@SaCheckPermission("@el.check('bstIvtScalebound:edit')") + public ResponseEntity update(@Validated @RequestBody BstIvtScalebound entity){ + bstIvtScaleboundService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除设备与称重机绑定") + //@SaCheckPermission("@el.check('bstIvtScalebound:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + bstIvtScaleboundService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/IBstIvtScaleboundService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/IBstIvtScaleboundService.java new file mode 100644 index 000000000..7d05b2e7e --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/IBstIvtScaleboundService.java @@ -0,0 +1,43 @@ +package org.nl.b_lms.bst.ivt.scale.bound.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.b_lms.bst.ivt.scale.bound.service.dao.BstIvtScalebound; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2024-03-12 +**/ +public interface IBstIvtScaleboundService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(BstIvtScalebound entity); + + /** + * 编辑 + * @param entity / + */ + void update(BstIvtScalebound entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dao/BstIvtScalebound.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dao/BstIvtScalebound.java new file mode 100644 index 000000000..c36f43e27 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dao/BstIvtScalebound.java @@ -0,0 +1,34 @@ +package org.nl.b_lms.bst.ivt.scale.bound.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** +* @description 添加'@Builder'注解最好不好添加'@NoArgsConstructor' +* @author lyd +* @date 2024-03-12 +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("bst_ivt_scalebound") +public class BstIvtScalebound implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "scale_id", type = IdType.NONE) + /** id标识 */ + private String scale_id; + + /** 设备编码 */ + private String device_code; + + /** 称重机编码 */ + private String scale_code; + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dao/mapper/BstIvtScaleboundMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dao/mapper/BstIvtScaleboundMapper.java new file mode 100644 index 000000000..bf6b64c70 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dao/mapper/BstIvtScaleboundMapper.java @@ -0,0 +1,12 @@ +package org.nl.b_lms.bst.ivt.scale.bound.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.b_lms.bst.ivt.scale.bound.service.dao.BstIvtScalebound; + +/** +* @author lyd +* @date 2024-03-12 +**/ +public interface BstIvtScaleboundMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dao/mapper/BstIvtScaleboundMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dao/mapper/BstIvtScaleboundMapper.xml new file mode 100644 index 000000000..d018f99a8 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dao/mapper/BstIvtScaleboundMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dto/BstIvtScaleboundDto.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dto/BstIvtScaleboundDto.java new file mode 100644 index 000000000..0ef1f8ad7 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dto/BstIvtScaleboundDto.java @@ -0,0 +1,25 @@ +package org.nl.b_lms.bst.ivt.scale.bound.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import lombok.Builder; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2024-03-12 +**/ +@Data +public class BstIvtScaleboundDto implements Serializable { + + /** id标识 */ + private String scale_id; + + /** 设备编码 */ + private String device_code; + + /** 称重机编码 */ + private String scale_code; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dto/BstIvtScaleboundQuery.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dto/BstIvtScaleboundQuery.java new file mode 100644 index 000000000..01d50fb59 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/dto/BstIvtScaleboundQuery.java @@ -0,0 +1,12 @@ +package org.nl.b_lms.bst.ivt.scale.bound.service.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.b_lms.bst.ivt.scale.bound.service.dao.BstIvtScalebound; + +/** +* @author lyd +* @date 2024-03-12 +**/ +public class BstIvtScaleboundQuery extends BaseQuery { + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/impl/BstIvtScaleboundServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/impl/BstIvtScaleboundServiceImpl.java new file mode 100644 index 000000000..3b0878730 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/bound/service/impl/BstIvtScaleboundServiceImpl.java @@ -0,0 +1,63 @@ +package org.nl.b_lms.bst.ivt.scale.bound.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.SecurityUtils; +import org.nl.b_lms.bst.ivt.scale.bound.service.IBstIvtScaleboundService; +import org.nl.b_lms.bst.ivt.scale.bound.service.dao.mapper.BstIvtScaleboundMapper; +import org.nl.b_lms.bst.ivt.scale.bound.service.dao.BstIvtScalebound; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务实现 +* @author lyd +* @date 2024-03-12 +**/ +@Slf4j +@Service +public class BstIvtScaleboundServiceImpl extends ServiceImpl implements IBstIvtScaleboundService { + + @Autowired + private BstIvtScaleboundMapper bstIvtScaleboundMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery page){ + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + bstIvtScaleboundMapper.selectPage(pages, lam); + return pages; + } + + @Override + public void create(BstIvtScalebound entity) { + + entity.setScale_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + bstIvtScaleboundMapper.insert(entity); + } + + @Override + public void update(BstIvtScalebound entity) { + BstIvtScalebound dto = bstIvtScaleboundMapper.selectById(entity.getScale_id()); + if (dto == null) throw new BadRequestException("被删除或无权限,操作失败!"); + bstIvtScaleboundMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + bstIvtScaleboundMapper.deleteBatchIds(ids); + } + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/controller/BstIvtScalehistoryController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/controller/BstIvtScalehistoryController.java new file mode 100644 index 000000000..4a6da8cfe --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/controller/BstIvtScalehistoryController.java @@ -0,0 +1,60 @@ +package org.nl.b_lms.bst.ivt.scale.history.controller; + +import lombok.extern.slf4j.Slf4j; +import org.nl.common.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.modules.logging.annotation.Log; +import org.nl.b_lms.bst.ivt.scale.history.service.IBstIvtScalehistoryService; +import org.nl.b_lms.bst.ivt.scale.history.service.dao.BstIvtScalehistory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; +/** +* @author lyd +* @date 2024-03-12 +**/ +@Slf4j +@RestController +@RequestMapping("/api/bstIvtScalehistory") +public class BstIvtScalehistoryController { + + @Autowired + private IBstIvtScalehistoryService bstIvtScalehistoryService; + + @GetMapping + @Log("查询称重历史记录") + //@SaCheckPermission("@el.check('bstIvtScalehistory:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(bstIvtScalehistoryService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增称重历史记录") + //@SaCheckPermission("@el.check('bstIvtScalehistory:add')") + public ResponseEntity + create(@Validated @RequestBody BstIvtScalehistory entity){ + bstIvtScalehistoryService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改称重历史记录") + //@SaCheckPermission("@el.check('bstIvtScalehistory:edit')") + public ResponseEntity update(@Validated @RequestBody BstIvtScalehistory entity){ + bstIvtScalehistoryService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除称重历史记录") + //@SaCheckPermission("@el.check('bstIvtScalehistory:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + bstIvtScalehistoryService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/IBstIvtScalehistoryService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/IBstIvtScalehistoryService.java new file mode 100644 index 000000000..180baa496 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/IBstIvtScalehistoryService.java @@ -0,0 +1,43 @@ +package org.nl.b_lms.bst.ivt.scale.history.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.b_lms.bst.ivt.scale.history.service.dao.BstIvtScalehistory; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2024-03-12 +**/ +public interface IBstIvtScalehistoryService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(BstIvtScalehistory entity); + + /** + * 编辑 + * @param entity / + */ + void update(BstIvtScalehistory entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dao/BstIvtScalehistory.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dao/BstIvtScalehistory.java new file mode 100644 index 000000000..dc409f7fd --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dao/BstIvtScalehistory.java @@ -0,0 +1,46 @@ +package org.nl.b_lms.bst.ivt.scale.history.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** +* @description 添加'@Builder'注解最好不好添加'@NoArgsConstructor' +* @author lyd +* @date 2024-03-12 +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("bst_ivt_scalehistory") +public class BstIvtScalehistory implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "history_id", type = IdType.NONE) + /** id标识 */ + private String history_id; + + /** 设备编码 */ + private String device_code; + + /** 称重机编码 */ + private String scale_code; + + /** 当前重量 */ + private String current_weight; + + /** 上次重量 */ + private String last_weight; + + /** 重量差 */ + private String weight_gap; + + /** 记录时间 */ + private String record_time; + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dao/mapper/BstIvtScalehistoryMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dao/mapper/BstIvtScalehistoryMapper.java new file mode 100644 index 000000000..c3eabb6b5 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dao/mapper/BstIvtScalehistoryMapper.java @@ -0,0 +1,12 @@ +package org.nl.b_lms.bst.ivt.scale.history.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.b_lms.bst.ivt.scale.history.service.dao.BstIvtScalehistory; + +/** +* @author lyd +* @date 2024-03-12 +**/ +public interface BstIvtScalehistoryMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dao/mapper/BstIvtScalehistoryMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dao/mapper/BstIvtScalehistoryMapper.xml new file mode 100644 index 000000000..feb521f06 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dao/mapper/BstIvtScalehistoryMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dto/BstIvtScalehistoryDto.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dto/BstIvtScalehistoryDto.java new file mode 100644 index 000000000..35634b1a6 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dto/BstIvtScalehistoryDto.java @@ -0,0 +1,37 @@ +package org.nl.b_lms.bst.ivt.scale.history.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import lombok.Builder; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2024-03-12 +**/ +@Data +public class BstIvtScalehistoryDto implements Serializable { + + /** id标识 */ + private String history_id; + + /** 设备编码 */ + private String device_code; + + /** 称重机编码 */ + private String scale_code; + + /** 当前重量 */ + private String current_weight; + + /** 上次重量 */ + private String last_weight; + + /** 重量差 */ + private String weight_gap; + + /** 记录时间 */ + private String record_time; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dto/BstIvtScalehistoryQuery.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dto/BstIvtScalehistoryQuery.java new file mode 100644 index 000000000..bf3418f92 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/dto/BstIvtScalehistoryQuery.java @@ -0,0 +1,12 @@ +package org.nl.b_lms.bst.ivt.scale.history.service.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.b_lms.bst.ivt.scale.history.service.dao.BstIvtScalehistory; + +/** +* @author lyd +* @date 2024-03-12 +**/ +public class BstIvtScalehistoryQuery extends BaseQuery { + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/impl/BstIvtScalehistoryServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/impl/BstIvtScalehistoryServiceImpl.java new file mode 100644 index 000000000..3f272e4df --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/scale/history/service/impl/BstIvtScalehistoryServiceImpl.java @@ -0,0 +1,69 @@ +package org.nl.b_lms.bst.ivt.scale.history.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.SecurityUtils; +import org.nl.b_lms.bst.ivt.scale.history.service.IBstIvtScalehistoryService; +import org.nl.b_lms.bst.ivt.scale.history.service.dao.mapper.BstIvtScalehistoryMapper; +import org.nl.b_lms.bst.ivt.scale.history.service.dao.BstIvtScalehistory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务实现 +* @author lyd +* @date 2024-03-12 +**/ +@Slf4j +@Service +public class BstIvtScalehistoryServiceImpl extends ServiceImpl implements IBstIvtScalehistoryService { + + @Autowired + private BstIvtScalehistoryMapper bstIvtScalehistoryMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery page){ + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + bstIvtScalehistoryMapper.selectPage(pages, lam); + return pages; + } + + @Override + public void create(BstIvtScalehistory entity) { + String now = DateUtil.now(); + + entity.setHistory_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + entity.setRecord_time(now); + bstIvtScalehistoryMapper.insert(entity); + } + + @Override + public void update(BstIvtScalehistory entity) { + BstIvtScalehistory dto = bstIvtScalehistoryMapper.selectById(entity.getHistory_id()); + if (dto == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + String now = DateUtil.now(); + entity.setRecord_time(now); + + bstIvtScalehistoryMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + bstIvtScalehistoryMapper.deleteBatchIds(ids); + } + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java index 9a7a03e6f..020f0bed1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java @@ -48,4 +48,31 @@ public interface SlitterService { * @return */ JSONObject mesSlittingMachineSendMaterial(JSONObject param); + + + /** + * 分切子卷获取LMS,AGV废箔称重重量 + * @param param "ResourceName": "设备编码" + * @return + * { + * "RTOAL": 1, + * "RTMSG": "操作成功!", + * "RTYPE": "S", + * "RTDAT": [ + * { + * "ResourceName": "设备号", + * "Weight": "差异重量", + * “WeighDate”:"称重时间" + * } + * ] + * } + */ + JSONObject mesGetWeighingOfWasteFoil(JSONObject param); + + /** + * 分切子卷获取LMS,AGV废箔称重重量MES提交废箔成功 + * @param param + * @return + */ + JSONObject mesGetFinishWeighingOfWasteFoil(JSONObject param); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java index 114f0f6f2..bcecfc454 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java @@ -11,6 +11,9 @@ import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.nl.b_lms.bst.ivt.cutpointivt.service.IBstIvtCutpointivtService; import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt; +import org.nl.b_lms.bst.ivt.scale.bound.service.IBstIvtScaleboundService; +import org.nl.b_lms.bst.ivt.scale.bound.service.dao.BstIvtScalebound; +import org.nl.b_lms.bst.ivt.scale.history.service.IBstIvtScalehistoryService; import org.nl.b_lms.bst.ivt.shafttubeivt.service.IBstIvtShafttubeivtService; import org.nl.b_lms.bst.ivt.shafttubeivt.service.dao.BstIvtShafttubeivt; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; @@ -28,6 +31,7 @@ import org.nl.b_lms.sch.tasks.slitter.mapper.SlitterMapper; import org.nl.b_lms.sch.tasks.slitter.service.SlitterService; import org.nl.common.utils.TaskUtils; import org.nl.modules.common.exception.BadRequestException; +import org.nl.wms.ext.acs.service.WmsToAcsService; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; @@ -71,6 +75,12 @@ public class SlitterServiceImpl implements SlitterService { private RedissonClient redissonClient; @Autowired private TrussCallShaftCacheTask trussCallShaftCacheTask; + @Autowired + private IBstIvtScaleboundService scaleBoundService; + @Autowired + private IBstIvtScalehistoryService scaleHistoryService; + @Autowired + private WmsToAcsService wmsToAcsService; @Override public JSONObject acsRequestShaftLoadTube(JSONObject param) { @@ -476,4 +486,67 @@ public class SlitterServiceImpl implements SlitterService { res.put("message", "子卷出站任务生成成功!"); return res; } + + @Override + public JSONObject mesGetWeighingOfWasteFoil(JSONObject param) { + JSONObject res = new JSONObject(); + JSONObject resData = new JSONObject(); + String resourceName = param.getString("ResourceName"); + // 获取称的设备号 + BstIvtScalebound scaleEquipment = scaleBoundService.getOne(new LambdaQueryWrapper() + .eq(BstIvtScalebound::getDevice_code, resourceName)); + // 下发给acs称重 + JSONArray acsParam = new JSONArray(); + JSONObject acsWeighing = new JSONObject(); + acsWeighing.put("device_code", scaleEquipment.getScale_code()); + acsWeighing.put("code", "to_command"); + acsWeighing.put("value", "6"); + acsWeighing.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + acsParam.add(acsWeighing); + JSONObject action = wmsToAcsService.action(acsParam); + if (HttpStatus.HTTP_OK == action.getInteger("status")) { + // 记录数据库 + res.put("RTOAL", 1); + res.put("RTMSG", "操作成功!"); + res.put("RTYPE", "S"); + res.put("RTDAT", resData); + resData.put("ResourceName", resourceName); + resData.put("Weight", ""); + resData.put("WeighDate", ""); + return res; + } + res.put("RTOAL", 0); + res.put("RTMSG", "称重失败!"); + res.put("RTYPE", "F"); + return res; + } + + @Override + public JSONObject mesGetFinishWeighingOfWasteFoil(JSONObject param) { + JSONObject res = new JSONObject(); + String resourceName = param.getString("ResourceName"); + // 获取称的设备号 + BstIvtScalebound scaleEquipment = scaleBoundService.getOne(new LambdaQueryWrapper() + .eq(BstIvtScalebound::getDevice_code, resourceName)); + // 下发给acs称重 + JSONArray acsParam = new JSONArray(); + JSONObject acsWeighing = new JSONObject(); + acsWeighing.put("device_code", scaleEquipment.getScale_code()); + acsWeighing.put("code", "to_command"); + acsWeighing.put("value", "8"); + acsWeighing.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + acsParam.add(acsWeighing); + JSONObject action = wmsToAcsService.action(acsParam); + if (HttpStatus.HTTP_OK == action.getInteger("status")) { + // 记录数据库 + res.put("RTOAL", 1); + res.put("RTMSG", "操作成功!"); + res.put("RTYPE", "S"); + return res; + } + res.put("RTOAL", 0); + res.put("RTMSG", "操作失败!"); + res.put("RTYPE", "F"); + return res; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls index 9f5da05762988d5b227438b901a59b556fde926d..bb93052031bcf0925fcb8fff5a86673d7853552f 100644 GIT binary patch delta 65943 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 V*d926Ys|`M5LDoOVbG&H{s;XAbMgQH delta 29279 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°3%qRjw9pOBqEkfIC=4*F2Uk+xWlO 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 +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + diff --git a/lms/nladmin-ui/src/views/b_lms/bst/ivt/scale/history/bstIvtScalehistory.js b/lms/nladmin-ui/src/views/b_lms/bst/ivt/scale/history/bstIvtScalehistory.js new file mode 100644 index 000000000..96dc9d26c --- /dev/null +++ b/lms/nladmin-ui/src/views/b_lms/bst/ivt/scale/history/bstIvtScalehistory.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/bstIvtScalehistory', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/bstIvtScalehistory/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/bstIvtScalehistory', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/lms/nladmin-ui/src/views/b_lms/bst/ivt/scale/history/index.vue b/lms/nladmin-ui/src/views/b_lms/bst/ivt/scale/history/index.vue new file mode 100644 index 000000000..8d71217ed --- /dev/null +++ b/lms/nladmin-ui/src/views/b_lms/bst/ivt/scale/history/index.vue @@ -0,0 +1,106 @@ + + + + +