| ¶Ô±ÈÐÂÎļþ |
| | |
| | | **/.idea |
| | | **/logs |
| | | **/target |
| | | **/.vscode |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qm.controller; |
| | | |
| | | import java.util.List; |
| | | |
| | | import lombok.RequiredArgsConstructor; |
| | | import jakarta.servlet.http.HttpServletResponse; |
| | | import jakarta.validation.constraints.*; |
| | | import cn.dev33.satoken.annotation.SaCheckPermission; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.dromara.common.idempotent.annotation.RepeatSubmit; |
| | | import org.dromara.common.log.annotation.Log; |
| | | import org.dromara.common.web.core.BaseController; |
| | | import org.dromara.common.mybatis.core.page.PageQuery; |
| | | import org.dromara.common.core.domain.R; |
| | | import org.dromara.common.core.validate.AddGroup; |
| | | import org.dromara.common.core.validate.EditGroup; |
| | | import org.dromara.common.log.enums.BusinessType; |
| | | import org.dromara.common.excel.utils.ExcelUtil; |
| | | import org.dromara.qm.domain.vo.QmBatchVo; |
| | | import org.dromara.qm.domain.bo.QmBatchBo; |
| | | import org.dromara.qm.service.IQmBatchService; |
| | | import org.dromara.common.mybatis.core.page.TableDataInfo; |
| | | |
| | | /** |
| | | * æ£éªæ¹æ¬¡ |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-02 |
| | | */ |
| | | @Validated |
| | | @RequiredArgsConstructor |
| | | @RestController |
| | | @RequestMapping("/qm/batch") |
| | | public class QmBatchController extends BaseController { |
| | | |
| | | private final IQmBatchService qmBatchService; |
| | | |
| | | /** |
| | | * æ¥è¯¢æ£éªæ¹æ¬¡å表 |
| | | */ |
| | | @SaCheckPermission("qm:batch:list") |
| | | @GetMapping("/list") |
| | | public TableDataInfo<QmBatchVo> list(QmBatchBo bo, PageQuery pageQuery) { |
| | | return qmBatchService.queryPageList(bo, pageQuery); |
| | | } |
| | | |
| | | /** |
| | | * å¯¼åºæ£éªæ¹æ¬¡å表 |
| | | */ |
| | | @SaCheckPermission("qm:batch:export") |
| | | @Log(title = "æ£éªæ¹æ¬¡", businessType = BusinessType.EXPORT) |
| | | @PostMapping("/export") |
| | | public void export(QmBatchBo bo, HttpServletResponse response) { |
| | | List<QmBatchVo> list = qmBatchService.queryList(bo); |
| | | ExcelUtil.exportExcel(list, "æ£éªæ¹æ¬¡", QmBatchVo.class, response); |
| | | } |
| | | |
| | | /** |
| | | * è·åæ£éªæ¹æ¬¡è¯¦ç»ä¿¡æ¯ |
| | | * |
| | | * @param id ä¸»é® |
| | | */ |
| | | @SaCheckPermission("qm:batch:query") |
| | | @GetMapping("/{id}") |
| | | public R<QmBatchVo> getInfo(@NotNull(message = "主é®ä¸è½ä¸ºç©º") |
| | | @PathVariable String id) { |
| | | return R.ok(qmBatchService.queryById(id)); |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢æ£éªæ¹æ¬¡ |
| | | */ |
| | | @SaCheckPermission("qm:batch:add") |
| | | @Log(title = "æ£éªæ¹æ¬¡", businessType = BusinessType.INSERT) |
| | | @RepeatSubmit() |
| | | @PostMapping() |
| | | public R<Void> add(@Validated(AddGroup.class) @RequestBody QmBatchBo bo) { |
| | | return toAjax(qmBatchService.insertByBo(bo)); |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹æ£éªæ¹æ¬¡ |
| | | */ |
| | | @SaCheckPermission("qm:batch:edit") |
| | | @Log(title = "æ£éªæ¹æ¬¡", businessType = BusinessType.UPDATE) |
| | | @RepeatSubmit() |
| | | @PutMapping() |
| | | public R<Void> edit(@Validated(EditGroup.class) @RequestBody QmBatchBo bo) { |
| | | return toAjax(qmBatchService.updateByBo(bo)); |
| | | } |
| | | |
| | | /** |
| | | * å 餿£éªæ¹æ¬¡ |
| | | * |
| | | * @param ids 主é®ä¸² |
| | | */ |
| | | @SaCheckPermission("qm:batch:remove") |
| | | @Log(title = "æ£éªæ¹æ¬¡", businessType = BusinessType.DELETE) |
| | | @DeleteMapping("/{ids}") |
| | | public R<Void> remove(@NotEmpty(message = "主é®ä¸è½ä¸ºç©º") |
| | | @PathVariable String[] ids) { |
| | | return toAjax(qmBatchService.deleteWithValidByIds(List.of(ids), true)); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qm.domain; |
| | | |
| | | import org.dromara.common.mybatis.core.domain.BaseEntity; |
| | | import com.baomidou.mybatisplus.annotation.*; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import java.util.Date; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | |
| | | import java.io.Serial; |
| | | |
| | | /** |
| | | * æ£éªæ¹æ¬¡å¯¹è±¡ qm_batch |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-02 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @TableName("qm_batch") |
| | | public class QmBatch extends BaseEntity { |
| | | |
| | | @Serial |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ç¼ç |
| | | */ |
| | | @TableId(value = "id") |
| | | private String id; |
| | | |
| | | /** |
| | | * æ¹æ¬¡ä»£ç |
| | | */ |
| | | private String batchCode; |
| | | |
| | | /** |
| | | * æ¹æ¬¡åç§° |
| | | */ |
| | | private String batchName; |
| | | |
| | | /** |
| | | * A-å¶ä¸ B-æå C-å·å
D-å°ç®± E-ç³é¦æ |
| | | */ |
| | | private String typ; |
| | | |
| | | /** |
| | | * æºå°ä»£ç |
| | | */ |
| | | private String eqpCode; |
| | | |
| | | /** |
| | | * çå· |
| | | */ |
| | | private String matCode; |
| | | |
| | | /** |
| | | * å¤å®ä¾æ®ä»£ç |
| | | */ |
| | | private String judgeCode; |
| | | |
| | | /** |
| | | * æ¹æ¬¡çææ¥æ |
| | | */ |
| | | private Date batchDate; |
| | | |
| | | /** |
| | | * ä½¿ç¨æ å¿ |
| | | */ |
| | | private String isflag; |
| | | |
| | | /** |
| | | * å¯ç¨æ å¿ |
| | | */ |
| | | private String enabled; |
| | | |
| | | /** |
| | | * å°è´§æ»é |
| | | */ |
| | | private Long totalNum; |
| | | |
| | | /** |
| | | * 综åå¤å® |
| | | */ |
| | | private String results; |
| | | |
| | | /** |
| | | * æ¹å人 |
| | | */ |
| | | private String approver; |
| | | |
| | | /** |
| | | * å®¡æ ¸äºº |
| | | */ |
| | | private String auditor; |
| | | |
| | | /** |
| | | * å建人 |
| | | */ |
| | | private String creater; |
| | | |
| | | /** |
| | | * å¶è¡¨æ¥æ |
| | | */ |
| | | private Date tabDate; |
| | | |
| | | /** |
| | | * çæ¬åç§° |
| | | */ |
| | | private String verName; |
| | | |
| | | /** |
| | | * çæ¬ç¼å· |
| | | */ |
| | | private String verCode; |
| | | |
| | | /** |
| | | * ä¿åæ |
| | | */ |
| | | private String archDate; |
| | | |
| | | /** |
| | | * 0-æªä¸ä¼ mes,1-å·²ä¸ä¼ , 3-ä»MESä¸è½½ |
| | | */ |
| | | private String flag; |
| | | |
| | | /** |
| | | * ä¸ä¼ MESæ¶é´ |
| | | */ |
| | | private Date toMesDate; |
| | | |
| | | /** |
| | | * ä»MESæ¶é´ä¸è½½ |
| | | */ |
| | | private Date fromMesDate; |
| | | |
| | | /** |
| | | * å 餿 å¿ |
| | | */ |
| | | private Long deleted; |
| | | |
| | | /** |
| | | * æ¹æ¬¡æè¿° |
| | | */ |
| | | private String batchDes; |
| | | |
| | | /** |
| | | * ç±»å« 0ï¼æå 1ï¼è¾
æ |
| | | */ |
| | | private String category; |
| | | |
| | | /** |
| | | * å·å¶å·¥å· |
| | | */ |
| | | private String makeno; |
| | | |
| | | /** |
| | | * çæ¬¡æºå· |
| | | */ |
| | | private String shifteqpno; |
| | | |
| | | /** |
| | | * è£
ç®±å· |
| | | */ |
| | | private String boxno; |
| | | |
| | | /** |
| | | * ç¶æ¹æ¬¡å· |
| | | */ |
| | | private String pid; |
| | | |
| | | /** |
| | | * 夿 ¸äºº |
| | | */ |
| | | private String reviewer; |
| | | |
| | | /** |
| | | * 夿£æ¬¡æ° |
| | | */ |
| | | private Long rvcount; |
| | | |
| | | /** |
| | | * æ¹æ¬¡ç¶æ |
| | | */ |
| | | private String state; |
| | | |
| | | /** |
| | | * 夿 ¸æ¥æ |
| | | */ |
| | | private Date reviewTime; |
| | | |
| | | /** |
| | | * å®¡æ ¸æ¥æ |
| | | */ |
| | | private Date auditTime; |
| | | |
| | | /** |
| | | * è§æ ¼ |
| | | */ |
| | | private String spec; |
| | | |
| | | /** |
| | | * æ¹åæ¶é´ |
| | | */ |
| | | private Date approveTime; |
| | | |
| | | /** |
| | | * å°è´§åä½ |
| | | */ |
| | | private String unit; |
| | | |
| | | /** |
| | | * å°è´§æ¥æ |
| | | */ |
| | | private Date arrivalTime; |
| | | |
| | | /** |
| | | * åæ¾å°ç¹ |
| | | */ |
| | | private String storagePlace; |
| | | |
| | | /** |
| | | * æ£éªå |
| | | */ |
| | | private String checker; |
| | | |
| | | /** |
| | | * æ¥åæ¥æ |
| | | */ |
| | | private Date receiveTime; |
| | | |
| | | /** |
| | | * æ¥æ£æ¥æ |
| | | */ |
| | | private Date inspTime; |
| | | |
| | | /** |
| | | * ä»åºä¿ç®¡å |
| | | */ |
| | | private String storer; |
| | | |
| | | /** |
| | | * æ¯å¦éªè¯ |
| | | */ |
| | | private String isverify; |
| | | |
| | | /** |
| | | * æ¯å¦æ£éª |
| | | */ |
| | | private String ischk; |
| | | |
| | | /** |
| | | * å¤ç¨1 |
| | | */ |
| | | private String bak1; |
| | | |
| | | /** |
| | | * å¤ç¨2 |
| | | */ |
| | | private String bak2; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qm.domain.bo; |
| | | |
| | | import org.dromara.qm.domain.QmBatch; |
| | | import org.dromara.common.mybatis.core.domain.BaseEntity; |
| | | import org.dromara.common.core.validate.AddGroup; |
| | | import org.dromara.common.core.validate.EditGroup; |
| | | import io.github.linpeilie.annotations.AutoMapper; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import jakarta.validation.constraints.*; |
| | | import java.util.Date; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | |
| | | /** |
| | | * æ£éªæ¹æ¬¡ä¸å¡å¯¹è±¡ qm_batch |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-02 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @AutoMapper(target = QmBatch.class, reverseConvertGenerate = false) |
| | | public class QmBatchBo extends BaseEntity { |
| | | |
| | | /** |
| | | * ç¼ç |
| | | */ |
| | | @NotBlank(message = "ç¼ç ä¸è½ä¸ºç©º", groups = { EditGroup.class }) |
| | | private String id; |
| | | |
| | | /** |
| | | * æ¹æ¬¡ä»£ç |
| | | */ |
| | | private String batchCode; |
| | | |
| | | /** |
| | | * æ¹æ¬¡åç§° |
| | | */ |
| | | private String batchName; |
| | | |
| | | /** |
| | | * A-å¶ä¸ B-æå C-å·å
D-å°ç®± E-ç³é¦æ |
| | | */ |
| | | private String typ; |
| | | |
| | | /** |
| | | * æºå°ä»£ç |
| | | */ |
| | | private String eqpCode; |
| | | |
| | | /** |
| | | * çå· |
| | | */ |
| | | private String matCode; |
| | | |
| | | /** |
| | | * å¤å®ä¾æ®ä»£ç |
| | | */ |
| | | private String judgeCode; |
| | | |
| | | /** |
| | | * æ¹æ¬¡çææ¥æ |
| | | */ |
| | | private Date batchDate; |
| | | |
| | | /** |
| | | * ä½¿ç¨æ å¿ |
| | | */ |
| | | private String isflag; |
| | | |
| | | /** |
| | | * å¯ç¨æ å¿ |
| | | */ |
| | | private String enabled; |
| | | |
| | | /** |
| | | * å°è´§æ»é |
| | | */ |
| | | private Long totalNum; |
| | | |
| | | /** |
| | | * 综åå¤å® |
| | | */ |
| | | private String results; |
| | | |
| | | /** |
| | | * æ¹å人 |
| | | */ |
| | | private String approver; |
| | | |
| | | /** |
| | | * å®¡æ ¸äºº |
| | | */ |
| | | private String auditor; |
| | | |
| | | /** |
| | | * å建人 |
| | | */ |
| | | private String creater; |
| | | |
| | | /** |
| | | * å¶è¡¨æ¥æ |
| | | */ |
| | | private Date tabDate; |
| | | |
| | | /** |
| | | * çæ¬åç§° |
| | | */ |
| | | private String verName; |
| | | |
| | | /** |
| | | * çæ¬ç¼å· |
| | | */ |
| | | private String verCode; |
| | | |
| | | /** |
| | | * ä¿åæ |
| | | */ |
| | | private String archDate; |
| | | |
| | | /** |
| | | * 0-æªä¸ä¼ mes,1-å·²ä¸ä¼ , 3-ä»MESä¸è½½ |
| | | */ |
| | | private String flag; |
| | | |
| | | /** |
| | | * ä¸ä¼ MESæ¶é´ |
| | | */ |
| | | private Date toMesDate; |
| | | |
| | | /** |
| | | * ä»MESæ¶é´ä¸è½½ |
| | | */ |
| | | private Date fromMesDate; |
| | | |
| | | /** |
| | | * å 餿 å¿ |
| | | */ |
| | | private Long deleted; |
| | | |
| | | /** |
| | | * æ¹æ¬¡æè¿° |
| | | */ |
| | | private String batchDes; |
| | | |
| | | /** |
| | | * ç±»å« 0ï¼æå 1ï¼è¾
æ |
| | | */ |
| | | private String category; |
| | | |
| | | /** |
| | | * å·å¶å·¥å· |
| | | */ |
| | | private String makeno; |
| | | |
| | | /** |
| | | * çæ¬¡æºå· |
| | | */ |
| | | private String shifteqpno; |
| | | |
| | | /** |
| | | * è£
ç®±å· |
| | | */ |
| | | private String boxno; |
| | | |
| | | /** |
| | | * ç¶æ¹æ¬¡å· |
| | | */ |
| | | private String pid; |
| | | |
| | | /** |
| | | * 夿 ¸äºº |
| | | */ |
| | | private String reviewer; |
| | | |
| | | /** |
| | | * 夿£æ¬¡æ° |
| | | */ |
| | | private Long rvcount; |
| | | |
| | | /** |
| | | * æ¹æ¬¡ç¶æ |
| | | */ |
| | | private String state; |
| | | |
| | | /** |
| | | * 夿 ¸æ¥æ |
| | | */ |
| | | private Date reviewTime; |
| | | |
| | | /** |
| | | * å®¡æ ¸æ¥æ |
| | | */ |
| | | private Date auditTime; |
| | | |
| | | /** |
| | | * è§æ ¼ |
| | | */ |
| | | private String spec; |
| | | |
| | | /** |
| | | * æ¹åæ¶é´ |
| | | */ |
| | | private Date approveTime; |
| | | |
| | | /** |
| | | * å°è´§åä½ |
| | | */ |
| | | private String unit; |
| | | |
| | | /** |
| | | * å°è´§æ¥æ |
| | | */ |
| | | private Date arrivalTime; |
| | | |
| | | /** |
| | | * åæ¾å°ç¹ |
| | | */ |
| | | private String storagePlace; |
| | | |
| | | /** |
| | | * æ£éªå |
| | | */ |
| | | private String checker; |
| | | |
| | | /** |
| | | * æ¥åæ¥æ |
| | | */ |
| | | private Date receiveTime; |
| | | |
| | | /** |
| | | * æ¥æ£æ¥æ |
| | | */ |
| | | private Date inspTime; |
| | | |
| | | /** |
| | | * ä»åºä¿ç®¡å |
| | | */ |
| | | private String storer; |
| | | |
| | | /** |
| | | * æ¯å¦éªè¯ |
| | | */ |
| | | private String isverify; |
| | | |
| | | /** |
| | | * æ¯å¦æ£éª |
| | | */ |
| | | private String ischk; |
| | | |
| | | /** |
| | | * å¤ç¨1 |
| | | */ |
| | | private String bak1; |
| | | |
| | | /** |
| | | * å¤ç¨2 |
| | | */ |
| | | private String bak2; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qm.domain.vo; |
| | | |
| | | import java.util.Date; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import org.dromara.qm.domain.QmBatch; |
| | | import cn.idev.excel.annotation.ExcelIgnoreUnannotated; |
| | | import cn.idev.excel.annotation.ExcelProperty; |
| | | import org.dromara.common.excel.annotation.ExcelDictFormat; |
| | | import org.dromara.common.excel.convert.ExcelDictConvert; |
| | | import io.github.linpeilie.annotations.AutoMapper; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serial; |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | |
| | | |
| | | /** |
| | | * æ£éªæ¹æ¬¡è§å¾å¯¹è±¡ qm_batch |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-02 |
| | | */ |
| | | @Data |
| | | @ExcelIgnoreUnannotated |
| | | @AutoMapper(target = QmBatch.class) |
| | | public class QmBatchVo implements Serializable { |
| | | |
| | | @Serial |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ç¼ç |
| | | */ |
| | | @ExcelProperty(value = "ç¼ç ") |
| | | private String id; |
| | | |
| | | /** |
| | | * æ¹æ¬¡ä»£ç |
| | | */ |
| | | @ExcelProperty(value = "æ¹æ¬¡ä»£ç ") |
| | | private String batchCode; |
| | | |
| | | /** |
| | | * æ¹æ¬¡åç§° |
| | | */ |
| | | @ExcelProperty(value = "æ¹æ¬¡åç§°") |
| | | private String batchName; |
| | | |
| | | /** |
| | | * A-å¶ä¸ B-æå C-å·å
D-å°ç®± E-ç³é¦æ |
| | | */ |
| | | @ExcelProperty(value = "A-å¶ä¸ B-æå C-å·å
D-å°ç®± E-ç³é¦æ") |
| | | private String typ; |
| | | |
| | | /** |
| | | * æºå°ä»£ç |
| | | */ |
| | | @ExcelProperty(value = "æºå°ä»£ç ") |
| | | private String eqpCode; |
| | | |
| | | /** |
| | | * çå· |
| | | */ |
| | | @ExcelProperty(value = "çå·") |
| | | private String matCode; |
| | | |
| | | /** |
| | | * å¤å®ä¾æ®ä»£ç |
| | | */ |
| | | @ExcelProperty(value = "å¤å®ä¾æ®ä»£ç ") |
| | | private String judgeCode; |
| | | |
| | | /** |
| | | * æ¹æ¬¡çææ¥æ |
| | | */ |
| | | @ExcelProperty(value = "æ¹æ¬¡çææ¥æ") |
| | | private Date batchDate; |
| | | |
| | | /** |
| | | * ä½¿ç¨æ å¿ |
| | | */ |
| | | @ExcelProperty(value = "ä½¿ç¨æ å¿") |
| | | private String isflag; |
| | | |
| | | /** |
| | | * å¯ç¨æ å¿ |
| | | */ |
| | | @ExcelProperty(value = "å¯ç¨æ å¿") |
| | | private String enabled; |
| | | |
| | | /** |
| | | * å°è´§æ»é |
| | | */ |
| | | @ExcelProperty(value = "å°è´§æ»é") |
| | | private Long totalNum; |
| | | |
| | | /** |
| | | * 综åå¤å® |
| | | */ |
| | | @ExcelProperty(value = "综åå¤å®") |
| | | private String results; |
| | | |
| | | /** |
| | | * æ¹å人 |
| | | */ |
| | | @ExcelProperty(value = "æ¹å人") |
| | | private String approver; |
| | | |
| | | /** |
| | | * å®¡æ ¸äºº |
| | | */ |
| | | @ExcelProperty(value = "å®¡æ ¸äºº") |
| | | private String auditor; |
| | | |
| | | /** |
| | | * å建人 |
| | | */ |
| | | @ExcelProperty(value = "å建人") |
| | | private String creater; |
| | | |
| | | /** |
| | | * å¶è¡¨æ¥æ |
| | | */ |
| | | @ExcelProperty(value = "å¶è¡¨æ¥æ") |
| | | private Date tabDate; |
| | | |
| | | /** |
| | | * çæ¬åç§° |
| | | */ |
| | | @ExcelProperty(value = "çæ¬åç§°") |
| | | private String verName; |
| | | |
| | | /** |
| | | * çæ¬ç¼å· |
| | | */ |
| | | @ExcelProperty(value = "çæ¬ç¼å·") |
| | | private String verCode; |
| | | |
| | | /** |
| | | * ä¿åæ |
| | | */ |
| | | @ExcelProperty(value = "ä¿åæ") |
| | | private String archDate; |
| | | |
| | | /** |
| | | * 0-æªä¸ä¼ mes,1-å·²ä¸ä¼ , 3-ä»MESä¸è½½ |
| | | */ |
| | | @ExcelProperty(value = "0-æªä¸ä¼ mes,1-å·²ä¸ä¼ , 3-ä»MESä¸è½½") |
| | | private String flag; |
| | | |
| | | /** |
| | | * ä¸ä¼ MESæ¶é´ |
| | | */ |
| | | @ExcelProperty(value = "ä¸ä¼ MESæ¶é´") |
| | | private Date toMesDate; |
| | | |
| | | /** |
| | | * ä»MESæ¶é´ä¸è½½ |
| | | */ |
| | | @ExcelProperty(value = "ä»MESæ¶é´ä¸è½½") |
| | | private Date fromMesDate; |
| | | |
| | | /** |
| | | * å 餿 å¿ |
| | | */ |
| | | @ExcelProperty(value = "å 餿 å¿") |
| | | private Long deleted; |
| | | |
| | | /** |
| | | * æ¹æ¬¡æè¿° |
| | | */ |
| | | @ExcelProperty(value = "æ¹æ¬¡æè¿°") |
| | | private String batchDes; |
| | | |
| | | /** |
| | | * ç±»å« 0ï¼æå 1ï¼è¾
æ |
| | | */ |
| | | @ExcelProperty(value = "ç±»å« 0ï¼æå 1ï¼è¾
æ") |
| | | private String category; |
| | | |
| | | /** |
| | | * å·å¶å·¥å· |
| | | */ |
| | | @ExcelProperty(value = "å·å¶å·¥å·") |
| | | private String makeno; |
| | | |
| | | /** |
| | | * çæ¬¡æºå· |
| | | */ |
| | | @ExcelProperty(value = "çæ¬¡æºå·") |
| | | private String shifteqpno; |
| | | |
| | | /** |
| | | * è£
ç®±å· |
| | | */ |
| | | @ExcelProperty(value = "è£
ç®±å·") |
| | | private String boxno; |
| | | |
| | | /** |
| | | * ç¶æ¹æ¬¡å· |
| | | */ |
| | | @ExcelProperty(value = "ç¶æ¹æ¬¡å·") |
| | | private String pid; |
| | | |
| | | /** |
| | | * 夿 ¸äºº |
| | | */ |
| | | @ExcelProperty(value = "夿 ¸äºº") |
| | | private String reviewer; |
| | | |
| | | /** |
| | | * 夿£æ¬¡æ° |
| | | */ |
| | | @ExcelProperty(value = "夿£æ¬¡æ°") |
| | | private Long rvcount; |
| | | |
| | | /** |
| | | * æ¹æ¬¡ç¶æ |
| | | */ |
| | | @ExcelProperty(value = "æ¹æ¬¡ç¶æ") |
| | | private String state; |
| | | |
| | | /** |
| | | * 夿 ¸æ¥æ |
| | | */ |
| | | @ExcelProperty(value = "夿 ¸æ¥æ") |
| | | private Date reviewTime; |
| | | |
| | | /** |
| | | * å®¡æ ¸æ¥æ |
| | | */ |
| | | @ExcelProperty(value = "å®¡æ ¸æ¥æ") |
| | | private Date auditTime; |
| | | |
| | | /** |
| | | * è§æ ¼ |
| | | */ |
| | | @ExcelProperty(value = "è§æ ¼") |
| | | private String spec; |
| | | |
| | | /** |
| | | * æ¹åæ¶é´ |
| | | */ |
| | | @ExcelProperty(value = "æ¹åæ¶é´") |
| | | private Date approveTime; |
| | | |
| | | /** |
| | | * å°è´§åä½ |
| | | */ |
| | | @ExcelProperty(value = "å°è´§åä½") |
| | | private String unit; |
| | | |
| | | /** |
| | | * å°è´§æ¥æ |
| | | */ |
| | | @ExcelProperty(value = "å°è´§æ¥æ") |
| | | private Date arrivalTime; |
| | | |
| | | /** |
| | | * åæ¾å°ç¹ |
| | | */ |
| | | @ExcelProperty(value = "åæ¾å°ç¹") |
| | | private String storagePlace; |
| | | |
| | | /** |
| | | * æ£éªå |
| | | */ |
| | | @ExcelProperty(value = "æ£éªå") |
| | | private String checker; |
| | | |
| | | /** |
| | | * æ¥åæ¥æ |
| | | */ |
| | | @ExcelProperty(value = "æ¥åæ¥æ") |
| | | private Date receiveTime; |
| | | |
| | | /** |
| | | * æ¥æ£æ¥æ |
| | | */ |
| | | @ExcelProperty(value = "æ¥æ£æ¥æ") |
| | | private Date inspTime; |
| | | |
| | | /** |
| | | * ä»åºä¿ç®¡å |
| | | */ |
| | | @ExcelProperty(value = "ä»åºä¿ç®¡å") |
| | | private String storer; |
| | | |
| | | /** |
| | | * æ¯å¦éªè¯ |
| | | */ |
| | | @ExcelProperty(value = "æ¯å¦éªè¯") |
| | | private String isverify; |
| | | |
| | | /** |
| | | * æ¯å¦æ£éª |
| | | */ |
| | | @ExcelProperty(value = "æ¯å¦æ£éª") |
| | | private String ischk; |
| | | |
| | | /** |
| | | * å¤ç¨1 |
| | | */ |
| | | @ExcelProperty(value = "å¤ç¨1") |
| | | private String bak1; |
| | | |
| | | /** |
| | | * å¤ç¨2 |
| | | */ |
| | | @ExcelProperty(value = "å¤ç¨2") |
| | | private String bak2; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qm.mapper; |
| | | |
| | | import org.dromara.qm.domain.QmBatch; |
| | | import org.dromara.qm.domain.vo.QmBatchVo; |
| | | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; |
| | | |
| | | /** |
| | | * æ£éªæ¹æ¬¡Mapperæ¥å£ |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-02 |
| | | */ |
| | | public interface QmBatchMapper extends BaseMapperPlus<QmBatch, QmBatchVo> { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qm.service; |
| | | |
| | | import org.dromara.qm.domain.vo.QmBatchVo; |
| | | import org.dromara.qm.domain.bo.QmBatchBo; |
| | | import org.dromara.common.mybatis.core.page.TableDataInfo; |
| | | import org.dromara.common.mybatis.core.page.PageQuery; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * æ£éªæ¹æ¬¡Serviceæ¥å£ |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-02 |
| | | */ |
| | | public interface IQmBatchService { |
| | | |
| | | /** |
| | | * æ¥è¯¢æ£éªæ¹æ¬¡ |
| | | * |
| | | * @param id ä¸»é® |
| | | * @return æ£éªæ¹æ¬¡ |
| | | */ |
| | | QmBatchVo queryById(String id); |
| | | |
| | | /** |
| | | * å页æ¥è¯¢æ£éªæ¹æ¬¡å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @param pageQuery å页忰 |
| | | * @return æ£éªæ¹æ¬¡å页å表 |
| | | */ |
| | | TableDataInfo<QmBatchVo> queryPageList(QmBatchBo bo, PageQuery pageQuery); |
| | | |
| | | /** |
| | | * æ¥è¯¢ç¬¦åæ¡ä»¶çæ£éªæ¹æ¬¡å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @return æ£éªæ¹æ¬¡å表 |
| | | */ |
| | | List<QmBatchVo> queryList(QmBatchBo bo); |
| | | |
| | | /** |
| | | * æ°å¢æ£éªæ¹æ¬¡ |
| | | * |
| | | * @param bo æ£éªæ¹æ¬¡ |
| | | * @return æ¯å¦æ°å¢æå |
| | | */ |
| | | Boolean insertByBo(QmBatchBo bo); |
| | | |
| | | /** |
| | | * ä¿®æ¹æ£éªæ¹æ¬¡ |
| | | * |
| | | * @param bo æ£éªæ¹æ¬¡ |
| | | * @return æ¯å¦ä¿®æ¹æå |
| | | */ |
| | | Boolean updateByBo(QmBatchBo bo); |
| | | |
| | | /** |
| | | * æ ¡éªå¹¶æ¹éå 餿£éªæ¹æ¬¡ä¿¡æ¯ |
| | | * |
| | | * @param ids å¾
å é¤ç主é®éå |
| | | * @param isValid æ¯å¦è¿è¡æææ§æ ¡éª |
| | | * @return æ¯å¦å 餿å |
| | | */ |
| | | Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qm.service.impl; |
| | | |
| | | import org.dromara.common.core.utils.MapstructUtils; |
| | | import org.dromara.common.core.utils.StringUtils; |
| | | import org.dromara.common.mybatis.core.page.TableDataInfo; |
| | | import org.dromara.common.mybatis.core.page.PageQuery; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | import org.dromara.qm.domain.bo.QmBatchBo; |
| | | import org.dromara.qm.domain.vo.QmBatchVo; |
| | | import org.dromara.qm.domain.QmBatch; |
| | | import org.dromara.qm.mapper.QmBatchMapper; |
| | | import org.dromara.qm.service.IQmBatchService; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Collection; |
| | | |
| | | /** |
| | | * æ£éªæ¹æ¬¡Serviceä¸å¡å±å¤ç |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-02 |
| | | */ |
| | | @Slf4j |
| | | @RequiredArgsConstructor |
| | | @Service |
| | | public class QmBatchServiceImpl implements IQmBatchService { |
| | | |
| | | private final QmBatchMapper baseMapper; |
| | | |
| | | /** |
| | | * æ¥è¯¢æ£éªæ¹æ¬¡ |
| | | * |
| | | * @param id ä¸»é® |
| | | * @return æ£éªæ¹æ¬¡ |
| | | */ |
| | | @Override |
| | | public QmBatchVo queryById(String id){ |
| | | return baseMapper.selectVoById(id); |
| | | } |
| | | |
| | | /** |
| | | * å页æ¥è¯¢æ£éªæ¹æ¬¡å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @param pageQuery å页忰 |
| | | * @return æ£éªæ¹æ¬¡å页å表 |
| | | */ |
| | | @Override |
| | | public TableDataInfo<QmBatchVo> queryPageList(QmBatchBo bo, PageQuery pageQuery) { |
| | | LambdaQueryWrapper<QmBatch> lqw = buildQueryWrapper(bo); |
| | | Page<QmBatchVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); |
| | | return TableDataInfo.build(result); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢ç¬¦åæ¡ä»¶çæ£éªæ¹æ¬¡å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @return æ£éªæ¹æ¬¡å表 |
| | | */ |
| | | @Override |
| | | public List<QmBatchVo> queryList(QmBatchBo bo) { |
| | | LambdaQueryWrapper<QmBatch> lqw = buildQueryWrapper(bo); |
| | | return baseMapper.selectVoList(lqw); |
| | | } |
| | | |
| | | private LambdaQueryWrapper<QmBatch> buildQueryWrapper(QmBatchBo bo) { |
| | | Map<String, Object> params = bo.getParams(); |
| | | LambdaQueryWrapper<QmBatch> lqw = Wrappers.lambdaQuery(); |
| | | lqw.orderByAsc(QmBatch::getId); |
| | | lqw.like(StringUtils.isNotBlank(bo.getBatchCode()), QmBatch::getBatchCode, bo.getBatchCode()); |
| | | lqw.eq(StringUtils.isNotBlank(bo.getTyp()), QmBatch::getTyp, bo.getTyp()); |
| | | lqw.eq(StringUtils.isNotBlank(bo.getEqpCode()), QmBatch::getEqpCode, bo.getEqpCode()); |
| | | lqw.eq(StringUtils.isNotBlank(bo.getMatCode()), QmBatch::getMatCode, bo.getMatCode()); |
| | | lqw.eq(bo.getBatchDate() != null, QmBatch::getBatchDate, bo.getBatchDate()); |
| | | lqw.eq(StringUtils.isNotBlank(bo.getFlag()), QmBatch::getFlag, bo.getFlag()); |
| | | lqw.between(params.get("beginToMesDate") != null && params.get("endToMesDate") != null, |
| | | QmBatch::getToMesDate ,params.get("beginToMesDate"), params.get("endToMesDate")); |
| | | lqw.between(params.get("beginFromMesDate") != null && params.get("endFromMesDate") != null, |
| | | QmBatch::getFromMesDate ,params.get("beginFromMesDate"), params.get("endFromMesDate")); |
| | | lqw.eq(bo.getDeleted() != null, QmBatch::getDeleted, bo.getDeleted()); |
| | | lqw.eq(StringUtils.isNotBlank(bo.getCategory()), QmBatch::getCategory, bo.getCategory()); |
| | | lqw.eq(StringUtils.isNotBlank(bo.getState()), QmBatch::getState, bo.getState()); |
| | | return lqw; |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢æ£éªæ¹æ¬¡ |
| | | * |
| | | * @param bo æ£éªæ¹æ¬¡ |
| | | * @return æ¯å¦æ°å¢æå |
| | | */ |
| | | @Override |
| | | public Boolean insertByBo(QmBatchBo bo) { |
| | | QmBatch add = MapstructUtils.convert(bo, QmBatch.class); |
| | | validEntityBeforeSave(add); |
| | | boolean flag = baseMapper.insert(add) > 0; |
| | | if (flag) { |
| | | bo.setId(add.getId()); |
| | | } |
| | | return flag; |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹æ£éªæ¹æ¬¡ |
| | | * |
| | | * @param bo æ£éªæ¹æ¬¡ |
| | | * @return æ¯å¦ä¿®æ¹æå |
| | | */ |
| | | @Override |
| | | public Boolean updateByBo(QmBatchBo bo) { |
| | | QmBatch update = MapstructUtils.convert(bo, QmBatch.class); |
| | | validEntityBeforeSave(update); |
| | | return baseMapper.updateById(update) > 0; |
| | | } |
| | | |
| | | /** |
| | | * ä¿ååçæ°æ®æ ¡éª |
| | | */ |
| | | private void validEntityBeforeSave(QmBatch entity){ |
| | | //TODO åä¸äºæ°æ®æ ¡éª,å¦å¯ä¸çº¦æ |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªå¹¶æ¹éå 餿£éªæ¹æ¬¡ä¿¡æ¯ |
| | | * |
| | | * @param ids å¾
å é¤ç主é®éå |
| | | * @param isValid æ¯å¦è¿è¡æææ§æ ¡éª |
| | | * @return æ¯å¦å 餿å |
| | | */ |
| | | @Override |
| | | public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) { |
| | | if(isValid){ |
| | | //TODO åä¸äºä¸å¡ä¸çæ ¡éª,夿æ¯å¦éè¦æ ¡éª |
| | | } |
| | | return baseMapper.deleteByIds(ids) > 0; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?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="org.dromara.qm.mapper.QmBatchMapper"> |
| | | </mapper> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # Getting Started |
| | | |
| | | ### Reference Documentation |
| | | |
| | | For further reference, please consider the following sections: |
| | | |
| | | * [Official Apache Maven documentation](https://maven.apache.org/guides/index.html) |
| | | * [Spring Boot Maven Plugin Reference Guide](https://docs.spring.io/spring-boot/docs/2.6.13/maven-plugin/reference/html/) |
| | | * [Create an OCI image](https://docs.spring.io/spring-boot/docs/2.6.13/maven-plugin/reference/html/#build-image) |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | <groupId>com.shlb</groupId> |
| | | <artifactId>TimescaleDB-Utils</artifactId> |
| | | <version>0.0.1-SNAPSHOT</version> |
| | | <name>TimescaleDB-Utils</name> |
| | | <description>TimescaleDB-Utils</description> |
| | | <properties> |
| | | <java.version>1.8</java.version> |
| | | <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
| | | <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> |
| | | <spring-boot.version>2.6.13</spring-boot.version> |
| | | </properties> |
| | | <dependencies> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-web</artifactId> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>com.baomidou</groupId> |
| | | <artifactId>mybatis-plus-boot-starter</artifactId> |
| | | <version>3.5.3.1</version> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>org.postgresql</groupId> |
| | | <artifactId>postgresql</artifactId> |
| | | <scope>runtime</scope> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-data-redis</artifactId> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>org.projectlombok</groupId> |
| | | <artifactId>lombok</artifactId> |
| | | <optional>true</optional> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.alibaba</groupId> |
| | | <artifactId>fastjson</artifactId> |
| | | <version>1.2.83</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-test</artifactId> |
| | | <scope>test</scope> |
| | | </dependency> |
| | | </dependencies> |
| | | <dependencyManagement> |
| | | <dependencies> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-dependencies</artifactId> |
| | | <version>${spring-boot.version}</version> |
| | | <type>pom</type> |
| | | <scope>import</scope> |
| | | </dependency> |
| | | </dependencies> |
| | | </dependencyManagement> |
| | | |
| | | <build> |
| | | <plugins> |
| | | <plugin> |
| | | <groupId>org.apache.maven.plugins</groupId> |
| | | <artifactId>maven-compiler-plugin</artifactId> |
| | | <version>3.8.1</version> |
| | | <configuration> |
| | | <source>1.8</source> |
| | | <target>1.8</target> |
| | | <encoding>UTF-8</encoding> |
| | | </configuration> |
| | | </plugin> |
| | | <plugin> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-maven-plugin</artifactId> |
| | | <version>${spring-boot.version}</version> |
| | | <configuration> |
| | | <mainClass>com.shlb.timescaledbutils.TimescaleDbUtilsApplication</mainClass> |
| | | </configuration> |
| | | <executions> |
| | | <execution> |
| | | <id>repackage</id> |
| | | <goals> |
| | | <goal>repackage</goal> |
| | | </goals> |
| | | </execution> |
| | | </executions> |
| | | </plugin> |
| | | </plugins> |
| | | </build> |
| | | |
| | | </project> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | |
| | | ç¹å«æ³¨æï¼ |
| | | postgresæ¶åºé®é¢ï¼å®è£
å妿æ¯UTCè¦æ¹æ Asia/Shanghai(+8) |
| | | |
| | | |
| | | 卿è¿è¡åæ° my_new_key - > éè¦å卿°æ®åºçä¸çº§keyï¼ sync-interval-ms - > å卿¶é´é´é |
| | | java -jar TimescaleDB-Utils.jar \ |
| | | --spring.redis.queue-key=my_new_key \ |
| | | --spring.redis.sync-interval-ms=2000 |
| | | |
| | | |
| | | |
| | | //å·æ¥æºè¡¨ |
| | | -- å建主表 |
| | | CREATE TABLE roller_time_data ( |
| | | -- æ¶åºè¡¨å¿
éçåæ®µ |
| | | time TIMESTAMPTZ NOT NULL, |
| | | key TEXT NOT NULL, -- 设为 NOT NULL å ä¸ºæ¨æåºå®ç key å表 |
| | | shift INTEGER, -- çæ¬¡ (1使°å) |
| | | equ_no INTEGER, -- 设å¤å· (3使°å) |
| | | |
| | | -- æ¨çä¸å¡å段 |
| | | online INTEGER, -- ç½ç»ç¶æ(0å¼å¸¸ 1æ£å¸¸) |
| | | qty DOUBLE PRECISION, -- 产é |
| | | bad_qty DOUBLE PRECISION, -- åé¤äº§é |
| | | lvbang_val DOUBLE PRECISION, -- æ»¤æ£æ¶è |
| | | juanyanzhi_val DOUBLE PRECISION, -- å·ç纸æ¶è |
| | | shuisongzhi_val DOUBLE PRECISION, -- æ°´æ¾çº¸æ¶è |
| | | run_time DOUBLE PRECISION, -- è¿è¡æ¶é´ |
| | | stop_time DOUBLE PRECISION, -- åæºæ¶é´ |
| | | stop_times INTEGER, -- åæºæ¬¡æ° |
| | | speed INTEGER, -- 车é |
| | | run_status INTEGER, -- è¿è¡ç¶æ(-1æç½ 0忢 1ä½éè¿è¡ 2æ£å¸¸è¿è¡) |
| | | cy DOUBLE PRECISION, -- å¨ç设å¤å¨é |
| | | cy_cs INTEGER, -- å¨ç设å¤è½¦é(1-å
è£
æº 6-å·çæº) |
| | | cy_online TEXT, -- (22-å·çæºè¿è¡ç¶æ 23-å
è£
æºè¿è¡ç¶æ) |
| | | rec_qty1 DOUBLE PRECISION, -- æ¥æ¶æºé |
| | | rec_qty2 DOUBLE PRECISION -- æ¥æ¶æºé2 |
| | | ); |
| | | |
| | | -- å°è¡¨è½¬æ¢ä¸ºè¶
è¡¨ï¼æå¤©ååºï¼ækeyè¿è¡ç©ºé´ååºï¼ |
| | | SELECT create_hypertable( |
| | | 'roller_time_data', |
| | | 'time', |
| | | chunk_time_interval => INTERVAL '1 day' |
| | | ); |
| | | |
| | | -- æ·»å 空é´ååºç»´åº¦ï¼ækeyååºï¼ |
| | | -- åæ 8 个ååºï¼æ¯ä¸ªååºå¤§çº¦å
å« 4-5 个 key |
| | | SELECT add_dimension( |
| | | 'roller_time_data', |
| | | 'key', |
| | | number_partitions => 8 |
| | | ); |
| | | |
| | | -- å建索å¼ä»¥æé«æ¥è¯¢æ§è½ |
| | | -- å¤åç´¢å¼ï¼éåææ¶é´åkeyæ¥è¯¢ |
| | | CREATE INDEX idx_roller_time_data_time_key ON roller_time_data (time DESC, key); |
| | | -- åç¬ç´¢å¼ï¼éåækeyæ¥è¯¢ |
| | | CREATE INDEX idx_roller_time_data_key_time ON roller_time_data (key, time DESC); |
| | | -- ä¸å¡æ¥è¯¢å¸¸ç¨åæ®µç´¢å¼ |
| | | CREATE INDEX idx_roller_time_data_run_status_key ON roller_time_data (run_status, key, time DESC); |
| | | CREATE INDEX idx_roller_time_data_online_key ON roller_time_data (online, key, time DESC); |
| | | CREATE INDEX idx_roller_time_data_speed_key ON roller_time_data (speed, key, time DESC); |
| | | |
| | | -- çæ¬¡å设å¤å·ç´¢å¼ |
| | | CREATE INDEX idx_roller_time_data_shift ON roller_time_data (shift); |
| | | CREATE INDEX idx_roller_time_data_equ_no ON roller_time_data (equ_no); |
| | | |
| | | -- å¯éï¼å¦ææäºè®¾å¤æ°æ®éç¹å«å¤§ï¼å¯ä»¥ä¸ºç¹å®è®¾å¤å建ä¸ç¨ç´¢å¼ |
| | | -- CREATE INDEX idx_roller_1101 ON roller_time_data (time DESC) WHERE key = '1101'; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | //å
è£
æº |
| | | -- å建主表 |
| | | CREATE TABLE packer_time_data ( |
| | | -- æ¶åºè¡¨å¿
éçåæ®µ |
| | | time TIMESTAMPTZ NOT NULL, |
| | | key TEXT NOT NULL, |
| | | shift INTEGER, -- çæ¬¡ (1使°å) |
| | | equ_no INTEGER, -- 设å¤å· (3使°å) |
| | | |
| | | -- æ¨çä¸å¡å段 |
| | | online INTEGER, -- ç½ç»ç¶æ(0å¼å¸¸ï¼1æ£å¸¸) |
| | | qty DOUBLE PRECISION, -- 产é |
| | | bad_qty DOUBLE PRECISION, -- åé¤äº§é |
| | | xiaohemo_val DOUBLE PRECISION, -- å°çèæ¶è |
| | | tiaohemo_val DOUBLE PRECISION, -- æ¡çèæ¶è |
| | | xiaohezhi_val DOUBLE PRECISION, -- å°ç纸æ¶è |
| | | tiaohezhi_val DOUBLE PRECISION, -- æ¡ç纸æ¶è |
| | | neichenzhi_val DOUBLE PRECISION, -- å
衬纸æ¶è |
| | | run_time DOUBLE PRECISION, -- è¿è¡æ¶é´ |
| | | stop_time DOUBLE PRECISION, -- åæºæ¶é´ |
| | | stop_times INTEGER, -- åæºæ¬¡æ° |
| | | speed INTEGER, -- 车é |
| | | run_status INTEGER, -- è¿è¡ç¶æ(-1 æç½ 0忢 1ä½éè¿è¡ 2æ£å¸¸è¿è¡) |
| | | ts_qty DOUBLE PRECISION, -- æåæºäº§é |
| | | main_qty DOUBLE PRECISION, -- 主æºäº§éï¼å°å
æºï¼ |
| | | main_bad_qty DOUBLE PRECISION, -- 主æºåé¤é |
| | | tbj_qty DOUBLE PRECISION, -- éå
æºäº§é |
| | | tbj_gd_qty DOUBLE PRECISION, -- éå
æºåé¤å¥½å
|
| | | tbj_bad_qty DOUBLE PRECISION, -- éå
æºåé¤åå
|
| | | pbj_qty DOUBLE PRECISION -- æå
æºäº§é |
| | | ); |
| | | |
| | | -- å°è¡¨è½¬æ¢ä¸ºè¶
è¡¨ï¼æå¤©ååºï¼ |
| | | SELECT create_hypertable( |
| | | 'packer_time_data', |
| | | 'time', |
| | | chunk_time_interval => INTERVAL '1 day' |
| | | ); |
| | | |
| | | -- æ·»å 空é´ååºç»´åº¦ï¼ækeyååºï¼åæ8个ååºï¼ |
| | | SELECT add_dimension( |
| | | 'packer_time_data', |
| | | 'key', |
| | | number_partitions => 8 |
| | | ); |
| | | |
| | | -- å建å¤åç´¢å¼ï¼æ¶é´+keyï¼ |
| | | CREATE INDEX idx_packer_time_data_time_key ON packer_time_data (time DESC, key); |
| | | |
| | | -- å建ååå¤åç´¢å¼ï¼key+æ¶é´ï¼ |
| | | CREATE INDEX idx_packer_time_data_key_time ON packer_time_data (key, time DESC); |
| | | |
| | | -- å建è¿è¡ç¶æç¸å
³ç´¢å¼ |
| | | CREATE INDEX idx_packer_run_status_key ON packer_time_data (run_status, key, time DESC); |
| | | |
| | | -- å建ç½ç»ç¶æç´¢å¼ |
| | | CREATE INDEX idx_packer_online_key ON packer_time_data (online, key, time DESC); |
| | | |
| | | -- å建车éç´¢å¼ |
| | | CREATE INDEX idx_packer_speed_key ON packer_time_data (speed, key, time DESC); |
| | | |
| | | -- å建产éç¸å
³ç´¢å¼ï¼å¸¸ç¨ç»è®¡æ¥è¯¢ï¼ |
| | | CREATE INDEX idx_packer_qty_key ON packer_time_data (qty, key, time DESC); |
| | | |
| | | -- åå»ºåæºç¸å
³ç´¢å¼ |
| | | CREATE INDEX idx_packer_stop_key ON packer_time_data (stop_times, key, time DESC); |
| | | |
| | | -- çæ¬¡å设å¤å·ç´¢å¼ |
| | | CREATE INDEX idx_packer_time_data_shift ON packer_time_data (shift); |
| | | CREATE INDEX idx_packer_time_data_equ_no ON packer_time_data (equ_no); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | //è£
ç®±æº |
| | | -- å建主表 |
| | | CREATE TABLE box_time_data ( |
| | | -- æ¶åºè¡¨å¿
éçåæ®µ |
| | | time TIMESTAMPTZ NOT NULL, |
| | | key TEXT NOT NULL, |
| | | shift INTEGER, -- çæ¬¡ (1使°å) |
| | | equ_no INTEGER, -- 设å¤å· (3使°å) |
| | | |
| | | -- æ¨çä¸å¡å段 |
| | | online INTEGER, -- ç½ç»ç¶æ 0å¼å¸¸ï¼1æ£å¸¸ |
| | | qty1 DOUBLE PRECISION, -- 1#è£
å°ç®±æºäº§é |
| | | pbj_qty DOUBLE PRECISION -- æå
æºäº§é |
| | | ); |
| | | |
| | | -- å°è¡¨è½¬æ¢ä¸ºè¶
è¡¨ï¼æå¤©ååºï¼ |
| | | SELECT create_hypertable( |
| | | 'box_time_data', |
| | | 'time', |
| | | chunk_time_interval => INTERVAL '1 day' |
| | | ); |
| | | |
| | | -- æ·»å 空é´ååºç»´åº¦ï¼ækeyååºï¼åæ8个ååºï¼ |
| | | SELECT add_dimension( |
| | | 'box_time_data', |
| | | 'key', |
| | | number_partitions => 8 |
| | | ); |
| | | |
| | | -- å建å¤åç´¢å¼ï¼æ¶é´+keyï¼ - 主æ¥è¯¢æ¨¡å¼ |
| | | CREATE INDEX idx_box_time_data_time_key ON box_time_data (time DESC, key); |
| | | |
| | | -- å建ååå¤åç´¢å¼ï¼key+æ¶é´ï¼ - æè®¾å¤æ¥è¯¢ |
| | | CREATE INDEX idx_box_time_data_key_time ON box_time_data (key, time DESC); |
| | | |
| | | -- å建ç½ç»ç¶æç´¢å¼ |
| | | CREATE INDEX idx_box_online_key ON box_time_data (online, key, time DESC); |
| | | |
| | | -- å建产éç´¢å¼ï¼å¸¸ç¨äºç»è®¡æ¥è¯¢ï¼ |
| | | CREATE INDEX idx_box_qty1_key ON box_time_data (qty1, key, time DESC); |
| | | CREATE INDEX idx_box_pbj_qty_key ON box_time_data (pbj_qty, key, time DESC); |
| | | |
| | | -- å建å¤å产éç´¢å¼ï¼åæ¶æ¥è¯¢ä¸¤ä¸ªäº§éåæ®µï¼ |
| | | CREATE INDEX idx_box_qtys_key ON box_time_data (qty1, pbj_qty, key, time DESC); |
| | | |
| | | -- çæ¬¡å设å¤å·ç´¢å¼ |
| | | CREATE INDEX idx_box_time_data_shift ON box_time_data (shift); |
| | | CREATE INDEX idx_box_time_data_equ_no ON box_time_data (equ_no); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | //æåæº |
| | | -- å建主表 |
| | | CREATE TABLE makeup_time_data ( |
| | | -- æ¶åºè¡¨å¿
éçåæ®µ |
| | | time TIMESTAMPTZ NOT NULL, |
| | | key TEXT NOT NULL, |
| | | shift INTEGER, -- çæ¬¡ (1使°å) |
| | | equ_no INTEGER, -- 设å¤å· (3使°å) |
| | | |
| | | -- æ¨çä¸å¡å段 |
| | | online INTEGER, -- ç½ç»ç¶æ 0å¼å¸¸ï¼1æ£å¸¸ |
| | | qty DOUBLE PRECISION, -- 产é |
| | | bad_qty DOUBLE PRECISION, -- åé¤äº§é |
| | | panzhi_val DOUBLE PRECISION, -- ç纸æ¶è |
| | | run_time DOUBLE PRECISION, -- è¿è¡æ¶é´ |
| | | stop_time DOUBLE PRECISION, -- åæºæ¶é´ |
| | | stop_times INTEGER, -- åæºæ¬¡æ° |
| | | speed INTEGER -- 车é |
| | | ); |
| | | |
| | | -- å°è¡¨è½¬æ¢ä¸ºè¶
è¡¨ï¼æå¤©ååºï¼ |
| | | SELECT create_hypertable( |
| | | 'makeup_time_data', |
| | | 'time', |
| | | chunk_time_interval => INTERVAL '1 day' |
| | | ); |
| | | |
| | | -- æ·»å 空é´ååºç»´åº¦ï¼ækeyååºï¼åæ8个ååºï¼ |
| | | SELECT add_dimension( |
| | | 'makeup_time_data', |
| | | 'key', |
| | | number_partitions => 8 |
| | | ); |
| | | |
| | | -- å建主æ¥è¯¢å¤åç´¢å¼ï¼æ¶é´+keyï¼ |
| | | CREATE INDEX idx_makeup_time_data_time_key ON makeup_time_data (time DESC, key); |
| | | |
| | | -- å建æè®¾å¤æ¥è¯¢å¤åç´¢å¼ï¼key+æ¶é´ï¼ |
| | | CREATE INDEX idx_makeup_time_data_key_time ON makeup_time_data (key, time DESC); |
| | | |
| | | -- å建ç½ç»ç¶æç´¢å¼ |
| | | CREATE INDEX idx_makeup_online_key ON makeup_time_data (online, key, time DESC); |
| | | |
| | | -- çæ¬¡å设å¤å·ç´¢å¼ |
| | | CREATE INDEX idx_makeup_time_data_shift ON makeup_time_data (shift); |
| | | CREATE INDEX idx_makeup_time_data_equ_no ON makeup_time_data (equ_no); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | //åå°æº |
| | | -- å建主表 |
| | | CREATE TABLE trans_time_data ( |
| | | -- æ¶åºè¡¨å¿
éçåæ®µ |
| | | time TIMESTAMPTZ NOT NULL, |
| | | key TEXT NOT NULL, |
| | | shift INTEGER, -- çæ¬¡ (1使°å) |
| | | equ_no INTEGER, -- 设å¤å· (3使°å) |
| | | |
| | | -- æ¨çä¸å¡å段 |
| | | online INTEGER, -- ç½ç»ç¶æ 0å¼å¸¸ï¼1æ£å¸¸ |
| | | |
| | | -- ç®¡éæ»¤æ£è®¡æ°ï¼1-10å·ç®¡éï¼ |
| | | p_qty1 DOUBLE PRECISION, -- 管é1滤æ£è®¡æ° |
| | | p_qty2 DOUBLE PRECISION, -- 管é2滤æ£è®¡æ° |
| | | p_qty3 DOUBLE PRECISION, -- 管é3滤æ£è®¡æ° |
| | | p_qty4 DOUBLE PRECISION, -- 管é4滤æ£è®¡æ° |
| | | p_qty5 DOUBLE PRECISION, -- 管é5滤æ£è®¡æ° |
| | | p_qty6 DOUBLE PRECISION, -- 管é6滤æ£è®¡æ° |
| | | p_qty7 DOUBLE PRECISION, -- 管é7滤æ£è®¡æ° |
| | | p_qty8 DOUBLE PRECISION, -- 管é8滤æ£è®¡æ° |
| | | p_qty9 DOUBLE PRECISION, -- 管é9滤æ£è®¡æ° |
| | | p_qty10 DOUBLE PRECISION, -- 管é10滤æ£è®¡æ° |
| | | |
| | | -- ç®¡éæ»¤æ£é度ï¼1-10å·ç®¡éï¼ |
| | | speed1 DOUBLE PRECISION, -- 管é1滤æ£é度 |
| | | speed2 DOUBLE PRECISION, -- 管é2滤æ£é度 |
| | | speed3 DOUBLE PRECISION, -- 管é3滤æ£é度 |
| | | speed4 DOUBLE PRECISION, -- 管é4滤æ£é度 |
| | | speed5 DOUBLE PRECISION, -- 管é5滤æ£é度 |
| | | speed6 DOUBLE PRECISION, -- 管é6滤æ£é度 |
| | | speed7 DOUBLE PRECISION, -- 管é7滤æ£é度 |
| | | speed8 DOUBLE PRECISION, -- 管é8滤æ£é度 |
| | | speed9 DOUBLE PRECISION, -- 管é9滤æ£é度 |
| | | speed10 DOUBLE PRECISION, -- 管é10滤æ£é度 |
| | | |
| | | -- å¸çæºç¸å
³ |
| | | xp_state INTEGER, -- å¸çæºç¶æ |
| | | tray_qty1 DOUBLE PRECISION -- å¸çæºäº§é |
| | | ); |
| | | |
| | | -- å°è¡¨è½¬æ¢ä¸ºè¶
è¡¨ï¼æå¤©ååºï¼ |
| | | SELECT create_hypertable( |
| | | 'trans_time_data', |
| | | 'time', |
| | | chunk_time_interval => INTERVAL '1 day' |
| | | ); |
| | | |
| | | -- æ·»å 空é´ååºç»´åº¦ï¼ækeyååºï¼åæ8个ååºï¼ |
| | | SELECT add_dimension( |
| | | 'trans_time_data', |
| | | 'key', |
| | | number_partitions => 8 |
| | | ); |
| | | |
| | | -- å建主æ¥è¯¢å¤åç´¢å¼ |
| | | CREATE INDEX idx_trans_time_data_time_key ON trans_time_data (time DESC, key); |
| | | CREATE INDEX idx_trans_time_data_key_time ON trans_time_data (key, time DESC); |
| | | -- çæ¬¡å设å¤å·ç´¢å¼ |
| | | CREATE INDEX idx_trans_time_data_shift ON trans_time_data (shift); |
| | | CREATE INDEX idx_trans_time_data_equ_no ON trans_time_data (equ_no); |
| | | |
| | | -- å建ç½ç»ç¶æç´¢å¼ |
| | | CREATE INDEX idx_trans_online_key ON trans_time_data (online, key, time DESC); |
| | | |
| | | -- å建å¸çæºç¶æç´¢å¼ |
| | | CREATE INDEX idx_trans_xp_state_key ON trans_time_data (xp_state, key, time DESC); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | //æåæº |
| | | -- å建主表 |
| | | CREATE TABLE hoister_time_data ( |
| | | -- æ¶åºè¡¨å¿
éçåæ®µ |
| | | time TIMESTAMPTZ NOT NULL, |
| | | key TEXT NOT NULL, |
| | | shift INTEGER, -- çæ¬¡ (1使°å) |
| | | equ_no INTEGER, -- 设å¤å· (3使°å) |
| | | |
| | | -- åºç¡å段 |
| | | online INTEGER, -- ç½ç»ç¶æ 0å¼å¸¸ï¼1æ£å¸¸ |
| | | qty DOUBLE PRECISION, -- 产éï¼æ»äº§éï¼ï¼ |
| | | |
| | | -- æåæºç¶æï¼1-12å·ï¼ |
| | | t_state1 DOUBLE PRECISION, -- 1#æåæºç¶æ |
| | | t_state2 DOUBLE PRECISION, -- 2#æåæºç¶æ |
| | | t_state3 DOUBLE PRECISION, -- 3#æåæºç¶æ |
| | | t_state4 DOUBLE PRECISION, -- 4#æåæºç¶æ |
| | | t_state5 DOUBLE PRECISION, -- 5#æåæºç¶æ |
| | | t_state6 DOUBLE PRECISION, -- 6#æåæºç¶æ |
| | | t_state7 DOUBLE PRECISION, -- 7#æåæºç¶æ |
| | | t_state8 DOUBLE PRECISION, -- 8#æåæºç¶æ |
| | | t_state9 DOUBLE PRECISION, -- 9#æåæºç¶æ |
| | | t_state10 DOUBLE PRECISION, -- 10#æåæºç¶æ |
| | | t_state11 DOUBLE PRECISION, -- 11#æåæºç¶æ |
| | | t_state12 DOUBLE PRECISION, -- 12#æåæºç¶æ |
| | | |
| | | -- æå
æºç¶æï¼1-4å·ï¼ |
| | | p_state1 DOUBLE PRECISION, -- 1#æå
æºç¶æ |
| | | p_state2 DOUBLE PRECISION, -- 2#æå
æºç¶æ |
| | | p_state3 DOUBLE PRECISION, -- 3#æå
æºç¶æ |
| | | p_state4 DOUBLE PRECISION, -- 4#æå
æºç¶æ |
| | | |
| | | -- æåæºäº§éï¼1-12å·ï¼ |
| | | t_qty1 DOUBLE PRECISION, -- 1#æåæºäº§é |
| | | t_qty2 DOUBLE PRECISION, -- 2#æåæºäº§é |
| | | t_qty3 DOUBLE PRECISION, -- 3#æåæºäº§é |
| | | t_qty4 DOUBLE PRECISION, -- 4#æåæºäº§é |
| | | t_qty5 DOUBLE PRECISION, -- 5#æåæºäº§é |
| | | t_qty6 DOUBLE PRECISION, -- 6#æåæºäº§é |
| | | t_qty7 DOUBLE PRECISION, -- 7#æåæºäº§é |
| | | t_qty8 DOUBLE PRECISION, -- 8#æåæºäº§é |
| | | t_qty9 DOUBLE PRECISION, -- 9#æåæºäº§é |
| | | t_qty10 DOUBLE PRECISION, -- 10#æåæºäº§é |
| | | t_qty11 DOUBLE PRECISION, -- 11#æåæºäº§é |
| | | t_qty12 DOUBLE PRECISION, -- 12#æåæºäº§é |
| | | |
| | | -- æå
æºäº§éï¼1-4å·ï¼ |
| | | p_qty1 DOUBLE PRECISION, -- 1#æå
æºäº§é |
| | | p_qty2 DOUBLE PRECISION, -- 2#æå
æºäº§é |
| | | p_qty3 DOUBLE PRECISION, -- 3#æå
æºäº§é |
| | | p_qty4 DOUBLE PRECISION -- 4#æå
æºäº§é |
| | | ); |
| | | |
| | | -- å°è¡¨è½¬æ¢ä¸ºè¶
è¡¨ï¼æå¤©ååºï¼ |
| | | SELECT create_hypertable( |
| | | 'hoister_time_data', |
| | | 'time', |
| | | chunk_time_interval => INTERVAL '1 day' |
| | | ); |
| | | |
| | | -- æ·»å 空é´ååºç»´åº¦ï¼ækeyååºï¼åæ8个ååºï¼ |
| | | SELECT add_dimension( |
| | | 'hoister_time_data', |
| | | 'key', |
| | | number_partitions => 8 |
| | | ); |
| | | |
| | | -- å建主æ¥è¯¢å¤åç´¢å¼ |
| | | CREATE INDEX idx_hoister_time_data_time_key ON hoister_time_data (time DESC, key); |
| | | CREATE INDEX idx_hoister_time_data_key_time ON hoister_time_data (key, time DESC); |
| | | |
| | | -- å建ç½ç»ç¶æç´¢å¼ |
| | | CREATE INDEX idx_hoister_online_key ON hoister_time_data (online, key, time DESC); |
| | | |
| | | -- å建æ»äº§éç´¢å¼ |
| | | CREATE INDEX idx_hoister_qty_key ON hoister_time_data (qty, key, time DESC); |
| | | |
| | | -- å建æåæºç¶æéç¨ç´¢å¼ï¼æå¸¸ç¨çå ä¸ªï¼ |
| | | CREATE INDEX idx_hoister_t_state1_key ON hoister_time_data (t_state1, key, time DESC); |
| | | CREATE INDEX idx_hoister_t_state2_key ON hoister_time_data (t_state2, key, time DESC); |
| | | CREATE INDEX idx_hoister_t_state3_key ON hoister_time_data (t_state3, key, time DESC); |
| | | |
| | | -- å建æå
æºç¶æç´¢å¼ |
| | | CREATE INDEX idx_hoister_p_state1_key ON hoister_time_data (p_state1, key, time DESC); |
| | | CREATE INDEX idx_hoister_p_state2_key ON hoister_time_data (p_state2, key, time DESC); |
| | | |
| | | -- çæ¬¡å设å¤å·ç´¢å¼ |
| | | CREATE INDEX idx_hoister_time_data_shift ON hoister_time_data (shift); |
| | | CREATE INDEX idx_hoister_time_data_equ_no ON hoister_time_data (equ_no); |
| | | |
| | | |
| | | |
| | | |
| | | //å䏿º |
| | | -- å建主表 |
| | | CREATE TABLE feedmatch_time_data ( |
| | | time TIMESTAMPTZ NOT NULL, |
| | | key TEXT NOT NULL, |
| | | shift INTEGER, -- çæ¬¡ (1使°å) |
| | | equ_no INTEGER, -- 设å¤å· (3使°å) |
| | | |
| | | -- æ°æ®æ´æ°æ¶é´ï¼åç¬¦ä¸²æ ¼å¼ï¼ |
| | | dac_up_time TEXT, -- æ°æ®æ´æ°æ¶é´ æ ¼å¼ï¼'2024-11-29 09:13:43' |
| | | |
| | | -- å䏿ºå¯¹åºçå¨ä¸æï¼1#-4#å䏿ºï¼æ¯ä¸ªå¯¹åº2个å¨ä¸æï¼- æ´å |
| | | fs11 INTEGER, -- 1#å䏿ºå¯¹åºç第ä¸ä¸ªå¨ä¸æ |
| | | fs12 INTEGER, -- 1#å䏿ºå¯¹åºç第äºä¸ªå¨ä¸æ |
| | | fs21 INTEGER, -- 2#å䏿ºå¯¹åºç第ä¸ä¸ªå¨ä¸æ |
| | | fs22 INTEGER, -- 2#å䏿ºå¯¹åºç第äºä¸ªå¨ä¸æ |
| | | fs31 INTEGER, -- 3#å䏿ºå¯¹åºç第ä¸ä¸ªå¨ä¸æ |
| | | fs32 INTEGER, -- 3#å䏿ºå¯¹åºç第äºä¸ªå¨ä¸æ |
| | | fs41 INTEGER, -- 4#å䏿ºå¯¹åºç第ä¸ä¸ªå¨ä¸æ |
| | | fs42 INTEGER, -- 4#å䏿ºå¯¹åºç第äºä¸ªå¨ä¸æ |
| | | |
| | | -- æºç»å¯¹åºçå䏿ºå管éï¼1#-12#æºç»ï¼- æ´å |
| | | pipe01 INTEGER, -- 1#æºç»å¯¹åºçå䏿ºå管é |
| | | pipe02 INTEGER, -- 2#æºç»å¯¹åºçå䏿ºå管é |
| | | pipe03 INTEGER, -- 3#æºç»å¯¹åºçå䏿ºå管é |
| | | pipe04 INTEGER, -- 4#æºç»å¯¹åºçå䏿ºå管é |
| | | pipe05 INTEGER, -- 5#æºç»å¯¹åºçå䏿ºå管é |
| | | pipe06 INTEGER, -- 6#æºç»å¯¹åºçå䏿ºå管é |
| | | pipe07 INTEGER, -- 7#æºç»å¯¹åºçå䏿ºå管é |
| | | pipe08 INTEGER, -- 8#æºç»å¯¹åºçå䏿ºå管é |
| | | pipe09 INTEGER, -- 9#æºç»å¯¹åºçå䏿ºå管é |
| | | pipe10 INTEGER, -- 10#æºç»å¯¹åºçå䏿ºå管é |
| | | pipe11 INTEGER, -- 11#æºç»å¯¹åºçå䏿ºå管é |
| | | pipe12 INTEGER, -- 12#æºç»å¯¹åºçå䏿ºå管é |
| | | |
| | | -- å䏿ºç¶æ - æ´å |
| | | wsj_state INTEGER -- å䏿ºç¶æ 1-è¿æ¥ 0-æå¼ |
| | | ); |
| | | |
| | | -- å°è¡¨è½¬æ¢ä¸ºè¶
è¡¨ï¼æå¤©ååºï¼ |
| | | SELECT create_hypertable( |
| | | 'feedmatch_time_data', |
| | | 'time', |
| | | chunk_time_interval => INTERVAL '1 day' |
| | | ); |
| | | |
| | | -- æ·»å 空é´ååºç»´åº¦ï¼ækeyååºï¼åæ8个ååºï¼ |
| | | SELECT add_dimension( |
| | | 'feedmatch_time_data', |
| | | 'key', |
| | | number_partitions => 8 |
| | | ); |
| | | |
| | | -- å建主æ¥è¯¢å¤åç´¢å¼ |
| | | CREATE INDEX idx_feedmatch_time_data_time_key ON feedmatch_time_data (time DESC, key); |
| | | CREATE INDEX idx_feedmatch_time_data_key_time ON feedmatch_time_data (key, time DESC); |
| | | |
| | | -- çæ¬¡å设å¤å·ç´¢å¼ |
| | | CREATE INDEX idx_feedmatch_time_data_shift ON feedmatch_time_data (shift); |
| | | CREATE INDEX idx_feedmatch_time_data_equ_no ON feedmatch_time_data (equ_no); |
| | | |
| | | //å表添å éç¨å段 |
| | | ALTER TABLE public.trans_time_data |
| | | ADD COLUMN IF NOT EXISTS create_dept integer, |
| | | ADD COLUMN IF NOT EXISTS create_by bigint, |
| | | ADD COLUMN IF NOT EXISTS create_time timestamp, |
| | | ADD COLUMN IF NOT EXISTS update_by bigint, |
| | | ADD COLUMN IF NOT EXISTS update_time timestamp, |
| | | ADD COLUMN IF NOT EXISTS remark varchar(255); |
| | | |
| | | |
| | | |
| | | // å岿°æ®æ´æ°èæ¬ï¼æ§è¡ä¸æ¬¡å³å¯ï¼ |
| | | -- æ´æ° roller_time_data |
| | | UPDATE roller_time_data SET shift = CAST(SUBSTRING(key FROM 1 FOR 1) AS INTEGER), equ_no = CAST(SUBSTRING(key FROM 2 FOR 3) AS INTEGER) WHERE shift IS NULL; |
| | | -- æ´æ° packer_time_data |
| | | UPDATE packer_time_data SET shift = CAST(SUBSTRING(key FROM 1 FOR 1) AS INTEGER), equ_no = CAST(SUBSTRING(key FROM 2 FOR 3) AS INTEGER) WHERE shift IS NULL; |
| | | -- æ´æ° box_time_data |
| | | UPDATE box_time_data SET shift = CAST(SUBSTRING(key FROM 1 FOR 1) AS INTEGER), equ_no = CAST(SUBSTRING(key FROM 2 FOR 3) AS INTEGER) WHERE shift IS NULL; |
| | | -- æ´æ° makeup_time_data |
| | | UPDATE makeup_time_data SET shift = CAST(SUBSTRING(key FROM 1 FOR 1) AS INTEGER), equ_no = CAST(SUBSTRING(key FROM 2 FOR 3) AS INTEGER) WHERE shift IS NULL; |
| | | -- æ´æ° trans_time_data |
| | | UPDATE trans_time_data SET shift = CAST(SUBSTRING(key FROM 1 FOR 1) AS INTEGER), equ_no = CAST(SUBSTRING(key FROM 2 FOR 3) AS INTEGER) WHERE shift IS NULL; |
| | | -- æ´æ° hoister_time_data |
| | | UPDATE hoister_time_data SET shift = CAST(SUBSTRING(key FROM 1 FOR 1) AS INTEGER), equ_no = CAST(SUBSTRING(key FROM 2 FOR 3) AS INTEGER) WHERE shift IS NULL; |
| | | -- æ´æ° feedmatch_time_data |
| | | UPDATE feedmatch_time_data SET shift = CAST(SUBSTRING(key FROM 1 FOR 1) AS INTEGER), equ_no = CAST(SUBSTRING(key FROM 2 FOR 3) AS INTEGER) WHERE shift IS NULL; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils; |
| | | |
| | | import org.mybatis.spring.annotation.MapperScan; |
| | | import org.springframework.boot.SpringApplication; |
| | | import org.springframework.boot.autoconfigure.SpringBootApplication; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | | import java.util.TimeZone; |
| | | |
| | | @SpringBootApplication |
| | | @MapperScan("com.shlb.timescaledbutils.mapper") |
| | | public class TimescaleDbUtilsApplication { |
| | | |
| | | public static void main(String[] args) { |
| | | SpringApplication.run(TimescaleDbUtilsApplication.class, args); |
| | | } |
| | | |
| | | @PostConstruct |
| | | void started() { |
| | | TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai")); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.config; |
| | | |
| | | import org.mybatis.spring.annotation.MapperScan; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | @Configuration |
| | | @MapperScan("com.shlb.timescaledbutils.mapper") |
| | | public class MybatisPlusConfig { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.config; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.boot.ApplicationArguments; |
| | | import org.springframework.boot.ApplicationRunner; |
| | | import org.springframework.core.env.Environment; |
| | | import org.springframework.data.redis.connection.RedisConnectionFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.sql.DataSource; |
| | | import java.sql.Connection; |
| | | |
| | | @Component |
| | | @Slf4j |
| | | public class StartupStatusPrinter implements ApplicationRunner { |
| | | |
| | | @Autowired |
| | | private Environment environment; |
| | | |
| | | @Autowired |
| | | private DataSource dataSource; |
| | | |
| | | @Autowired |
| | | private RedisConnectionFactory redisConnectionFactory; |
| | | |
| | | @Override |
| | | public void run(ApplicationArguments args) throws Exception { |
| | | String port = environment.getProperty("server.port"); |
| | | |
| | | boolean postgresConnected = false; |
| | | try (Connection connection = dataSource.getConnection()) { |
| | | postgresConnected = connection.isValid(1000); |
| | | } catch (Exception e) { |
| | | log.error("PostgreSQL è¿æ¥å¤±è´¥: {}", e.getMessage()); |
| | | } |
| | | |
| | | boolean redisConnected = false; |
| | | try { |
| | | String ping = redisConnectionFactory.getConnection().ping(); |
| | | redisConnected = "PONG".equalsIgnoreCase(ping); |
| | | } catch (Exception e) { |
| | | log.error("Redis è¿æ¥å¤±è´¥: {}", e.getMessage()); |
| | | } |
| | | |
| | | System.out.println("\n----------------------------------------------------------"); |
| | | System.out.println("\tApplication is running! Access URLs:"); |
| | | System.out.println("\tLocal: \t\thttp://localhost:" + port); |
| | | System.out.println("\tPostgreSQL:\t" + (postgresConnected ? "Connected â
" : "Failed â")); |
| | | System.out.println("\tRedis:\t\t" + (redisConnected ? "Connected â
" : "Failed â")); |
| | | System.out.println("----------------------------------------------------------\n"); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.constant; |
| | | |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * ç³»ç»å¸¸éç±» |
| | | */ |
| | | public class AppConstants { |
| | | private AppConstants() { |
| | | // 鲿¢å®ä¾å |
| | | } |
| | | |
| | | /** |
| | | * çæ¬¡ 1ã2ã3 |
| | | * å·æ¥æºç» 101ï½200 |
| | | * å
è£
æºç» 201ï½300 |
| | | * è£
å°ç®±æºç» 301ï½400 |
| | | * æåæºç» 401ï½500 |
| | | * åå°æºç» 501ï½600 |
| | | * æåæº 601 |
| | | * å䏿º 603 |
| | | */ |
| | | |
| | | |
| | | // ææè®¾å¤ç¼å· (ä¸å«ç次åç¼) |
| | | public static final List<String> EQUIPMENT_LIST = Arrays.asList( |
| | | // å·æ¥æºç» |
| | | "101", "102", "103", "105", "106", "107", "108", "109", "110", "111", "113", |
| | | // å
è£
æºç» |
| | | "201", "202", "203", "205", "206", "207", "208", "209", "210", "211", "213", |
| | | // è£
å°ç®±æºç» |
| | | "301", "302", "303", "304", "305", |
| | | // æåæºç» |
| | | "401", "402", "403", |
| | | // åå°æºç» |
| | | "501", "502", "503", |
| | | // æåæº |
| | | "601", |
| | | // å䏿º |
| | | "603" |
| | | ); |
| | | |
| | | |
| | | // 设å¤ç±»å常é |
| | | public static final int TYPE_ROLLING = 1; // å·æ¥æºç» |
| | | public static final int TYPE_PACKAGING = 2; // å
è£
æºç» |
| | | public static final int TYPE_SEALING = 3; // è£
å°ç®±æºç» |
| | | public static final int TYPE_FORMING = 4; // æåæºç» |
| | | public static final int TYPE_LAUNCHING = 5; // åå°æºç» |
| | | public static final int TYPE_LIFTING = 6; // æåæº |
| | | public static final int TYPE_FEED = 7; // å䏿º |
| | | |
| | | // çæ¬¡å¸¸é |
| | | public static final int SHIFT_MORNING = 1; // æ©ç |
| | | public static final int SHIFT_MIDDLE = 2; // ä¸ç |
| | | public static final int SHIFT_NIGHT = 3; // æç |
| | | |
| | | /** |
| | | * è·å设å¤ç±»å |
| | | * @param equipmentCode 设å¤ç¼å·ï¼å¯ä»¥æ¯3ä½(å¦"101")æ4ä½(å¦"1101") |
| | | * @return 1-å·æ¥æºç», 2-å
è£
æºç», 3-è£
å°ç®±æºç», 4-æåæºç», 5-åå°æºç», 6-æåæº, 7-å䏿º, 0-æ æ |
| | | */ |
| | | public static int getEquipmentType(String equipmentCode) { |
| | | if (equipmentCode == null || equipmentCode.length() < 3) { |
| | | return 0; |
| | | } |
| | | |
| | | // ç¹æ®è®¾å¤å¤æï¼603为å䏿º(TYPE=7)ï¼601为æåæº(TYPE=6) |
| | | // æ è®ºæ¯ "603" è¿æ¯ "1603"ï¼endsWith é½è½æ£ç¡®å¤æ |
| | | if (equipmentCode.endsWith("603")) { |
| | | return TYPE_FEED; |
| | | } |
| | | if (equipmentCode.endsWith("601")) { |
| | | return TYPE_LIFTING; |
| | | } |
| | | |
| | | // è·åç±»åä½çç´¢å¼ |
| | | // 妿æ¯4ä½ç¼ç ï¼å¦1101ï¼ï¼ç±»åä½å¨ç´¢å¼1 |
| | | // 妿æ¯3ä½ç¼ç ï¼å¦101ï¼ï¼ç±»åä½å¨ç´¢å¼0 |
| | | int typeIndex = equipmentCode.length() == 4 ? 1 : 0; |
| | | |
| | | if (typeIndex >= equipmentCode.length()) { |
| | | return 0; |
| | | } |
| | | |
| | | char typeChar = equipmentCode.charAt(typeIndex); |
| | | int type = Character.getNumericValue(typeChar); |
| | | |
| | | return (type >= 1 && type <= 7) ? type : 0; |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * è£
ç®±æºè¡¨ |
| | | */ |
| | | @Data |
| | | @Accessors(chain = true) |
| | | @TableName("box_time_data") |
| | | public class BoxTimeData { |
| | | |
| | | /** |
| | | * æ¶é´æ³ |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date time; |
| | | |
| | | /** |
| | | * 设å¤ç¼å· |
| | | */ |
| | | private String key; |
| | | |
| | | /** |
| | | * ç½ç»ç¶æ 0å¼å¸¸ï¼1æ£å¸¸ |
| | | */ |
| | | private Integer online; |
| | | |
| | | /** |
| | | * 1#è£
å°ç®±æºäº§é |
| | | */ |
| | | private Double qty1; |
| | | |
| | | /** |
| | | * æå
æºäº§é |
| | | */ |
| | | private Double pbjQty; |
| | | |
| | | /** |
| | | * çæ¬¡ (1使°å) |
| | | */ |
| | | private Integer shift; |
| | | |
| | | /** |
| | | * 设å¤å· (3使°å) |
| | | */ |
| | | private Integer equNo; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * å䏿ºè¡¨ |
| | | */ |
| | | @Data |
| | | @Accessors(chain = true) |
| | | @TableName("feedmatch_time_data") |
| | | public class FeedmatchTimeData { |
| | | |
| | | /** |
| | | * æ¶é´æ³ |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date time; |
| | | |
| | | /** |
| | | * 设å¤ç¼å· |
| | | */ |
| | | private String key; |
| | | |
| | | /** |
| | | * æ°æ®æ´æ°æ¶é´ æ ¼å¼ï¼'2024-11-29 09:13:43' |
| | | */ |
| | | private String dacUpTime; |
| | | |
| | | /** |
| | | * 1#å䏿ºå¯¹åºç第ä¸ä¸ªå¨ä¸æ |
| | | */ |
| | | private String fs11; |
| | | |
| | | /** |
| | | * 1#å䏿ºå¯¹åºç第äºä¸ªå¨ä¸æ |
| | | */ |
| | | private String fs12; |
| | | |
| | | /** |
| | | * 2#å䏿ºå¯¹åºç第ä¸ä¸ªå¨ä¸æ |
| | | */ |
| | | private String fs21; |
| | | |
| | | /** |
| | | * 2#å䏿ºå¯¹åºç第äºä¸ªå¨ä¸æ |
| | | */ |
| | | private String fs22; |
| | | |
| | | /** |
| | | * 3#å䏿ºå¯¹åºç第ä¸ä¸ªå¨ä¸æ |
| | | */ |
| | | private String fs31; |
| | | |
| | | /** |
| | | * 3#å䏿ºå¯¹åºç第äºä¸ªå¨ä¸æ |
| | | */ |
| | | private String fs32; |
| | | |
| | | /** |
| | | * 4#å䏿ºå¯¹åºç第ä¸ä¸ªå¨ä¸æ |
| | | */ |
| | | private String fs41; |
| | | |
| | | /** |
| | | * 4#å䏿ºå¯¹åºç第äºä¸ªå¨ä¸æ |
| | | */ |
| | | private String fs42; |
| | | |
| | | /** |
| | | * 1#æºç»å¯¹åºçå䏿ºå管é |
| | | */ |
| | | private Integer pipe01; |
| | | |
| | | /** |
| | | * 2#æºç»å¯¹åºçå䏿ºå管é |
| | | */ |
| | | private Integer pipe02; |
| | | |
| | | /** |
| | | * 3#æºç»å¯¹åºçå䏿ºå管é |
| | | */ |
| | | private Integer pipe03; |
| | | |
| | | /** |
| | | * 4#æºç»å¯¹åºçå䏿ºå管é |
| | | */ |
| | | private Integer pipe04; |
| | | |
| | | /** |
| | | * 5#æºç»å¯¹åºçå䏿ºå管é |
| | | */ |
| | | private Integer pipe05; |
| | | |
| | | /** |
| | | * 6#æºç»å¯¹åºçå䏿ºå管é |
| | | */ |
| | | private Integer pipe06; |
| | | |
| | | /** |
| | | * 7#æºç»å¯¹åºçå䏿ºå管é |
| | | */ |
| | | private Integer pipe07; |
| | | |
| | | /** |
| | | * 8#æºç»å¯¹åºçå䏿ºå管é |
| | | */ |
| | | private Integer pipe08; |
| | | |
| | | /** |
| | | * 9#æºç»å¯¹åºçå䏿ºå管é |
| | | */ |
| | | private Integer pipe09; |
| | | |
| | | /** |
| | | * 10#æºç»å¯¹åºçå䏿ºå管é |
| | | */ |
| | | private Integer pipe10; |
| | | |
| | | /** |
| | | * 11#æºç»å¯¹åºçå䏿ºå管é |
| | | */ |
| | | private Integer pipe11; |
| | | |
| | | /** |
| | | * 12#æºç»å¯¹åºçå䏿ºå管é |
| | | */ |
| | | private Integer pipe12; |
| | | |
| | | /** |
| | | * å䏿ºç¶æ 1-è¿æ¥ 0-æå¼ |
| | | */ |
| | | private Integer wsjState; |
| | | |
| | | /** |
| | | * çæ¬¡ (1使°å) |
| | | */ |
| | | private Integer shift; |
| | | |
| | | /** |
| | | * 设å¤å· (3使°å) |
| | | */ |
| | | private Integer equNo; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * æåæºè¡¨ |
| | | */ |
| | | @Data |
| | | @Accessors(chain = true) |
| | | @TableName("hoister_time_data") |
| | | public class HoisterTimeData { |
| | | |
| | | /** |
| | | * æ¶é´æ³ |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date time; |
| | | |
| | | /** |
| | | * 设å¤ç¼å· |
| | | */ |
| | | private String key; |
| | | |
| | | /** |
| | | * ç½ç»ç¶æ 0å¼å¸¸ï¼1æ£å¸¸ |
| | | */ |
| | | private Integer online; |
| | | |
| | | /** |
| | | * 产éï¼æ»äº§éï¼ |
| | | */ |
| | | private Double qty; |
| | | |
| | | /** |
| | | * 1#æåæºç¶æ |
| | | */ |
| | | private Double tState1; |
| | | |
| | | /** |
| | | * 2#æåæºç¶æ |
| | | */ |
| | | private Double tState2; |
| | | |
| | | /** |
| | | * 3#æåæºç¶æ |
| | | */ |
| | | private Double tState3; |
| | | |
| | | /** |
| | | * 4#æåæºç¶æ |
| | | */ |
| | | private Double tState4; |
| | | |
| | | /** |
| | | * 5#æåæºç¶æ |
| | | */ |
| | | private Double tState5; |
| | | |
| | | /** |
| | | * 6#æåæºç¶æ |
| | | */ |
| | | private Double tState6; |
| | | |
| | | /** |
| | | * 7#æåæºç¶æ |
| | | */ |
| | | private Double tState7; |
| | | |
| | | /** |
| | | * 8#æåæºç¶æ |
| | | */ |
| | | private Double tState8; |
| | | |
| | | /** |
| | | * 9#æåæºç¶æ |
| | | */ |
| | | private Double tState9; |
| | | |
| | | /** |
| | | * 10#æåæºç¶æ |
| | | */ |
| | | private Double tState10; |
| | | |
| | | /** |
| | | * 11#æåæºç¶æ |
| | | */ |
| | | private Double tState11; |
| | | |
| | | /** |
| | | * 12#æåæºç¶æ |
| | | */ |
| | | private Double tState12; |
| | | |
| | | /** |
| | | * 1#æå
æºç¶æ |
| | | */ |
| | | private Double pState1; |
| | | |
| | | /** |
| | | * 2#æå
æºç¶æ |
| | | */ |
| | | private Double pState2; |
| | | |
| | | /** |
| | | * 3#æå
æºç¶æ |
| | | */ |
| | | private Double pState3; |
| | | |
| | | /** |
| | | * 4#æå
æºç¶æ |
| | | */ |
| | | private Double pState4; |
| | | |
| | | /** |
| | | * 1#æåæºäº§é |
| | | */ |
| | | private Double tQty1; |
| | | |
| | | /** |
| | | * 2#æåæºäº§é |
| | | */ |
| | | private Double tQty2; |
| | | |
| | | /** |
| | | * 3#æåæºäº§é |
| | | */ |
| | | private Double tQty3; |
| | | |
| | | /** |
| | | * 4#æåæºäº§é |
| | | */ |
| | | private Double tQty4; |
| | | |
| | | /** |
| | | * 5#æåæºäº§é |
| | | */ |
| | | private Double tQty5; |
| | | |
| | | /** |
| | | * 6#æåæºäº§é |
| | | */ |
| | | private Double tQty6; |
| | | |
| | | /** |
| | | * 7#æåæºäº§é |
| | | */ |
| | | private Double tQty7; |
| | | |
| | | /** |
| | | * 8#æåæºäº§é |
| | | */ |
| | | private Double tQty8; |
| | | |
| | | /** |
| | | * 9#æåæºäº§é |
| | | */ |
| | | private Double tQty9; |
| | | |
| | | /** |
| | | * 10#æåæºäº§é |
| | | */ |
| | | private Double tQty10; |
| | | |
| | | /** |
| | | * 11#æåæºäº§é |
| | | */ |
| | | private Double tQty11; |
| | | |
| | | /** |
| | | * 12#æåæºäº§é |
| | | */ |
| | | private Double tQty12; |
| | | |
| | | /** |
| | | * 1#æå
æºäº§é |
| | | */ |
| | | private Double pQty1; |
| | | |
| | | /** |
| | | * 2#æå
æºäº§é |
| | | */ |
| | | private Double pQty2; |
| | | |
| | | /** |
| | | * 3#æå
æºäº§é |
| | | */ |
| | | private Double pQty3; |
| | | |
| | | /** |
| | | * 4#æå
æºäº§é |
| | | */ |
| | | private Double pQty4; |
| | | |
| | | /** |
| | | * çæ¬¡ (1使°å) |
| | | */ |
| | | private Integer shift; |
| | | |
| | | /** |
| | | * 设å¤å· (3使°å) |
| | | */ |
| | | private Integer equNo; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * æåæºè¡¨ |
| | | */ |
| | | @Data |
| | | @Accessors(chain = true) |
| | | @TableName("makeup_time_data") |
| | | public class MakeupTimeData { |
| | | |
| | | /** |
| | | * æ¶é´æ³ |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date time; |
| | | |
| | | /** |
| | | * 设å¤ç¼å· |
| | | */ |
| | | private String key; |
| | | |
| | | /** |
| | | * ç½ç»ç¶æ 0å¼å¸¸ï¼1æ£å¸¸ |
| | | */ |
| | | private Integer online; |
| | | |
| | | /** |
| | | * 产é |
| | | */ |
| | | private Double qty; |
| | | |
| | | /** |
| | | * åé¤äº§é |
| | | */ |
| | | private Double badQty; |
| | | |
| | | /** |
| | | * ç纸æ¶è |
| | | */ |
| | | private Double panzhiVal; |
| | | |
| | | /** |
| | | * è¿è¡æ¶é´ |
| | | */ |
| | | private Double runTime; |
| | | |
| | | /** |
| | | * åæºæ¶é´ |
| | | */ |
| | | private Double stopTime; |
| | | |
| | | /** |
| | | * åæºæ¬¡æ° |
| | | */ |
| | | private Integer stopTimes; |
| | | |
| | | /** |
| | | * 车é |
| | | */ |
| | | private Integer speed; |
| | | |
| | | /** |
| | | * çæ¬¡ (1使°å) |
| | | */ |
| | | private Integer shift; |
| | | |
| | | /** |
| | | * 设å¤å· (3使°å) |
| | | */ |
| | | private Integer equNo; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * å
è£
æºè¡¨ |
| | | */ |
| | | @Data |
| | | @Accessors(chain = true) |
| | | @TableName("packer_time_data") |
| | | public class PackerTimeData { |
| | | |
| | | /** |
| | | * æ¶é´æ³ |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date time; |
| | | |
| | | /** |
| | | * 设å¤ç¼å· |
| | | */ |
| | | private String key; |
| | | |
| | | /** |
| | | * ç½ç»ç¶æ(0å¼å¸¸ï¼1æ£å¸¸) |
| | | */ |
| | | private Integer online; |
| | | |
| | | /** |
| | | * 产é |
| | | */ |
| | | private Double qty; |
| | | |
| | | /** |
| | | * åé¤äº§é |
| | | */ |
| | | private Double badQty; |
| | | |
| | | /** |
| | | * å°çèæ¶è |
| | | */ |
| | | private Double xiaohemoVal; |
| | | |
| | | /** |
| | | * æ¡çèæ¶è |
| | | */ |
| | | private Double tiaohemoVal; |
| | | |
| | | /** |
| | | * å°ç纸æ¶è |
| | | */ |
| | | private Double xiaohezhiVal; |
| | | |
| | | /** |
| | | * æ¡ç纸æ¶è |
| | | */ |
| | | private Double tiaohezhiVal; |
| | | |
| | | /** |
| | | * å
衬纸æ¶è |
| | | */ |
| | | private Double neichenzhiVal; |
| | | |
| | | /** |
| | | * è¿è¡æ¶é´ |
| | | */ |
| | | private Double runTime; |
| | | |
| | | /** |
| | | * åæºæ¶é´ |
| | | */ |
| | | private Double stopTime; |
| | | |
| | | /** |
| | | * åæºæ¬¡æ° |
| | | */ |
| | | private Integer stopTimes; |
| | | |
| | | /** |
| | | * 车é |
| | | */ |
| | | private Integer speed; |
| | | |
| | | /** |
| | | * è¿è¡ç¶æ(-1 æç½ 0忢 1ä½éè¿è¡ 2æ£å¸¸è¿è¡) |
| | | */ |
| | | private Integer runStatus; |
| | | |
| | | /** |
| | | * æåæºäº§é |
| | | */ |
| | | private Double tsQty; |
| | | |
| | | /** |
| | | * 主æºäº§éï¼å°å
æºï¼ |
| | | */ |
| | | private Double mainQty; |
| | | |
| | | /** |
| | | * 主æºåé¤é |
| | | */ |
| | | private Double mainBadQty; |
| | | |
| | | /** |
| | | * éå
æºäº§é |
| | | */ |
| | | private Double tbjQty; |
| | | |
| | | /** |
| | | * éå
æºåé¤å¥½å
|
| | | */ |
| | | private Double tbjGdQty; |
| | | |
| | | /** |
| | | * éå
æºåé¤åå
|
| | | */ |
| | | private Double tbjBadQty; |
| | | |
| | | /** |
| | | * æå
æºäº§é |
| | | */ |
| | | private Double pbjQty; |
| | | |
| | | /** |
| | | * çæ¬¡ (1使°å) |
| | | */ |
| | | private Integer shift; |
| | | |
| | | /** |
| | | * 设å¤å· (3使°å) |
| | | */ |
| | | private Integer equNo; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | import java.util.Date; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * ç¹ä½æ¶åºæ°æ®å®ä½ç±» |
| | | * å¯¹åº TimescaleDB ä¸ç point_time_data è¶
表 |
| | | */ |
| | | @Data |
| | | @Accessors(chain = true) |
| | | @TableName(value = "point_time_data", autoResultMap = true) |
| | | public class PointData { |
| | | |
| | | /** |
| | | * æ¶é´æ³ (TimescaleDB çæ ¸å¿ååºé®) |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date time; |
| | | |
| | | /** |
| | | * ç¹ä½ Key |
| | | */ |
| | | private String pointKey; |
| | | |
| | | /** |
| | | * ç¹ä½å¼ |
| | | */ |
| | | private String pointValue; |
| | | |
| | | /** |
| | | * å¯éçæ ç¾/å
æ°æ® (JSONB) |
| | | */ |
| | | @TableField(typeHandler = FastjsonTypeHandler.class) |
| | | private Map<String, Object> tags; |
| | | |
| | | /** |
| | | * çæ¬¡ (1使°å) |
| | | */ |
| | | private Integer shift; |
| | | |
| | | /** |
| | | * 设å¤å· (3使°å) |
| | | */ |
| | | private Integer equNo; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * å·æ¥æºè¡¨ |
| | | */ |
| | | @Data |
| | | @Accessors(chain = true) |
| | | @TableName("roller_time_data") |
| | | public class RollerTimeData { |
| | | |
| | | /** |
| | | * æ¶é´æ³ |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date time; |
| | | |
| | | /** |
| | | * 设å¤ç¼å· |
| | | */ |
| | | private String key; |
| | | |
| | | /** |
| | | * ç½ç»ç¶æ(0å¼å¸¸ 1æ£å¸¸) |
| | | */ |
| | | private Integer online; |
| | | |
| | | /** |
| | | * 产é |
| | | */ |
| | | private Double qty; |
| | | |
| | | /** |
| | | * åé¤äº§é |
| | | */ |
| | | private Double badQty; |
| | | |
| | | /** |
| | | * æ»¤æ£æ¶è |
| | | */ |
| | | private Double lvbangVal; |
| | | |
| | | /** |
| | | * å·ç纸æ¶è |
| | | */ |
| | | private Double juanyanzhiVal; |
| | | |
| | | /** |
| | | * æ°´æ¾çº¸æ¶è |
| | | */ |
| | | private Double shuisongzhiVal; |
| | | |
| | | /** |
| | | * è¿è¡æ¶é´ |
| | | */ |
| | | private Double runTime; |
| | | |
| | | /** |
| | | * åæºæ¶é´ |
| | | */ |
| | | private Double stopTime; |
| | | |
| | | /** |
| | | * åæºæ¬¡æ° |
| | | */ |
| | | private Integer stopTimes; |
| | | |
| | | /** |
| | | * 车é |
| | | */ |
| | | private Integer speed; |
| | | |
| | | /** |
| | | * è¿è¡ç¶æ(-1æç½ 0忢 1ä½éè¿è¡ 2æ£å¸¸è¿è¡) |
| | | */ |
| | | private Integer runStatus; |
| | | |
| | | /** |
| | | * å¨ç设å¤å¨é |
| | | */ |
| | | private Double cy; |
| | | |
| | | /** |
| | | * å¨ç设å¤è½¦é(1-å
è£
æº 6-å·çæº) |
| | | */ |
| | | private Integer cyCs; |
| | | |
| | | /** |
| | | * 22-å·çæºè¿è¡ç¶æ 23-å
è£
æºè¿è¡ç¶æ |
| | | */ |
| | | private String cyOnline; |
| | | |
| | | /** |
| | | * æ¥æ¶æºé |
| | | */ |
| | | private Double recQty1; |
| | | |
| | | /** |
| | | * æ¥æ¶æºé2 |
| | | */ |
| | | private Double recQty2; |
| | | |
| | | /** |
| | | * çæ¬¡ (1使°å) |
| | | */ |
| | | private Integer shift; |
| | | |
| | | /** |
| | | * 设å¤å· (3使°å) |
| | | */ |
| | | private Integer equNo; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * åå°æºè¡¨ |
| | | */ |
| | | @Data |
| | | @Accessors(chain = true) |
| | | @TableName("trans_time_data") |
| | | public class TransTimeData { |
| | | |
| | | /** |
| | | * æ¶é´æ³ |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date time; |
| | | |
| | | /** |
| | | * 设å¤ç¼å· |
| | | */ |
| | | private String key; |
| | | |
| | | /** |
| | | * ç½ç»ç¶æ 0å¼å¸¸ï¼1æ£å¸¸ |
| | | */ |
| | | private Integer online; |
| | | |
| | | /** |
| | | * 管é1滤æ£è®¡æ° |
| | | */ |
| | | private Double pQty1; |
| | | |
| | | /** |
| | | * 管é2滤æ£è®¡æ° |
| | | */ |
| | | private Double pQty2; |
| | | |
| | | /** |
| | | * 管é3滤æ£è®¡æ° |
| | | */ |
| | | private Double pQty3; |
| | | |
| | | /** |
| | | * 管é4滤æ£è®¡æ° |
| | | */ |
| | | private Double pQty4; |
| | | |
| | | /** |
| | | * 管é5滤æ£è®¡æ° |
| | | */ |
| | | private Double pQty5; |
| | | |
| | | /** |
| | | * 管é6滤æ£è®¡æ° |
| | | */ |
| | | private Double pQty6; |
| | | |
| | | /** |
| | | * 管é7滤æ£è®¡æ° |
| | | */ |
| | | private Double pQty7; |
| | | |
| | | /** |
| | | * 管é8滤æ£è®¡æ° |
| | | */ |
| | | private Double pQty8; |
| | | |
| | | /** |
| | | * 管é9滤æ£è®¡æ° |
| | | */ |
| | | private Double pQty9; |
| | | |
| | | /** |
| | | * 管é10滤æ£è®¡æ° |
| | | */ |
| | | private Double pQty10; |
| | | |
| | | /** |
| | | * 管é1滤æ£é度 |
| | | */ |
| | | private Double speed1; |
| | | |
| | | /** |
| | | * 管é2滤æ£é度 |
| | | */ |
| | | private Double speed2; |
| | | |
| | | /** |
| | | * 管é3滤æ£é度 |
| | | */ |
| | | private Double speed3; |
| | | |
| | | /** |
| | | * 管é4滤æ£é度 |
| | | */ |
| | | private Double speed4; |
| | | |
| | | /** |
| | | * 管é5滤æ£é度 |
| | | */ |
| | | private Double speed5; |
| | | |
| | | /** |
| | | * 管é6滤æ£é度 |
| | | */ |
| | | private Double speed6; |
| | | |
| | | /** |
| | | * 管é7滤æ£é度 |
| | | */ |
| | | private Double speed7; |
| | | |
| | | /** |
| | | * 管é8滤æ£é度 |
| | | */ |
| | | private Double speed8; |
| | | |
| | | /** |
| | | * 管é9滤æ£é度 |
| | | */ |
| | | private Double speed9; |
| | | |
| | | /** |
| | | * 管é10滤æ£é度 |
| | | */ |
| | | private Double speed10; |
| | | |
| | | /** |
| | | * å¸çæºç¶æ |
| | | */ |
| | | private Integer xpState; |
| | | |
| | | /** |
| | | * å¸çæºäº§é |
| | | */ |
| | | private Double trayQty1; |
| | | |
| | | /** |
| | | * çæ¬¡ (1使°å) |
| | | */ |
| | | private Integer shift; |
| | | |
| | | /** |
| | | * 设å¤å· (3使°å) |
| | | */ |
| | | private Integer equNo; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.shlb.timescaledbutils.entity.BoxTimeData; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | @Mapper |
| | | public interface BoxTimeDataMapper extends BaseMapper<BoxTimeData> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.shlb.timescaledbutils.entity.FeedmatchTimeData; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | @Mapper |
| | | public interface FeedmatchTimeDataMapper extends BaseMapper<FeedmatchTimeData> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.shlb.timescaledbutils.entity.HoisterTimeData; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | @Mapper |
| | | public interface HoisterTimeDataMapper extends BaseMapper<HoisterTimeData> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.shlb.timescaledbutils.entity.MakeupTimeData; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | @Mapper |
| | | public interface MakeupTimeDataMapper extends BaseMapper<MakeupTimeData> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.shlb.timescaledbutils.entity.PackerTimeData; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | @Mapper |
| | | public interface PackerTimeDataMapper extends BaseMapper<PackerTimeData> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.shlb.timescaledbutils.entity.PointData; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | @Mapper |
| | | public interface PointDataMapper extends BaseMapper<PointData> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.shlb.timescaledbutils.entity.RollerTimeData; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | @Mapper |
| | | public interface RollerTimeDataMapper extends BaseMapper<RollerTimeData> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.shlb.timescaledbutils.entity.TransTimeData; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | @Mapper |
| | | public interface TransTimeDataMapper extends BaseMapper<TransTimeData> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.shlb.timescaledbutils.entity.BoxTimeData; |
| | | |
| | | public interface IBoxTimeDataService extends IService<BoxTimeData> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.shlb.timescaledbutils.entity.FeedmatchTimeData; |
| | | |
| | | public interface IFeedmatchTimeDataService extends IService<FeedmatchTimeData> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.shlb.timescaledbutils.entity.HoisterTimeData; |
| | | |
| | | public interface IHoisterTimeDataService extends IService<HoisterTimeData> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.shlb.timescaledbutils.entity.MakeupTimeData; |
| | | |
| | | public interface IMakeupTimeDataService extends IService<MakeupTimeData> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.shlb.timescaledbutils.entity.PackerTimeData; |
| | | |
| | | public interface IPackerTimeDataService extends IService<PackerTimeData> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.shlb.timescaledbutils.entity.PointData; |
| | | |
| | | public interface IPointDataService extends IService<PointData> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.shlb.timescaledbutils.entity.RollerTimeData; |
| | | |
| | | public interface IRollerTimeDataService extends IService<RollerTimeData> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.shlb.timescaledbutils.entity.TransTimeData; |
| | | |
| | | public interface ITransTimeDataService extends IService<TransTimeData> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.shlb.timescaledbutils.entity.BoxTimeData; |
| | | import com.shlb.timescaledbutils.mapper.BoxTimeDataMapper; |
| | | import com.shlb.timescaledbutils.service.IBoxTimeDataService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | @Service |
| | | public class BoxTimeDataServiceImpl extends ServiceImpl<BoxTimeDataMapper, BoxTimeData> implements IBoxTimeDataService { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.shlb.timescaledbutils.entity.FeedmatchTimeData; |
| | | import com.shlb.timescaledbutils.mapper.FeedmatchTimeDataMapper; |
| | | import com.shlb.timescaledbutils.service.IFeedmatchTimeDataService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | @Service |
| | | public class FeedmatchTimeDataServiceImpl extends ServiceImpl<FeedmatchTimeDataMapper, FeedmatchTimeData> implements IFeedmatchTimeDataService { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.shlb.timescaledbutils.entity.HoisterTimeData; |
| | | import com.shlb.timescaledbutils.mapper.HoisterTimeDataMapper; |
| | | import com.shlb.timescaledbutils.service.IHoisterTimeDataService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | @Service |
| | | public class HoisterTimeDataServiceImpl extends ServiceImpl<HoisterTimeDataMapper, HoisterTimeData> implements IHoisterTimeDataService { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.shlb.timescaledbutils.entity.MakeupTimeData; |
| | | import com.shlb.timescaledbutils.mapper.MakeupTimeDataMapper; |
| | | import com.shlb.timescaledbutils.service.IMakeupTimeDataService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | @Service |
| | | public class MakeupTimeDataServiceImpl extends ServiceImpl<MakeupTimeDataMapper, MakeupTimeData> implements IMakeupTimeDataService { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.shlb.timescaledbutils.entity.PackerTimeData; |
| | | import com.shlb.timescaledbutils.mapper.PackerTimeDataMapper; |
| | | import com.shlb.timescaledbutils.service.IPackerTimeDataService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | @Service |
| | | public class PackerTimeDataServiceImpl extends ServiceImpl<PackerTimeDataMapper, PackerTimeData> implements IPackerTimeDataService { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.shlb.timescaledbutils.entity.PointData; |
| | | import com.shlb.timescaledbutils.mapper.PointDataMapper; |
| | | import com.shlb.timescaledbutils.service.IPointDataService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | @Service |
| | | public class PointDataServiceImpl extends ServiceImpl<PointDataMapper, PointData> implements IPointDataService { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.shlb.timescaledbutils.entity.RollerTimeData; |
| | | import com.shlb.timescaledbutils.mapper.RollerTimeDataMapper; |
| | | import com.shlb.timescaledbutils.service.IRollerTimeDataService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | @Service |
| | | public class RollerTimeDataServiceImpl extends ServiceImpl<RollerTimeDataMapper, RollerTimeData> implements IRollerTimeDataService { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.shlb.timescaledbutils.entity.TransTimeData; |
| | | import com.shlb.timescaledbutils.mapper.TransTimeDataMapper; |
| | | import com.shlb.timescaledbutils.service.ITransTimeDataService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | @Service |
| | | public class TransTimeDataServiceImpl extends ServiceImpl<TransTimeDataMapper, TransTimeData> implements ITransTimeDataService { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.task; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.shlb.timescaledbutils.constant.AppConstants; |
| | | import com.shlb.timescaledbutils.entity.*; |
| | | import com.shlb.timescaledbutils.service.*; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.boot.ApplicationArguments; |
| | | import org.springframework.boot.ApplicationRunner; |
| | | import org.springframework.dao.DataAccessException; |
| | | import org.springframework.data.redis.core.RedisOperations; |
| | | import org.springframework.data.redis.core.SessionCallback; |
| | | import org.springframework.data.redis.core.StringRedisTemplate; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.*; |
| | | import java.util.concurrent.ExecutorService; |
| | | import java.util.concurrent.Executors; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | /** |
| | | * Redis æ°æ®åæ¥ä»»å¡ |
| | | * å®æä» Redis è·å设å¤å®æ¶æ°æ®å¹¶åæµåå
¥ä¸å PostgreSQL 表 |
| | | */ |
| | | @Component |
| | | @Slf4j |
| | | public class RedisToPostgresSyncTask implements ApplicationRunner { |
| | | |
| | | @Autowired |
| | | private StringRedisTemplate stringRedisTemplate; |
| | | |
| | | // å设å¤å¯¹åºç Service |
| | | @Autowired |
| | | private IRollerTimeDataService rollerService; |
| | | @Autowired |
| | | private IPackerTimeDataService packerService; |
| | | @Autowired |
| | | private IBoxTimeDataService boxService; |
| | | @Autowired |
| | | private IMakeupTimeDataService makeupService; |
| | | @Autowired |
| | | private ITransTimeDataService transService; |
| | | @Autowired |
| | | private IHoisterTimeDataService hoisterService; |
| | | @Autowired |
| | | private IFeedmatchTimeDataService feedmatchService; |
| | | |
| | | @Value("${spring.redis.sync-interval-ms:5000}") |
| | | private long intervalMs; |
| | | |
| | | private final ExecutorService executorService = Executors.newSingleThreadExecutor(); |
| | | |
| | | private volatile boolean running = true; |
| | | |
| | | @Override |
| | | public void run(ApplicationArguments args) { |
| | | // 强å¶éå¶æå°é´é为 1000ms |
| | | if (intervalMs < 1000) { |
| | | log.warn("é
ç½®ç忥é´é {}ms å°äºæå°éå¶ 1000msï¼å·²èªå¨ä¿®æ£ä¸º 1000ms", intervalMs); |
| | | intervalMs = 1000; |
| | | } |
| | | |
| | | executorService.submit(this::processSync); |
| | | log.info("Redis -> PostgreSQL å¤è¡¨åæµæ°æ®ééä»»å¡å·²å¯å¨ï¼ééé´é: {}ms", intervalMs); |
| | | } |
| | | |
| | | private void processSync() { |
| | | while (running) { |
| | | try { |
| | | long startTime = System.currentTimeMillis(); |
| | | |
| | | // 1. è·åçæ¬¡ä¿¡æ¯ |
| | | // Redis Key: "shift", Field: "ID" |
| | | Object shiftIdObj = stringRedisTemplate.opsForHash().get("shift", "ID"); |
| | | String shiftId = shiftIdObj != null ? shiftIdObj.toString() : null; |
| | | |
| | | if (shiftId == null || shiftId.isEmpty()) { |
| | | // 妿è·åä¸å°ç次ï¼å¯è½æ¯Redisææ¶æ²¡æ°æ®ï¼è®°å½erroræ¥å¿å¹¶çå¾
ä¸ä¸æ¬¡ |
| | | log.error("Redis䏿ªæ¾å°çæ¬¡ä¿¡æ¯ (key='shift', field='id')ï¼è·³è¿æ¬æ¬¡éé"); |
| | | sleepRemaining(startTime); |
| | | continue; |
| | | } |
| | | |
| | | // 2. æé ææè®¾å¤ç Redis Key (çæ¬¡ + 设å¤3ä½ç ) |
| | | // ä¾å¦ï¼ç次"2" + 设å¤"101" = "2101" |
| | | List<String> equipmentKeys = new ArrayList<>(AppConstants.EQUIPMENT_LIST.size()); |
| | | for (String code : AppConstants.EQUIPMENT_LIST) { |
| | | equipmentKeys.add(shiftId + code); |
| | | } |
| | | |
| | | // 3. æ¹éè·åè®¾å¤æ°æ® (Pipeline) |
| | | // ä½¿ç¨ Pipeline åå°ç½ç» RTT |
| | | List<Object> results = stringRedisTemplate.executePipelined(new SessionCallback<Object>() { |
| | | @Override |
| | | public Object execute(RedisOperations operations) throws DataAccessException { |
| | | for (String key : equipmentKeys) { |
| | | operations.opsForHash().entries(key); |
| | | } |
| | | return null; |
| | | } |
| | | }); |
| | | |
| | | // å° results 转为 Mapï¼æ¹ä¾¿åç»éè¿ Key è·åå
¶ä»è®¾å¤æ°æ® |
| | | Map<String, Map<Object, Object>> equipmentDataMap = new HashMap<>(); |
| | | if (results != null) { |
| | | for (int i = 0; i < results.size(); i++) { |
| | | Object res = results.get(i); |
| | | if (res instanceof Map && i < equipmentKeys.size()) { |
| | | equipmentDataMap.put(equipmentKeys.get(i), (Map<Object, Object>) res); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 4. æ°æ®åç±»ä¸æ å° |
| | | Date now = new Date(); |
| | | |
| | | List<RollerTimeData> rollerList = new ArrayList<>(); |
| | | List<PackerTimeData> packerList = new ArrayList<>(); |
| | | List<BoxTimeData> boxList = new ArrayList<>(); |
| | | List<MakeupTimeData> makeupList = new ArrayList<>(); |
| | | List<TransTimeData> transList = new ArrayList<>(); |
| | | List<HoisterTimeData> hoisterList = new ArrayList<>(); |
| | | List<FeedmatchTimeData> feedmatchList = new ArrayList<>(); |
| | | |
| | | for (int i = 0; i < results.size(); i++) { |
| | | Object result = results.get(i); |
| | | // executePipelined è¿åçç»æä¸ï¼hash entries è¿åçæ¯ Map<Object, Object> |
| | | if (!(result instanceof Map)) { |
| | | continue; |
| | | } |
| | | Map<Object, Object> map = (Map<Object, Object>) result; |
| | | if (map.isEmpty()) { |
| | | continue; |
| | | } |
| | | |
| | | String fullKey = equipmentKeys.get(i); |
| | | int type = AppConstants.getEquipmentType(fullKey); |
| | | |
| | | try { |
| | | // è§£æç次å设å¤å· |
| | | Integer shift = null; |
| | | Integer equNo = null; |
| | | if (fullKey != null && fullKey.length() >= 4) { |
| | | try { |
| | | shift = Integer.parseInt(fullKey.substring(0, 1)); |
| | | equNo = Integer.parseInt(fullKey.substring(1)); |
| | | } catch (NumberFormatException e) { |
| | | log.warn("è§£æç次/设å¤å·å¤±è´¥ Key: {}", fullKey); |
| | | } |
| | | } |
| | | |
| | | // å° Map 转为 JSONObject 以便å©ç¨ fastjson çç±»å转æ¢åè½ |
| | | JSONObject json = new JSONObject(); |
| | | for (Map.Entry<Object, Object> entry : map.entrySet()) { |
| | | json.put(entry.getKey().toString(), entry.getValue()); |
| | | } |
| | | |
| | | // æ ¹æ®è®¾å¤ç±»å转æ¢å¹¶æ·»å å°å¯¹åºçå表 |
| | | switch (type) { |
| | | case AppConstants.TYPE_ROLLING: |
| | | RollerTimeData roller = json.toJavaObject(RollerTimeData.class); |
| | | roller.setTime(now).setKey(fullKey).setShift(shift).setEquNo(equNo); |
| | | rollerList.add(roller); |
| | | break; |
| | | case AppConstants.TYPE_PACKAGING: |
| | | PackerTimeData packer = json.toJavaObject(PackerTimeData.class); |
| | | packer.setTime(now).setKey(fullKey).setShift(shift).setEquNo(equNo); |
| | | try { |
| | | if(json.containsKey("chcQty")){ |
| | | packer.setQty(Double.parseDouble(json.get("chcQty").toString())); |
| | | } |
| | | if(json.containsKey("ptchQty")){ |
| | | packer.setMainQty(Double.parseDouble(json.get("ptchQty").toString())); |
| | | } |
| | | // å
è£
æºéè¦è·åæåæºç产éï¼æåæºçkey为 æ©1601ãä¸2601ãæ3601 |
| | | // é»è¾ï¼1-3å·å
è£
æºå¯¹åºtQty1-3ï¼4å·æ ï¼5-13å·å¯¹åºtQty4-12 (å³å·æ°-1) |
| | | if (equNo != null && equNo > 0) { |
| | | int machineNo = equNo % 100; |
| | | String targetField = "tQty" + machineNo;; |
| | | // if (machineNo < 4) { |
| | | // targetField = "tQty" + machineNo; |
| | | // } else if (machineNo > 4) { |
| | | // targetField = "tQty" + (machineNo - 1); |
| | | // } |
| | | |
| | | Map<Object, Object> tsjMap = equipmentDataMap.get(shiftId + "601"); |
| | | if (tsjMap != null) { |
| | | Object qtyObj = tsjMap.get(targetField); |
| | | if (qtyObj != null) { |
| | | packer.setTsQty(Double.parseDouble(qtyObj.toString())); |
| | | } |
| | | } |
| | | } |
| | | }catch (Exception e){} |
| | | packerList.add(packer); |
| | | break; |
| | | case AppConstants.TYPE_SEALING: |
| | | BoxTimeData box = json.toJavaObject(BoxTimeData.class); |
| | | box.setTime(now).setKey(fullKey).setShift(shift).setEquNo(equNo); |
| | | boxList.add(box); |
| | | break; |
| | | case AppConstants.TYPE_FORMING: |
| | | MakeupTimeData makeup = json.toJavaObject(MakeupTimeData.class); |
| | | makeup.setTime(now).setKey(fullKey).setShift(shift).setEquNo(equNo); |
| | | makeupList.add(makeup); |
| | | break; |
| | | case AppConstants.TYPE_LAUNCHING: |
| | | TransTimeData trans = json.toJavaObject(TransTimeData.class); |
| | | trans.setTime(now).setKey(fullKey).setShift(shift).setEquNo(equNo); |
| | | transList.add(trans); |
| | | break; |
| | | case AppConstants.TYPE_LIFTING: |
| | | HoisterTimeData hoister = json.toJavaObject(HoisterTimeData.class); |
| | | hoister.setTime(now).setKey(fullKey).setShift(shift).setEquNo(equNo); |
| | | hoisterList.add(hoister); |
| | | break; |
| | | case AppConstants.TYPE_FEED: |
| | | FeedmatchTimeData feed = json.toJavaObject(FeedmatchTimeData.class); |
| | | feed.setTime(now).setKey(fullKey).setShift(shift).setEquNo(equNo); |
| | | feedmatchList.add(feed); |
| | | break; |
| | | default: |
| | | log.warn("æªç¥ç设å¤ç±»åï¼Key: {}", fullKey); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("æ°æ®è½¬æ¢å¤±è´¥ Key: {}", fullKey, e); |
| | | } |
| | | } |
| | | |
| | | // 5. æ¹éå
¥åº |
| | | if (!rollerList.isEmpty()) rollerService.saveBatch(rollerList); |
| | | if (!packerList.isEmpty()) packerService.saveBatch(packerList); |
| | | if (!boxList.isEmpty()) boxService.saveBatch(boxList); |
| | | if (!makeupList.isEmpty()) makeupService.saveBatch(makeupList); |
| | | if (!transList.isEmpty()) transService.saveBatch(transList); |
| | | if (!hoisterList.isEmpty()) hoisterService.saveBatch(hoisterList); |
| | | if (!feedmatchList.isEmpty()) feedmatchService.saveBatch(feedmatchList); |
| | | |
| | | int total = rollerList.size() + packerList.size() + boxList.size() + |
| | | makeupList.size() + transList.size() + hoisterList.size() + feedmatchList.size(); |
| | | |
| | | if (total > 0) { |
| | | log.info("éé宿: Shift={}, Total={}, Cost={}ms", shiftId, total, System.currentTimeMillis() - startTime); |
| | | } |
| | | |
| | | sleepRemaining(startTime); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("忥任å¡å¼å¸¸", e); |
| | | try { |
| | | TimeUnit.SECONDS.sleep(5); |
| | | } catch (InterruptedException ex) { |
| | | Thread.currentThread().interrupt(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void sleepRemaining(long startTime) { |
| | | long elapsed = System.currentTimeMillis() - startTime; |
| | | long sleepTime = intervalMs - elapsed; |
| | | if (sleepTime > 0) { |
| | | try { |
| | | TimeUnit.MILLISECONDS.sleep(sleepTime); |
| | | } catch (InterruptedException e) { |
| | | Thread.currentThread().interrupt(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // åºç¨å
³éæ¶åæ¢ä»»å¡ |
| | | public void stop() { |
| | | this.running = false; |
| | | executorService.shutdown(); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils.utils; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.data.redis.core.StringRedisTemplate; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | @Component |
| | | public class RedisUtils { |
| | | |
| | | @Autowired |
| | | private StringRedisTemplate stringRedisTemplate; |
| | | |
| | | /** |
| | | * åå
¥ç¼å |
| | | * |
| | | * @param key é® |
| | | * @param value å¼ |
| | | * @return trueæå false失败 |
| | | */ |
| | | public boolean set(String key, String value) { |
| | | try { |
| | | stringRedisTemplate.opsForValue().set(key, value); |
| | | return true; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * åå
¥ç¼åå¹¶è®¾ç½®è¿ææ¶é´ |
| | | * |
| | | * @param key é® |
| | | * @param value å¼ |
| | | * @param time æ¶é´(ç§) timeè¦å¤§äº0 妿timeå°äºçäº0 å°è®¾ç½®æ éæ |
| | | * @return trueæå false失败 |
| | | */ |
| | | public boolean set(String key, String value, long time) { |
| | | try { |
| | | if (time > 0) { |
| | | stringRedisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); |
| | | } else { |
| | | set(key, value); |
| | | } |
| | | return true; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 读åç¼å |
| | | * |
| | | * @param key é® |
| | | * @return å¼ |
| | | */ |
| | | public String get(String key) { |
| | | return key == null ? null : stringRedisTemplate.opsForValue().get(key); |
| | | } |
| | | |
| | | /** |
| | | * å é¤ç¼å |
| | | * |
| | | * @param key é® |
| | | */ |
| | | public boolean del(String key) { |
| | | try { |
| | | if (key != null && key.length() > 0) { |
| | | stringRedisTemplate.delete(key); |
| | | } |
| | | return true; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æå®ç¼åå¤±ææ¶é´ |
| | | * |
| | | * @param key é® |
| | | * @param time æ¶é´(ç§) |
| | | * @return trueæå false失败 |
| | | */ |
| | | public boolean expire(String key, long time) { |
| | | try { |
| | | if (time > 0) { |
| | | stringRedisTemplate.expire(key, time, TimeUnit.SECONDS); |
| | | } |
| | | return true; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 夿keyæ¯å¦åå¨ |
| | | * |
| | | * @param key é® |
| | | * @return true åå¨ falseä¸åå¨ |
| | | */ |
| | | public boolean hasKey(String key) { |
| | | try { |
| | | return Boolean.TRUE.equals(stringRedisTemplate.hasKey(key)); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | spring: |
| | | datasource: |
| | | driver-class-name: org.postgresql.Driver |
| | | # PostgreSQL 驱å¨ä¸è¯å« serverTimezoneï¼éè¦ä½¿ç¨ options=-c timezone=... |
| | | url: jdbc:postgresql://10.39.186.6:5432/postgres?currentSchema=public&serverTimezone=Asia/Shanghai"; |
| | | username: postgres |
| | | password: 123456 |
| | | jackson: |
| | | time-zone: Asia/Shanghai |
| | | date-format: yyyy-MM-dd HH:mm:ss |
| | | redis: |
| | | host: 10.39.186.3 |
| | | port: 6677 |
| | | password: |
| | | database: 0 |
| | | timeout: 3000 |
| | | queue-key: redis # Redis Hash Key |
| | | sync-interval-ms: 5000 # 忥é´éï¼æ¯«ç§ï¼ï¼æå° 1000 |
| | | |
| | | logging: |
| | | file: |
| | | name: logs/timescaledb-utils.log |
| | | logback: |
| | | rollingpolicy: |
| | | max-file-size: 10MB |
| | | max-history: 30 |
| | | level: |
| | | root: INFO |
| | | |
| | | server: |
| | | port: 8642 |
| | | |
| | | mybatis-plus: |
| | | mapper-locations: classpath*:mapper/**/*.xml |
| | | type-aliases-package: com.shlb.timescaledbutils.entity |
| | | # configuration: |
| | | # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # å¼å¯æ§å¶å°æå° SQL |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.shlb.timescaledbutils.entity.PointData; |
| | | import com.shlb.timescaledbutils.service.IPointDataService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.junit.jupiter.api.Test; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.boot.test.context.SpringBootTest; |
| | | |
| | | import java.util.List; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | @SpringBootTest |
| | | @Slf4j |
| | | class PostgresDataMonitorTest { |
| | | |
| | | @Autowired |
| | | private IPointDataService pointDataService; |
| | | |
| | | /** |
| | | * çæ§æ°æ®åºæ°æ® |
| | | * æ¯5ç§æ¥è¯¢ä¸æ¬¡ææ°ç5æ¡æ°æ®åæ»æ¡æ° |
| | | */ |
| | | @Test |
| | | void monitorData() { |
| | | log.info("=== å¼å§çæ§ PostgreSQL æ°æ®åå (æ Ctrl+C 忢) ==="); |
| | | |
| | | while (true) { |
| | | try { |
| | | // è®°å½å¼å§æ¶é´ |
| | | long start = System.currentTimeMillis(); |
| | | |
| | | // æ¥è¯¢æ»æ¡æ° |
| | | long count = pointDataService.count(); |
| | | |
| | | // æ¥è¯¢ææ°ç 5 æ¡æ°æ® (ä½¿ç¨ LIMIT 5 é¿å
å
¨è¡¨æ«æ) |
| | | LambdaQueryWrapper<PointData> wrapper = new LambdaQueryWrapper<>(); |
| | | wrapper.orderByDesc(PointData::getTime); |
| | | wrapper.last("LIMIT 5"); |
| | | |
| | | List<PointData> latestData = pointDataService.list(wrapper); |
| | | |
| | | // æå°ç»æ |
| | | log.info("--------------------------------------------------"); |
| | | log.info("å½åæ¶é´: {}", new java.util.Date()); |
| | | log.info("æ°æ®åºæ»æ¡æ°: {}", count); |
| | | log.info("ææ° 5 æ¡æ°æ®:"); |
| | | if (latestData.isEmpty()) { |
| | | log.info(" (ææ æ°æ®)"); |
| | | } else { |
| | | for (PointData data : latestData) { |
| | | log.info(" {}", data); |
| | | } |
| | | } |
| | | log.info("--------------------------------------------------"); |
| | | |
| | | // 计ç®ä¼ç æ¶é´ |
| | | long elapsed = System.currentTimeMillis() - start; |
| | | long sleepTime = 5000 - elapsed; |
| | | if (sleepTime > 0) { |
| | | TimeUnit.MILLISECONDS.sleep(sleepTime); |
| | | } |
| | | |
| | | } catch (InterruptedException e) { |
| | | log.warn("çæ§ä»»å¡è¢«ä¸æ"); |
| | | Thread.currentThread().interrupt(); |
| | | break; |
| | | } catch (Exception e) { |
| | | log.error("æ¥è¯¢æ°æ®å¼å¸¸", e); |
| | | try { |
| | | TimeUnit.SECONDS.sleep(5); |
| | | } catch (InterruptedException ex) { |
| | | Thread.currentThread().interrupt(); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils; |
| | | |
| | | import com.shlb.timescaledbutils.entity.RollerTimeData; |
| | | import com.shlb.timescaledbutils.service.IRollerTimeDataService; |
| | | import org.junit.jupiter.api.Test; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.boot.test.context.SpringBootTest; |
| | | |
| | | import java.util.List; |
| | | |
| | | @SpringBootTest |
| | | public class RollerTimeDataTest { |
| | | |
| | | @Autowired |
| | | private IRollerTimeDataService rollerTimeDataService; |
| | | |
| | | @Test |
| | | public void testQueryAll() { |
| | | long startTime = System.currentTimeMillis(); |
| | | |
| | | List<RollerTimeData> list = rollerTimeDataService.list(); |
| | | |
| | | long endTime = System.currentTimeMillis(); |
| | | long duration = endTime - startTime; |
| | | |
| | | System.out.println("æ¥è¯¢èæ¶: " + duration + " ms"); |
| | | System.out.println("æ¥è¯¢å°çè®°å½æ°: " + (list != null ? list.size() : 0)); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.shlb.timescaledbutils; |
| | | |
| | | import com.shlb.timescaledbutils.utils.RedisUtils; |
| | | import org.junit.jupiter.api.Assertions; |
| | | import org.junit.jupiter.api.Test; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.boot.test.context.SpringBootTest; |
| | | |
| | | @SpringBootTest |
| | | class TimescaleDbUtilsApplicationTests { |
| | | |
| | | @Autowired |
| | | private RedisUtils redisUtils; |
| | | |
| | | @Test |
| | | void contextLoads() { |
| | | } |
| | | |
| | | @Test |
| | | void testRedis() { |
| | | String key = "testKey"; |
| | | String value = "hello redis"; |
| | | |
| | | // æµè¯åå
¥ |
| | | boolean set = redisUtils.set(key, value); |
| | | Assertions.assertTrue(set, "Redisåå
¥å¤±è´¥"); |
| | | |
| | | // æµè¯è¯»å |
| | | String result = redisUtils.get(key); |
| | | Assertions.assertEquals(value, result, "Redis读åå¼ä¸å¹é
"); |
| | | |
| | | // æµè¯å é¤ |
| | | boolean del = redisUtils.del(key); |
| | | Assertions.assertTrue(del, "Rediså é¤å¤±è´¥"); |
| | | |
| | | // éªè¯å é¤ |
| | | Assertions.assertFalse(redisUtils.hasKey(key), "Redis keyåºå·²è¢«å é¤"); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import { request } from '@/service/request'; |
| | | |
| | | /** è·åæ£éªæ¹æ¬¡å表 */ |
| | | export function fetchGetBatchList (params?: Api.Qm.BatchSearchParams) { |
| | | return request<Api.Qm.BatchList>({ |
| | | url: '/qm/batch/list', |
| | | method: 'get', |
| | | params |
| | | }); |
| | | } |
| | | /** æ°å¢æ£éªæ¹æ¬¡ */ |
| | | export function fetchCreateBatch (data: Api.Qm.BatchOperateParams) { |
| | | return request<boolean>({ |
| | | url: '/qm/batch', |
| | | method: 'post', |
| | | data |
| | | }); |
| | | } |
| | | |
| | | /** ä¿®æ¹æ£éªæ¹æ¬¡ */ |
| | | export function fetchUpdateBatch (data: Api.Qm.BatchOperateParams) { |
| | | return request<boolean>({ |
| | | url: '/qm/batch', |
| | | method: 'put', |
| | | data |
| | | }); |
| | | } |
| | | |
| | | /** æ¹éå 餿£éªæ¹æ¬¡ */ |
| | | export function fetchBatchDeleteBatch (ids: CommonType.IdType[]) { |
| | | return request<boolean>({ |
| | | url: `/qm/batch/${ids.join(',')}`, |
| | | method: 'delete' |
| | | }); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * Namespace Api |
| | | * |
| | | * All backend api type |
| | | */ |
| | | declare namespace Api { |
| | | /** |
| | | * namespace Qm |
| | | * |
| | | * backend api module: "Qm" |
| | | */ |
| | | namespace Qm { |
| | | /** batch */ |
| | | type Batch = Common.CommonRecord<{ |
| | | /** ç¼ç */ |
| | | id: CommonType.IdType; |
| | | /** æ¹æ¬¡ä»£ç */ |
| | | batchCode: string; |
| | | /** æ¹æ¬¡åç§° */ |
| | | batchName: string; |
| | | /** A-å¶ä¸ B-æå C-å·å
D-å°ç®± E-ç³é¦æ */ |
| | | typ: string; |
| | | /** æºå°ä»£ç */ |
| | | eqpCode: string; |
| | | /** çå· */ |
| | | matCode: string; |
| | | /** å¤å®ä¾æ®ä»£ç */ |
| | | judgeCode: string; |
| | | /** æ¹æ¬¡çææ¥æ */ |
| | | batchDate: string; |
| | | /** ä½¿ç¨æ å¿ */ |
| | | isflag: string; |
| | | /** å¯ç¨æ å¿ */ |
| | | enabled: string; |
| | | /** å°è´§æ»é */ |
| | | totalNum: number; |
| | | /** 综åå¤å® */ |
| | | results: string; |
| | | /** æ¹å人 */ |
| | | approver: string; |
| | | /** å®¡æ ¸äºº */ |
| | | auditor: string; |
| | | /** å建人 */ |
| | | creater: string; |
| | | /** å¶è¡¨æ¥æ */ |
| | | tabDate: string; |
| | | /** çæ¬åç§° */ |
| | | verName: string; |
| | | /** çæ¬ç¼å· */ |
| | | verCode: string; |
| | | /** ä¿åæ */ |
| | | archDate: string; |
| | | /** 0-æªä¸ä¼ mes,1-å·²ä¸ä¼ , 3-ä»MESä¸è½½ */ |
| | | flag: string; |
| | | /** ä¸ä¼ MESæ¶é´ */ |
| | | toMesDate: string; |
| | | /** ä»MESæ¶é´ä¸è½½ */ |
| | | fromMesDate: string; |
| | | /** å 餿 å¿ */ |
| | | deleted: number; |
| | | /** æ¹æ¬¡æè¿° */ |
| | | batchDes: string; |
| | | /** ç±»å« 0ï¼æå 1ï¼è¾
æ */ |
| | | category: string; |
| | | /** å·å¶å·¥å· */ |
| | | makeno: string; |
| | | /** çæ¬¡æºå· */ |
| | | shifteqpno: string; |
| | | /** è£
ç®±å· */ |
| | | boxno: string; |
| | | /** ç¶æ¹æ¬¡å· */ |
| | | pid: CommonType.IdType; |
| | | /** 夿 ¸äºº */ |
| | | reviewer: string; |
| | | /** 夿£æ¬¡æ° */ |
| | | rvcount: number; |
| | | /** æ¹æ¬¡ç¶æ */ |
| | | state: string; |
| | | /** 夿 ¸æ¥æ */ |
| | | reviewTime: string; |
| | | /** å®¡æ ¸æ¥æ */ |
| | | auditTime: string; |
| | | /** è§æ ¼ */ |
| | | spec: string; |
| | | /** æ¹åæ¶é´ */ |
| | | approveTime: string; |
| | | /** å°è´§åä½ */ |
| | | unit: string; |
| | | /** å°è´§æ¥æ */ |
| | | arrivalTime: string; |
| | | /** åæ¾å°ç¹ */ |
| | | storagePlace: string; |
| | | /** æ£éªå */ |
| | | checker: string; |
| | | /** æ¥åæ¥æ */ |
| | | receiveTime: string; |
| | | /** æ¥æ£æ¥æ */ |
| | | inspTime: string; |
| | | /** ä»åºä¿ç®¡å */ |
| | | storer: string; |
| | | /** æ¯å¦éªè¯ */ |
| | | isverify: string; |
| | | /** æ¯å¦æ£éª */ |
| | | ischk: string; |
| | | /** å¤ç¨1 */ |
| | | bak1: string; |
| | | /** å¤ç¨2 */ |
| | | bak2: string; |
| | | }>; |
| | | |
| | | /** batch search params */ |
| | | type BatchSearchParams = CommonType.RecordNullable< |
| | | Pick< |
| | | Api.Qm.Batch, |
| | | | 'batchCode' |
| | | | 'typ' |
| | | | 'eqpCode' |
| | | | 'matCode' |
| | | | 'batchDate' |
| | | | 'flag' |
| | | | 'deleted' |
| | | | 'category' |
| | | | 'state' |
| | | > & |
| | | Api.Common.CommonSearchParams |
| | | >; |
| | | |
| | | /** batch operate params */ |
| | | type BatchOperateParams = CommonType.RecordNullable< |
| | | Pick< |
| | | Api.Qm.Batch, |
| | | | 'id' |
| | | | 'batchCode' |
| | | | 'batchName' |
| | | | 'typ' |
| | | | 'eqpCode' |
| | | | 'matCode' |
| | | | 'judgeCode' |
| | | | 'batchDate' |
| | | | 'isflag' |
| | | | 'enabled' |
| | | | 'totalNum' |
| | | | 'results' |
| | | | 'approver' |
| | | | 'auditor' |
| | | | 'creater' |
| | | | 'tabDate' |
| | | | 'verName' |
| | | | 'verCode' |
| | | | 'archDate' |
| | | | 'flag' |
| | | | 'toMesDate' |
| | | | 'fromMesDate' |
| | | | 'deleted' |
| | | | 'batchDes' |
| | | | 'category' |
| | | | 'makeno' |
| | | | 'shifteqpno' |
| | | | 'boxno' |
| | | | 'pid' |
| | | | 'reviewer' |
| | | | 'rvcount' |
| | | | 'state' |
| | | | 'reviewTime' |
| | | | 'auditTime' |
| | | | 'spec' |
| | | | 'approveTime' |
| | | | 'unit' |
| | | | 'arrivalTime' |
| | | | 'storagePlace' |
| | | | 'checker' |
| | | | 'receiveTime' |
| | | | 'inspTime' |
| | | | 'storer' |
| | | | 'isverify' |
| | | | 'ischk' |
| | | | 'bak1' |
| | | | 'bak2' |
| | | > |
| | | >; |
| | | |
| | | /** batch list */ |
| | | type BatchList = Api.Common.PaginatingQueryRecord<Batch>; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="tsx"> |
| | | import { ref } from 'vue'; |
| | | import { NDivider } from 'naive-ui'; |
| | | import { fetchBatchDeleteBatch, fetchGetBatchList } from '@/service/api/qm/batch'; |
| | | import { useAppStore } from '@/store/modules/app'; |
| | | import { useAuth } from '@/hooks/business/auth'; |
| | | import { useDownload } from '@/hooks/business/download'; |
| | | import { defaultTransform, useNaivePaginatedTable, useTableOperate } from '@/hooks/common/table'; |
| | | import { $t } from '@/locales'; |
| | | import ButtonIcon from '@/components/custom/button-icon.vue'; |
| | | import BatchOperateDrawer from './modules/batch-operate-drawer.vue'; |
| | | import BatchSearch from './modules/batch-search.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'BatchList' |
| | | }); |
| | | |
| | | |
| | | const appStore = useAppStore(); |
| | | const { download } = useDownload(); |
| | | const { hasAuth } = useAuth(); |
| | | |
| | | // ç±»å/åé¦MES/ç±»å«ç value->label æ å°ï¼ç¨äºè¡¨æ ¼æ¾ç¤ºï¼ |
| | | const TYP_MAP: Record<string, string> = { A: 'å¶ä¸', B: 'æå', C: 'å·å
', D: 'å°ç®±', E: 'ç³é¦æ' }; |
| | | const FLAG_MAP: Record<string, string> = { '0': 'æªä¸ä¼ mes', '1': 'å·²ä¸ä¼ ', '3': 'ä»MESä¸è½½' }; |
| | | const CATEGORY_MAP: Record<string, string> = { '0': 'æå', '1': 'è¾
æ' }; |
| | | |
| | | const searchParams = ref<Api.Qm.BatchSearchParams>({ |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | batchCode: null, |
| | | typ: null, |
| | | eqpCode: null, |
| | | matCode: null, |
| | | batchDate: null, |
| | | flag: null, |
| | | toMesDate: null, |
| | | fromMesDate: null, |
| | | deleted: null, |
| | | category: null, |
| | | state: null, |
| | | params: {} |
| | | }); |
| | | |
| | | const { columns, columnChecks, data, getData, getDataByPage, loading, mobilePagination, scrollX } = |
| | | useNaivePaginatedTable({ |
| | | api: () => fetchGetBatchList(searchParams.value), |
| | | transform: response => defaultTransform(response), |
| | | onPaginationParamsChange: params => { |
| | | searchParams.value.pageNum = params.page; |
| | | searchParams.value.pageSize = params.pageSize; |
| | | }, |
| | | columns: () => [ |
| | | { |
| | | type: 'selection', |
| | | align: 'center', |
| | | width: 48 |
| | | }, |
| | | { |
| | | key: 'index', |
| | | title: $t('common.index'), |
| | | align: 'center', |
| | | width: 64, |
| | | render: (_, index) => index + 1 |
| | | }, |
| | | { |
| | | key: 'id', |
| | | title: 'ç¼ç ', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'batchCode', |
| | | title: 'æ¹æ¬¡ä»£ç ', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'batchName', |
| | | title: 'æ¹æ¬¡åç§°', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'typ', |
| | | title: 'ç±»å', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: row => TYP_MAP[row.typ] ?? row.typ |
| | | }, |
| | | { |
| | | key: 'eqpCode', |
| | | title: 'æºå°ä»£ç ', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'matCode', |
| | | title: 'çå·', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'judgeCode', |
| | | title: 'å¤å®ä¾æ®ä»£ç ', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'batchDate', |
| | | title: 'æ¹æ¬¡çææ¥æ', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'isflag', |
| | | title: 'ä½¿ç¨æ å¿', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'enabled', |
| | | title: 'å¯ç¨æ å¿', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'totalNum', |
| | | title: 'å°è´§æ»é', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'results', |
| | | title: '综åå¤å®', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'approver', |
| | | title: 'æ¹å人', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'auditor', |
| | | title: 'å®¡æ ¸äºº', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'creater', |
| | | title: 'å建人', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'tabDate', |
| | | title: 'å¶è¡¨æ¥æ', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'verName', |
| | | title: 'çæ¬åç§°', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'verCode', |
| | | title: 'çæ¬ç¼å·', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'archDate', |
| | | title: 'ä¿åæ', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'flag', |
| | | title: 'åé¦MES', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: row => FLAG_MAP[String(row.flag)] ?? row.flag |
| | | }, |
| | | { |
| | | key: 'toMesDate', |
| | | title: 'ä¸ä¼ MESæ¶é´', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'fromMesDate', |
| | | title: 'ä»MESæ¶é´ä¸è½½', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'deleted', |
| | | title: 'å 餿 å¿', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'batchDes', |
| | | title: 'æ¹æ¬¡æè¿°', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'category', |
| | | title: 'ç±»å«', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: row => CATEGORY_MAP[String(row.category)] ?? row.category |
| | | }, |
| | | { |
| | | key: 'makeno', |
| | | title: 'å·å¶å·¥å·', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'shifteqpno', |
| | | title: 'çæ¬¡æºå·', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'boxno', |
| | | title: 'è£
ç®±å·', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'pid', |
| | | title: 'ç¶æ¹æ¬¡å·', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'reviewer', |
| | | title: '夿 ¸äºº', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'rvcount', |
| | | title: '夿£æ¬¡æ°', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'state', |
| | | title: 'æ¹æ¬¡ç¶æ', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'reviewTime', |
| | | title: '夿 ¸æ¥æ', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'auditTime', |
| | | title: 'å®¡æ ¸æ¥æ', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'spec', |
| | | title: 'è§æ ¼', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'approveTime', |
| | | title: 'æ¹åæ¶é´', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'unit', |
| | | title: 'å°è´§åä½', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'arrivalTime', |
| | | title: 'å°è´§æ¥æ', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'storagePlace', |
| | | title: 'åæ¾å°ç¹', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'checker', |
| | | title: 'æ£éªå', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'receiveTime', |
| | | title: 'æ¥åæ¥æ', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'inspTime', |
| | | title: 'æ¥æ£æ¥æ', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'storer', |
| | | title: 'ä»åºä¿ç®¡å', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'isverify', |
| | | title: 'æ¯å¦éªè¯', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'ischk', |
| | | title: 'æ¯å¦æ£éª', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'bak1', |
| | | title: 'å¤ç¨1', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'bak2', |
| | | title: 'å¤ç¨2', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'operate', |
| | | title: $t('common.operate'), |
| | | align: 'center', |
| | | width: 130, |
| | | render: row => { |
| | | const divider = () => { |
| | | if (!hasAuth('qm:batch:edit') || !hasAuth('qm:batch:remove')) { |
| | | return null; |
| | | } |
| | | return <NDivider vertical />; |
| | | }; |
| | | |
| | | const editBtn = () => { |
| | | if (!hasAuth('qm:batch:edit')) { |
| | | return null; |
| | | } |
| | | return ( |
| | | <ButtonIcon |
| | | text |
| | | type="primary" |
| | | icon="material-symbols:drive-file-rename-outline-outline" |
| | | tooltipContent={$t('common.edit')} |
| | | onClick={() => edit(row.id)} |
| | | /> |
| | | ); |
| | | }; |
| | | |
| | | const deleteBtn = () => { |
| | | if (!hasAuth('qm:batch:remove')) { |
| | | return null; |
| | | } |
| | | return ( |
| | | <ButtonIcon |
| | | text |
| | | type="error" |
| | | icon="material-symbols:delete-outline" |
| | | tooltipContent={$t('common.delete')} |
| | | popconfirmContent={$t('common.confirmDelete')} |
| | | onPositiveClick={() => handleDelete(row.id)} |
| | | /> |
| | | ); |
| | | }; |
| | | |
| | | return ( |
| | | <div class="flex-center gap-8px"> |
| | | {editBtn()} |
| | | {divider()} |
| | | {deleteBtn()} |
| | | </div> |
| | | ); |
| | | } |
| | | } |
| | | ] |
| | | }); |
| | | |
| | | const { drawerVisible, operateType, editingData, handleAdd, handleEdit, checkedRowKeys, onBatchDeleted, onDeleted } = |
| | | useTableOperate(data, 'id', getData); |
| | | |
| | | async function handleBatchDelete() { |
| | | // request |
| | | const { error } = await fetchBatchDeleteBatch(checkedRowKeys.value); |
| | | if (error) return; |
| | | onBatchDeleted(); |
| | | } |
| | | |
| | | async function handleDelete(id: CommonType.IdType) { |
| | | // request |
| | | const { error } = await fetchBatchDeleteBatch([id]); |
| | | if (error) return; |
| | | onDeleted(); |
| | | } |
| | | |
| | | function edit(id: CommonType.IdType) { |
| | | handleEdit(id); |
| | | } |
| | | |
| | | function handleExport() { |
| | | download('/qm/batch/export', searchParams.value, `æ£éªæ¹æ¬¡_${new Date().getTime()}.xlsx`); |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <div class="min-h-500px flex-col-stretch gap-16px overflow-hidden lt-sm:overflow-auto"> |
| | | <BatchSearch v-model:model="searchParams" @search="getDataByPage" /> |
| | | <NCard title="æ£éªæ¹æ¬¡å表" :bordered="false" size="small" class="card-wrapper sm:flex-1-hidden"> |
| | | <template #header-extra> |
| | | <TableHeaderOperation |
| | | v-model:columns="columnChecks" |
| | | :disabled-delete="checkedRowKeys.length === 0" |
| | | :loading="loading" |
| | | :show-add="hasAuth('qm:batch:add')" |
| | | :show-delete="hasAuth('qm:batch:remove')" |
| | | :show-export="hasAuth('qm:batch:export')" |
| | | @add="handleAdd" |
| | | @delete="handleBatchDelete" |
| | | @export="handleExport" |
| | | @refresh="getData" |
| | | /> |
| | | </template> |
| | | <NDataTable |
| | | v-model:checked-row-keys="checkedRowKeys" |
| | | :columns="columns" |
| | | :data="data" |
| | | size="small" |
| | | :flex-height="!appStore.isMobile" |
| | | :scroll-x="scrollX" |
| | | :loading="loading" |
| | | remote |
| | | :row-key="row => row.id" |
| | | :pagination="mobilePagination" |
| | | class="sm:h-full" |
| | | /> |
| | | <BatchOperateDrawer |
| | | v-model:visible="drawerVisible" |
| | | :operate-type="operateType" |
| | | :row-data="editingData" |
| | | @submitted="getDataByPage" |
| | | /> |
| | | </NCard> |
| | | </div> |
| | | </template> |
| | | |
| | | <style scoped></style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="ts"> |
| | | import { computed, ref, watch } from 'vue'; |
| | | import { jsonClone } from '@sa/utils'; |
| | | import { fetchCreateBatch, fetchUpdateBatch } from '@/service/api/qm/batch'; |
| | | import { useFormRules, useNaiveForm } from '@/hooks/common/form'; |
| | | import { $t } from '@/locales'; |
| | | |
| | | defineOptions({ |
| | | name: 'BatchOperateDrawer' |
| | | }); |
| | | |
| | | interface Props { |
| | | /** the type of operation */ |
| | | operateType: NaiveUI.TableOperateType; |
| | | /** the edit row data */ |
| | | rowData?: Api.Qm.Batch | null; |
| | | } |
| | | |
| | | const props = defineProps<Props>(); |
| | | |
| | | interface Emits { |
| | | (e: 'submitted'): void; |
| | | } |
| | | |
| | | const emit = defineEmits<Emits>(); |
| | | |
| | | const visible = defineModel<boolean>('visible', { |
| | | default: false |
| | | }); |
| | | |
| | | const { formRef, validate, restoreValidation } = useNaiveForm(); |
| | | const { createRequiredRule } = useFormRules(); |
| | | |
| | | // ç±»åé项ï¼A-å¶ä¸ B-æå C-å·å
D-å°ç®± E-ç³é¦æ |
| | | const typOptions = [ |
| | | { label: 'å¶ä¸', value: 'A' }, |
| | | { label: 'æå', value: 'B' }, |
| | | { label: 'å·å
', value: 'C' }, |
| | | { label: 'å°ç®±', value: 'D' }, |
| | | { label: 'ç³é¦æ', value: 'E' } |
| | | ]; |
| | | |
| | | // åé¦MESé项ï¼0-æªä¸ä¼ mes 1-å·²ä¸ä¼ 3-ä»MESä¸è½½ |
| | | const flagOptions = [ |
| | | { label: 'æªä¸ä¼ mes', value: '0' }, |
| | | { label: 'å·²ä¸ä¼ ', value: '1' }, |
| | | { label: 'ä»MESä¸è½½', value: '3' } |
| | | ]; |
| | | |
| | | // ç±»å«é项ï¼0-æå 1-è¾
æ |
| | | const categoryOptions = [ |
| | | { label: 'æå', value: '0' }, |
| | | { label: 'è¾
æ', value: '1' } |
| | | ]; |
| | | |
| | | const title = computed(() => { |
| | | const titles: Record<NaiveUI.TableOperateType, string> = { |
| | | add: 'æ°å¢æ£éªæ¹æ¬¡', |
| | | edit: 'ç¼è¾æ£éªæ¹æ¬¡' |
| | | }; |
| | | return titles[props.operateType]; |
| | | }); |
| | | |
| | | type Model = Api.Qm.BatchOperateParams; |
| | | |
| | | const model = ref<Model>(createDefaultModel()); |
| | | |
| | | function createDefaultModel(): Model { |
| | | return { |
| | | id: '', |
| | | batchCode: '', |
| | | batchName: '', |
| | | typ: '', |
| | | eqpCode: '', |
| | | matCode: '', |
| | | judgeCode: '', |
| | | batchDate: null, |
| | | isflag: '', |
| | | enabled: '', |
| | | totalNum: null, |
| | | results: '', |
| | | approver: '', |
| | | auditor: '', |
| | | creater: '', |
| | | tabDate: null, |
| | | verName: '', |
| | | verCode: '', |
| | | archDate: '', |
| | | flag: '', |
| | | toMesDate: null, |
| | | fromMesDate: null, |
| | | deleted: null, |
| | | batchDes: '', |
| | | category: '', |
| | | makeno: '', |
| | | shifteqpno: '', |
| | | boxno: '', |
| | | pid: '', |
| | | reviewer: '', |
| | | rvcount: null, |
| | | state: '', |
| | | reviewTime: null, |
| | | auditTime: null, |
| | | spec: '', |
| | | approveTime: null, |
| | | unit: '', |
| | | arrivalTime: null, |
| | | storagePlace: '', |
| | | checker: '', |
| | | receiveTime: null, |
| | | inspTime: null, |
| | | storer: '', |
| | | isverify: '', |
| | | ischk: '', |
| | | bak1: '', |
| | | bak2: '' |
| | | }; |
| | | } |
| | | |
| | | type RuleKey = Extract< |
| | | keyof Model, |
| | | | 'id' |
| | | >; |
| | | |
| | | const rules: Record<RuleKey, App.Global.FormRule> = { |
| | | id: createRequiredRule('ç¼ç ä¸è½ä¸ºç©º'), |
| | | }; |
| | | |
| | | function handleUpdateModelWhenEdit() { |
| | | model.value = createDefaultModel(); |
| | | |
| | | if (props.operateType === 'edit' && props.rowData) { |
| | | Object.assign(model.value, jsonClone(props.rowData)); |
| | | } |
| | | } |
| | | |
| | | function closeDrawer() { |
| | | visible.value = false; |
| | | } |
| | | |
| | | async function handleSubmit() { |
| | | await validate(); |
| | | |
| | | const { id, batchCode, batchName, typ, eqpCode, matCode, judgeCode, batchDate, isflag, enabled, totalNum, results, approver, auditor, creater, tabDate, verName, verCode, archDate, flag, toMesDate, fromMesDate, deleted, batchDes, category, makeno, shifteqpno, boxno, pid, reviewer, rvcount, state, reviewTime, auditTime, spec, approveTime, unit, arrivalTime, storagePlace, checker, receiveTime, inspTime, storer, isverify, ischk, bak1, bak2 } = model.value; |
| | | |
| | | // request |
| | | if (props.operateType === 'add') { |
| | | const { error } = await fetchCreateBatch({ batchCode, batchName, typ, eqpCode, matCode, judgeCode, batchDate, isflag, enabled, totalNum, results, approver, auditor, creater, tabDate, verName, verCode, archDate, flag, toMesDate, fromMesDate, deleted, batchDes, category, makeno, shifteqpno, boxno, pid, reviewer, rvcount, state, reviewTime, auditTime, spec, approveTime, unit, arrivalTime, storagePlace, checker, receiveTime, inspTime, storer, isverify, ischk, bak1, bak2 }); |
| | | if (error) return; |
| | | } |
| | | |
| | | if (props.operateType === 'edit') { |
| | | const { error } = await fetchUpdateBatch({ id, batchCode, batchName, typ, eqpCode, matCode, judgeCode, batchDate, isflag, enabled, totalNum, results, approver, auditor, creater, tabDate, verName, verCode, archDate, flag, toMesDate, fromMesDate, deleted, batchDes, category, makeno, shifteqpno, boxno, pid, reviewer, rvcount, state, reviewTime, auditTime, spec, approveTime, unit, arrivalTime, storagePlace, checker, receiveTime, inspTime, storer, isverify, ischk, bak1, bak2 }); |
| | | if (error) return; |
| | | } |
| | | |
| | | window.$message?.success($t('common.updateSuccess')); |
| | | closeDrawer(); |
| | | emit('submitted'); |
| | | } |
| | | |
| | | watch(visible, () => { |
| | | if (visible.value) { |
| | | handleUpdateModelWhenEdit(); |
| | | restoreValidation(); |
| | | } |
| | | }); |
| | | </script> |
| | | |
| | | <template> |
| | | <NDrawer v-model:show="visible" :title="title" display-directive="show" :width="800" class="max-w-90%"> |
| | | <NDrawerContent :title="title" :native-scrollbar="false" closable> |
| | | <NForm ref="formRef" :model="model" :rules="rules"> |
| | | <NFormItem label="æ¹æ¬¡ä»£ç " path="batchCode"> |
| | | <NInput v-model:value="model.batchCode" placeholder="请è¾å
¥æ¹æ¬¡ä»£ç " /> |
| | | </NFormItem> |
| | | <NFormItem label="æ¹æ¬¡åç§°" path="batchName"> |
| | | <NInput v-model:value="model.batchName" placeholder="请è¾å
¥æ¹æ¬¡åç§°" /> |
| | | </NFormItem> |
| | | <NFormItem label="ç±»å" path="typ"> |
| | | <NSelect v-model:value="model.typ" :options="typOptions" placeholder="è¯·éæ©ç±»å" clearable /> |
| | | </NFormItem> |
| | | <NFormItem label="æºå°ä»£ç " path="eqpCode"> |
| | | <NInput v-model:value="model.eqpCode" placeholder="请è¾å
¥æºå°ä»£ç " /> |
| | | </NFormItem> |
| | | <NFormItem label="çå·" path="matCode"> |
| | | <NInput v-model:value="model.matCode" placeholder="请è¾å
¥çå·" /> |
| | | </NFormItem> |
| | | <NFormItem label="å¤å®ä¾æ®ä»£ç " path="judgeCode"> |
| | | <NInput v-model:value="model.judgeCode" placeholder="请è¾å
¥å¤å®ä¾æ®ä»£ç " /> |
| | | </NFormItem> |
| | | <NFormItem label="æ¹æ¬¡çææ¥æ" path="batchDate"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.batchDate" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="ä½¿ç¨æ å¿" path="isflag"> |
| | | <NInput v-model:value="model.isflag" placeholder="请è¾å
¥ä½¿ç¨æ å¿" /> |
| | | </NFormItem> |
| | | <NFormItem label="å¯ç¨æ å¿" path="enabled"> |
| | | <NInput v-model:value="model.enabled" placeholder="请è¾å
¥å¯ç¨æ å¿" /> |
| | | </NFormItem> |
| | | <NFormItem label="å°è´§æ»é" path="totalNum"> |
| | | <NInput v-model:value="model.totalNum" placeholder="请è¾å
¥å°è´§æ»é" /> |
| | | </NFormItem> |
| | | <NFormItem label="综åå¤å®" path="results"> |
| | | <NInput v-model:value="model.results" placeholder="请è¾å
¥ç»¼åå¤å®" /> |
| | | </NFormItem> |
| | | <NFormItem label="æ¹å人" path="approver"> |
| | | <NInput v-model:value="model.approver" placeholder="请è¾å
¥æ¹å人" /> |
| | | </NFormItem> |
| | | <NFormItem label="å®¡æ ¸äºº" path="auditor"> |
| | | <NInput v-model:value="model.auditor" placeholder="请è¾å
¥å®¡æ ¸äºº" /> |
| | | </NFormItem> |
| | | <NFormItem label="å建人" path="creater"> |
| | | <NInput v-model:value="model.creater" placeholder="请è¾å
¥å建人" /> |
| | | </NFormItem> |
| | | <NFormItem label="å¶è¡¨æ¥æ" path="tabDate"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.tabDate" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="çæ¬åç§°" path="verName"> |
| | | <NInput v-model:value="model.verName" placeholder="请è¾å
¥çæ¬åç§°" /> |
| | | </NFormItem> |
| | | <NFormItem label="çæ¬ç¼å·" path="verCode"> |
| | | <NInput v-model:value="model.verCode" placeholder="请è¾å
¥çæ¬ç¼å·" /> |
| | | </NFormItem> |
| | | <NFormItem label="ä¿åæ" path="archDate"> |
| | | <NInput v-model:value="model.archDate" placeholder="请è¾å
¥ä¿åæ" /> |
| | | </NFormItem> |
| | | <NFormItem label="åé¦MES" path="flag"> |
| | | <NSelect v-model:value="model.flag" :options="flagOptions" placeholder="è¯·éæ©åé¦MES" clearable /> |
| | | </NFormItem> |
| | | <NFormItem label="ä¸ä¼ MESæ¶é´" path="toMesDate"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.toMesDate" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="ä»MESæ¶é´ä¸è½½" path="fromMesDate"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.fromMesDate" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="å 餿 å¿" path="deleted"> |
| | | <NInput v-model:value="model.deleted" placeholder="请è¾å
¥å 餿 å¿" /> |
| | | </NFormItem> |
| | | <NFormItem label="æ¹æ¬¡æè¿°" path="batchDes"> |
| | | <NInput v-model:value="model.batchDes" placeholder="请è¾å
¥æ¹æ¬¡æè¿°" /> |
| | | </NFormItem> |
| | | <NFormItem label="ç±»å«" path="category"> |
| | | <NSelect v-model:value="model.category" :options="categoryOptions" placeholder="è¯·éæ©ç±»å«" clearable /> |
| | | </NFormItem> |
| | | <NFormItem label="å·å¶å·¥å·" path="makeno"> |
| | | <NInput v-model:value="model.makeno" placeholder="请è¾å
¥å·å¶å·¥å·" /> |
| | | </NFormItem> |
| | | <NFormItem label="çæ¬¡æºå·" path="shifteqpno"> |
| | | <NInput v-model:value="model.shifteqpno" placeholder="请è¾å
¥ç次æºå·" /> |
| | | </NFormItem> |
| | | <NFormItem label="è£
ç®±å·" path="boxno"> |
| | | <NInput v-model:value="model.boxno" placeholder="请è¾å
¥è£
ç®±å·" /> |
| | | </NFormItem> |
| | | <NFormItem label="ç¶æ¹æ¬¡å·" path="pid"> |
| | | <NInput v-model:value="model.pid" placeholder="请è¾å
¥ç¶æ¹æ¬¡å·" /> |
| | | </NFormItem> |
| | | <NFormItem label="夿 ¸äºº" path="reviewer"> |
| | | <NInput v-model:value="model.reviewer" placeholder="请è¾å
¥å¤æ ¸äºº" /> |
| | | </NFormItem> |
| | | <NFormItem label="夿£æ¬¡æ°" path="rvcount"> |
| | | <NInput v-model:value="model.rvcount" placeholder="请è¾å
¥å¤æ£æ¬¡æ°" /> |
| | | </NFormItem> |
| | | <NFormItem label="æ¹æ¬¡ç¶æ" path="state"> |
| | | <NInput v-model:value="model.state" placeholder="请è¾å
¥æ¹æ¬¡ç¶æ" /> |
| | | </NFormItem> |
| | | <NFormItem label="夿 ¸æ¥æ" path="reviewTime"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.reviewTime" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="å®¡æ ¸æ¥æ" path="auditTime"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.auditTime" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="è§æ ¼" path="spec"> |
| | | <NInput v-model:value="model.spec" placeholder="请è¾å
¥è§æ ¼" /> |
| | | </NFormItem> |
| | | <NFormItem label="æ¹åæ¶é´" path="approveTime"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.approveTime" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="å°è´§åä½" path="unit"> |
| | | <NInput v-model:value="model.unit" placeholder="请è¾å
¥å°è´§åä½" /> |
| | | </NFormItem> |
| | | <NFormItem label="å°è´§æ¥æ" path="arrivalTime"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.arrivalTime" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="åæ¾å°ç¹" path="storagePlace"> |
| | | <NInput v-model:value="model.storagePlace" placeholder="请è¾å
¥åæ¾å°ç¹" /> |
| | | </NFormItem> |
| | | <NFormItem label="æ£éªå" path="checker"> |
| | | <NInput v-model:value="model.checker" placeholder="请è¾å
¥æ£éªå" /> |
| | | </NFormItem> |
| | | <NFormItem label="æ¥åæ¥æ" path="receiveTime"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.receiveTime" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="æ¥æ£æ¥æ" path="inspTime"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.inspTime" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="ä»åºä¿ç®¡å" path="storer"> |
| | | <NInput v-model:value="model.storer" placeholder="请è¾å
¥ä»åºä¿ç®¡å" /> |
| | | </NFormItem> |
| | | <NFormItem label="æ¯å¦éªè¯" path="isverify"> |
| | | <NInput v-model:value="model.isverify" placeholder="请è¾å
¥æ¯å¦éªè¯" /> |
| | | </NFormItem> |
| | | <NFormItem label="æ¯å¦æ£éª" path="ischk"> |
| | | <NInput v-model:value="model.ischk" placeholder="请è¾å
¥æ¯å¦æ£éª" /> |
| | | </NFormItem> |
| | | <NFormItem label="å¤ç¨1" path="bak1"> |
| | | <NInput v-model:value="model.bak1" placeholder="请è¾å
¥å¤ç¨1" /> |
| | | </NFormItem> |
| | | <NFormItem label="å¤ç¨2" path="bak2"> |
| | | <NInput v-model:value="model.bak2" placeholder="请è¾å
¥å¤ç¨2" /> |
| | | </NFormItem> |
| | | </NForm> |
| | | <template #footer> |
| | | <NSpace :size="16"> |
| | | <NButton @click="closeDrawer">{{ $t('common.cancel') }}</NButton> |
| | | <NButton type="primary" @click="handleSubmit">{{ $t('common.confirm') }}</NButton> |
| | | </NSpace> |
| | | </template> |
| | | </NDrawerContent> |
| | | </NDrawer> |
| | | </template> |
| | | |
| | | <style scoped></style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="ts"> |
| | | import { ref, toRaw } from 'vue'; |
| | | import { jsonClone } from '@sa/utils'; |
| | | import { useNaiveForm } from '@/hooks/common/form'; |
| | | import { $t } from '@/locales'; |
| | | |
| | | defineOptions({ |
| | | name: 'BatchSearch' |
| | | }); |
| | | |
| | | interface Emits { |
| | | (e: 'search'): void; |
| | | } |
| | | |
| | | const emit = defineEmits<Emits>(); |
| | | |
| | | const { formRef, validate, restoreValidation } = useNaiveForm(); |
| | | |
| | | const dateRangeToMesDate = ref<[string, string] | null>(null); |
| | | const dateRangeFromMesDate = ref<[string, string] | null>(null); |
| | | const model = defineModel<Api.Qm.BatchSearchParams>('model', { required: true }); |
| | | |
| | | const defaultModel = jsonClone(toRaw(model.value)); |
| | | |
| | | // ç±»åé项ï¼A-å¶ä¸ B-æå C-å·å
D-å°ç®± E-ç³é¦æ |
| | | const typOptions = [ |
| | | { label: 'å¶ä¸', value: 'A' }, |
| | | { label: 'æå', value: 'B' }, |
| | | { label: 'å·å
', value: 'C' }, |
| | | { label: 'å°ç®±', value: 'D' }, |
| | | { label: 'ç³é¦æ', value: 'E' } |
| | | ]; |
| | | |
| | | // åé¦MESé项ï¼0-æªä¸ä¼ mes 1-å·²ä¸ä¼ 3-ä»MESä¸è½½ |
| | | const flagOptions = [ |
| | | { label: 'æªä¸ä¼ mes', value: '0' }, |
| | | { label: 'å·²ä¸ä¼ ', value: '1' }, |
| | | { label: 'ä»MESä¸è½½', value: '3' } |
| | | ]; |
| | | |
| | | // ç±»å«é项ï¼0-æå 1-è¾
æ |
| | | const categoryOptions = [ |
| | | { label: 'æå', value: '0' }, |
| | | { label: 'è¾
æ', value: '1' } |
| | | ]; |
| | | |
| | | function resetModel() { |
| | | dateRangeToMesDate.value = null; |
| | | dateRangeFromMesDate.value = null; |
| | | Object.assign(model.value, defaultModel); |
| | | } |
| | | |
| | | async function reset() { |
| | | await restoreValidation(); |
| | | resetModel(); |
| | | emit('search'); |
| | | } |
| | | |
| | | async function search() { |
| | | await validate(); |
| | | if (dateRangeToMesDate.value?.length) { |
| | | model.value.params!.beginToMesDate = dateRangeToMesDate.value[0]; |
| | | model.value.params!.endToMesDate = dateRangeToMesDate.value[1]; |
| | | } |
| | | if (dateRangeFromMesDate.value?.length) { |
| | | model.value.params!.beginFromMesDate = dateRangeFromMesDate.value[0]; |
| | | model.value.params!.endFromMesDate = dateRangeFromMesDate.value[1]; |
| | | } |
| | | emit('search'); |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <NCard :bordered="false" size="small" class="card-wrapper"> |
| | | <NCollapse> |
| | | <NCollapseItem :title="$t('common.search')" name="qm-batch-search"> |
| | | <NForm ref="formRef" :model="model" label-placement="left" :label-width="80"> |
| | | <NGrid responsive="screen" item-responsive> |
| | | <NFormItemGi span="24 s:12 m:8" label="æ¹æ¬¡ä»£ç " label-width="auto" path="batchCode" class="pr-24px"> |
| | | <NInput v-model:value="model.batchCode" placeholder="请è¾å
¥æ¹æ¬¡ä»£ç " /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:8" label="ç±»å" label-width="auto" path="typ" class="pr-24px"> |
| | | <NSelect v-model:value="model.typ" :options="typOptions" placeholder="è¯·éæ©ç±»å" clearable /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:8" label="æºå°ä»£ç " label-width="auto" path="eqpCode" class="pr-24px"> |
| | | <NInput v-model:value="model.eqpCode" placeholder="请è¾å
¥æºå°ä»£ç " /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:8" label="çå·" label-width="auto" path="matCode" class="pr-24px"> |
| | | <NInput v-model:value="model.matCode" placeholder="请è¾å
¥çå·" /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:8" label="æ¹æ¬¡çææ¥æ" label-width="auto" path="batchDate" class="pr-24px"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.batchDate" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:8" label="åé¦MES" label-width="auto" path="flag" class="pr-24px"> |
| | | <NSelect v-model:value="model.flag" :options="flagOptions" placeholder="è¯·éæ©åé¦MES" clearable /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:8" label="ä¸ä¼ MESæ¶é´" label-width="auto" path="toMesDate" class="pr-24px"> |
| | | <NDatePicker |
| | | v-model:formatted-value="dateRangeToMesDate" |
| | | type="datetimerange" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:8" label="ä»MESæ¶é´ä¸è½½" label-width="auto" path="fromMesDate" class="pr-24px"> |
| | | <NDatePicker |
| | | v-model:formatted-value="dateRangeFromMesDate" |
| | | type="datetimerange" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:8" label="å 餿 å¿" label-width="auto" path="deleted" class="pr-24px"> |
| | | <NInput v-model:value="model.deleted" placeholder="请è¾å
¥å 餿 å¿" /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:8" label="ç±»å«" label-width="auto" path="category" class="pr-24px"> |
| | | <NSelect v-model:value="model.category" :options="categoryOptions" placeholder="è¯·éæ©ç±»å«" clearable /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:8" label="æ¹æ¬¡ç¶æ" label-width="auto" path="state" class="pr-24px"> |
| | | <NInput v-model:value="model.state" placeholder="请è¾å
¥æ¹æ¬¡ç¶æ" /> |
| | | </NFormItemGi> |
| | | <NFormItemGi :show-feedback="false" span="24" class="pr-24px"> |
| | | <NSpace class="w-full" justify="end"> |
| | | <NButton @click="reset"> |
| | | <template #icon> |
| | | <icon-ic-round-refresh class="text-icon" /> |
| | | </template> |
| | | {{ $t('common.reset') }} |
| | | </NButton> |
| | | <NButton type="primary" ghost @click="search"> |
| | | <template #icon> |
| | | <icon-ic-round-search class="text-icon" /> |
| | | </template> |
| | | {{ $t('common.search') }} |
| | | </NButton> |
| | | </NSpace> |
| | | </NFormItemGi> |
| | | </NGrid> |
| | | </NForm> |
| | | </NCollapseItem> |
| | | </NCollapse> |
| | | </NCard> |
| | | </template> |
| | | |
| | | <style scoped></style> |