İşlemeleri karşılaştır
	
		
			159 İşleme
		
	
	
		
			d518ce3d19
			...
			yanyang
		
	
	| Yazar | SHA1 | Tarih | |
|---|---|---|---|
| 46f51e656e | |||
| e950cbbe9c | |||
| f9af03b030 | |||
| 095bdc1e23 | |||
| fd4c383fcc | |||
| e5128e3c1f | |||
| 6bce644663 | |||
| c6602d6099 | |||
| c90631c205 | |||
| c8aad62eb4 | |||
| 8c3d387257 | |||
| ed65364551 | |||
| ffc28af175 | |||
| 38ca9efa70 | |||
| cb7dc557b0 | |||
| 33a90bc2ec | |||
| a84df8d493 | |||
| db85a7025d | |||
| 374d6aba5a | |||
| 81ec2cd27a | |||
| c1104b6443 | |||
| 83707b5080 | |||
| c8735c6fa7 | |||
| db6a0a7739 | |||
| 8aea3bcd31 | |||
| 558e106f17 | |||
| 259970a317 | |||
|  | df116253ff | ||
|  | 11b41b18f1 | ||
|  | 4e10024bc8 | ||
|  | 22115af70c | ||
|  | 1704b2c37b | ||
|  | 9f78bbe8c3 | ||
|  | 72aae5c439 | ||
|  | d70f19adcd | ||
|  | d366d7d922 | ||
|  | cabed052a1 | ||
|  | 18c1c6cc15 | ||
|  | 0e95d8c1d2 | ||
| b0e88370b1 | |||
| cbc3983714 | |||
| 0eb650ff50 | |||
|  | 3ff7d7c178 | ||
|  | e82bc1161c | ||
| 3172934f4e | |||
| 802a5474e7 | |||
| a436683e00 | |||
| 3ab40e515a | |||
| abdcb07492 | |||
|  | ce46bafa60 | ||
|  | 9bce971af0 | ||
| 045688f123 | |||
| f02aa38051 | |||
| 7694dd8242 | |||
| 64baad1a36 | |||
| b6e61961f7 | |||
| 42f4f2e741 | |||
|  | 4e02f7e03a | ||
|  | 7789d2b1ab | ||
| d62c7bf447 | |||
| 7970efd5d0 | |||
| dde937a6cd | |||
|  | 2b3c4b5f03 | ||
|  | 1258751c10 | ||
| a7ae47485c | |||
| f07fbd89a9 | |||
| 8d37c0ebf9 | |||
| 51736166a4 | |||
| dcc726ad77 | |||
|  | 6f50adc782 | ||
|  | c37f25a874 | ||
|  | 78c9cbd686 | ||
| eda15da1a9 | |||
| 02cecaed68 | |||
| ba30dfe7af | |||
|  | ee0bd67011 | ||
|  | 4d8f2bfe74 | ||
| 6b38aebb5b | |||
| 5f5a60eb29 | |||
| 1684075a9c | |||
| 4e932a09fd | |||
|  | fe10292885 | ||
|  | c284a4b394 | ||
|  | 00c907ece0 | ||
| 3b7cc67690 | |||
| 10c2414204 | |||
| 53a6f02212 | |||
|  | c588346c69 | ||
|  | 391b52b23a | ||
| c9ddb770e1 | |||
| 6fe5b71e49 | |||
| e35c2f4c45 | |||
| d8b1f7e3e4 | |||
| f3f08353ae | |||
|  | a16cd349cc | ||
|  | 867aef5f50 | ||
| 06364c973b | |||
| 7aa7e382a8 | |||
| ddc2343842 | |||
| e9e73df74d | |||
| 4fd5498f1e | |||
| 5b3f6f6f5d | |||
| cd1bfc3287 | |||
| bf0d6108a1 | |||
|  | 05684b5d2a | ||
|  | 9ccc971a38 | ||
|  | ec1e5097f7 | ||
| b80aaee82c | |||
| b7a3548a47 | |||
| 333d076f6e | |||
|  | e04a4d184e | ||
|  | 6d88aacee0 | ||
| f3b9c25a33 | |||
| 2e72fb7df8 | |||
| cf9614f857 | |||
| 8fa7a486fd | |||
| dd9cff155e | |||
| 101bc8359e | |||
| e405dcb06a | |||
| 458cedb42f | |||
| b0c884d210 | |||
| 3f38072356 | |||
| 3167ad09c4 | |||
| df44cf308f | |||
| 57b79b4f0e | |||
|  | a8d3147ac9 | ||
|  | 550a2f796b | ||
| 25d21ef884 | |||
| ce721696fa | |||
|  | 41207394e5 | ||
|  | 14745366be | ||
| cade1cc1b9 | |||
| 8c0e43d9f7 | |||
| d44034c1db | |||
| 56b8b82fc2 | |||
|  | 31bc287207 | ||
|  | bb8986c98d | ||
| 76cef5fc05 | |||
| 94a7b76157 | |||
| 74dd845b13 | |||
| 58adaa3c59 | |||
|  | fed8f82ff0 | ||
|  | cdc06bd733 | ||
|  | 6e08ff6482 | ||
|  | a50849affc | ||
|  | 161b5b5be4 | ||
|  | 6d3b1e9cbb | ||
| fa783cda84 | |||
| e8629b9ced | |||
|  | 384b1a3d54 | ||
|  | 16f3cd5d30 | ||
| 2cd68b93bf | |||
| 5f409dfdf7 | |||
|  | 1ebe39b60a | ||
|  | 4d1a58b8c7 | ||
| d853cb8409 | |||
| 7a6fffbf21 | |||
| de085053b8 | |||
|  | 4535677c93 | 
| @@ -11,16 +11,16 @@ steps: | ||||
|   - name: dockerconfig | ||||
|     path: /root/.docker | ||||
|   commands: | ||||
|   - docker build -t harbor.picaiba.com/kszny/mes-api:1.0.0-india ./ && docker push harbor.picaiba.com/kszny/mes-api:1.0.0-india | ||||
|   - docker build -t harbor.picaiba.com/kszny/mes-api:1.0.0-cigs4 ./ && docker push harbor.picaiba.com/kszny/mes-api:1.0.0-cigs4 | ||||
|  | ||||
| - name: deploy | ||||
|   image: harbor.picaiba.com/tools/kubectl | ||||
|   commands: | ||||
|   - echo "172.27.0.20 lb.kubesphere.local" >> /etc/hosts | ||||
|   - sleep 1 | ||||
|   - kubectl scale --replicas=0 deployment/mes-api -n mes-india | ||||
|   - kubectl scale --replicas=0 deployment/mes-api -n mes-cigs4 | ||||
|   - sleep 3 | ||||
|   - kubectl scale --replicas=1 deployment/mes-api -n mes-india | ||||
|   - kubectl scale --replicas=1 deployment/mes-api -n mes-cigs4 | ||||
|   depends_on: | ||||
|   - build | ||||
|  | ||||
| @@ -34,6 +34,6 @@ volumes: | ||||
|      | ||||
| trigger: | ||||
|   branch: | ||||
|   - porject/yd-monitor | ||||
|   - master | ||||
|   event: | ||||
|   - push | ||||
|   | ||||
| @@ -49,7 +49,7 @@ ENV TZ="Asia/Shanghai" | ||||
| RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone | ||||
| # 定义一些环境变量,方便环境变量传参 | ||||
| ENV JVM_OPTS="" | ||||
| ENV JAVA_OPTS="-Dspring.profiles.active=dev" | ||||
| ENV JAVA_OPTS="" | ||||
| # 指定暴露的端口,起到说明的作用,不指定也会暴露对应端口 | ||||
| EXPOSE 8080 | ||||
| # 启动 jar 的命令 | ||||
|   | ||||
| @@ -27,3 +27,10 @@ | ||||
| - MySQL8.0 | ||||
| - redis6.0+ | ||||
| <br> | ||||
|  | ||||
|  | ||||
| **切换到现场环境** | ||||
| - gateway 下的 application.yml 改redis地址 改成10.0.1.249那个 | ||||
| - gateway 下的 application-dev.yml 选用 “MySQL-local” 和 “camline系统 - local” 这两个  | ||||
| - packaging 下的 KukaJoinThread 要把 三个启动线程放开(kukaStep1.scheduleAtFixedRate、kukaStep2.scheduleAtFixedRate、kukaStep3.scheduleAtFixedRate) | ||||
|   <br> | ||||
							
								
								
									
										5
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								pom.xml
									
									
									
									
									
								
							| @@ -38,7 +38,10 @@ | ||||
|         <junit.version>4.13.2</junit.version> | ||||
|         <jedis.version>4.2.2</jedis.version> | ||||
|         <druid.version>1.2.9</druid.version> | ||||
|         <mybatisplus.version>3.5.1</mybatisplus.version> | ||||
|  | ||||
| <!--        <mybatisplus.version>3.5.1</mybatisplus.version>--> | ||||
|         <mybatisplus.version>3.5.3</mybatisplus.version> | ||||
|  | ||||
|         <sqlserver.version>4.0</sqlserver.version> | ||||
|         <oracle.version>11.2.0.3</oracle.version> | ||||
|         <commons.lang.version>3.12.0</commons.lang.version> | ||||
|   | ||||
| @@ -43,6 +43,11 @@ | ||||
|             <artifactId>ym-common</artifactId> | ||||
|             <version>1.0-SNAPSHOT</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.alibaba</groupId> | ||||
|             <artifactId>fastjson</artifactId> | ||||
|             <version>1.2.75</version> | ||||
|         </dependency> | ||||
|  | ||||
|     </dependencies> | ||||
|  | ||||
|   | ||||
							
								
								
									
										167
									
								
								ym-admin/src/main/java/com/cnbm/admin/base/BaseSupport.java
									
									
									
									
									
										Normal dosya
									
								
							
							
						
						
									
										167
									
								
								ym-admin/src/main/java/com/cnbm/admin/base/BaseSupport.java
									
									
									
									
									
										Normal dosya
									
								
							| @@ -0,0 +1,167 @@ | ||||
| /* | ||||
|  * Copyright (c) 2018. | ||||
|  * http://www.ulabcare.com | ||||
|  */ | ||||
|  | ||||
| package com.cnbm.admin.base; | ||||
|  | ||||
| import com.alibaba.fastjson.JSON; | ||||
| import com.cnbm.admin.entity.LoginUser; | ||||
| import com.cnbm.admin.enums.WhetherEnum; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.springframework.beans.BeanUtils; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.web.context.request.RequestContextHolder; | ||||
| import org.springframework.web.context.request.ServletRequestAttributes; | ||||
|  | ||||
| import javax.servlet.http.HttpServletRequest; | ||||
| import javax.servlet.http.HttpServletResponse; | ||||
| import javax.servlet.http.HttpSession; | ||||
| import java.io.Serializable; | ||||
| import java.time.LocalDateTime; | ||||
|  | ||||
| /** | ||||
|  * 接口支持基类 | ||||
|  * | ||||
|  * @author jiff | ||||
|  * @date 2018/11/1 | ||||
|  * @since 1.0 | ||||
|  */ | ||||
| @Service | ||||
| public class BaseSupport { | ||||
|  | ||||
|     protected LoginUser getLoginUser() { | ||||
|         // 后续完善拦截器再使用该方式 | ||||
| //        LoginUser loginUser = loginUserHolder.get(); | ||||
| //        if (loginUser != null) { | ||||
| //            return loginUser; | ||||
| //        } | ||||
|         HttpSession session = getHttpServletRequest().getSession(false); | ||||
|         LoginUser loginUser = null; | ||||
|         if (session != null) { | ||||
|             String loginUserJson = (String) session.getAttribute(LoginUser.HTTP_HEADER_NAME); | ||||
|             if (StringUtils.isNotBlank(loginUserJson)) { | ||||
|                 loginUser = JSON.parseObject(loginUserJson, LoginUser.class); | ||||
|                 return loginUser; | ||||
|             } | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取当前http请求对象 | ||||
|      * | ||||
|      * @return | ||||
|      */ | ||||
|     protected HttpServletRequest getHttpServletRequest() { | ||||
|         return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取当前http响应对象 | ||||
|      * | ||||
|      * @return | ||||
|      */ | ||||
|     protected HttpServletResponse getHttpServletResponse() { | ||||
|         return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); | ||||
|     } | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * 设置公共字段值,一般用于创建新记录,包含以下字段: | ||||
|      * | ||||
|      * <p> | ||||
|      * {@link CommonField#enabled}<br> | ||||
|      * {@link CommonField#valid}<br> | ||||
|      * {@link CommonField#creatorId}<br> | ||||
|      * {@link CommonField#creatorName}<br> | ||||
|      * {@link CommonField#createTime}<br> | ||||
|      * {@link CommonField#updaterId}<br> | ||||
|      * {@link CommonField#updaterName}<br> | ||||
|      * {@link CommonField#updateTime}<br> | ||||
|      * </p> | ||||
|      * | ||||
|      * @param t                需要设置的对象 | ||||
|      * @param ignoreProperties 忽略的字段 | ||||
|      * @param <T> | ||||
|      */ | ||||
|     public <T extends Serializable> T setCommonField(T t, String... ignoreProperties) { | ||||
|  | ||||
|         CommonField commonField = CommonField.builder() | ||||
|                 .enabled(WhetherEnum.YES.getValue()) | ||||
|                 .valid(WhetherEnum.YES.getValue()) | ||||
|                 .createTime(LocalDateTime.now()) | ||||
|                 .creatorId(getLoginUser().getSysUserEntity().getId()) | ||||
|                 .creatorName(getLoginUser().getUsername()) | ||||
|                 .updateTime(LocalDateTime.now()) | ||||
|                 .updaterId(getLoginUser().getSysUserEntity().getId()) | ||||
|                 .updaterName(getLoginUser().getUsername()) | ||||
|                 .build(); | ||||
|         BeanUtils.copyProperties(commonField, t, ignoreProperties); | ||||
|         return t; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 设置更新的公共字段值,一般用于更新记录,包含以下字段: | ||||
|      * | ||||
|      * <p> | ||||
|      * {@link CommonField#updaterId}<br> | ||||
|      * {@link CommonField#updaterName}<br> | ||||
|      * {@link CommonField#updateTime}<br> | ||||
|      * </p> | ||||
|      * | ||||
|      * @param t   需要设置的对象 | ||||
|      * @param <T> | ||||
|      */ | ||||
|     public <T extends Serializable> T setUpdateCommonField(T t) { | ||||
|         CommonField commonField = CommonField.builder() | ||||
|                 .updaterId(getLoginUser().getSysUserEntity().getId()) | ||||
|                 .updaterName(getLoginUser().getUsername()) | ||||
|                 .updateTime(LocalDateTime.now()) | ||||
|                 .build(); | ||||
|         BeanUtils.copyProperties(commonField, t, "enabled", "valid"); | ||||
|         return t; | ||||
|     } | ||||
|  | ||||
|     @Data | ||||
|     @Builder | ||||
|     private static class CommonField implements Serializable { | ||||
|         /** | ||||
|          * 启用状态:0 、停用,1、启用 | ||||
|          */ | ||||
|         private Integer enabled; | ||||
|         /** | ||||
|          * 删除标志,是否有效:1 可用 0不可用 | ||||
|          */ | ||||
|         private Integer valid; | ||||
|  | ||||
|         /** | ||||
|          * 创建人 | ||||
|          */ | ||||
|         private Long creatorId; | ||||
|         /** | ||||
|          * 创建人 | ||||
|          */ | ||||
|         private String creatorName; | ||||
|         /** | ||||
|          * 创建时间 | ||||
|          */ | ||||
|         private LocalDateTime createTime; | ||||
|  | ||||
|  | ||||
|         /** | ||||
|          * 更新人 | ||||
|          */ | ||||
|         private Long updaterId; | ||||
|         /** | ||||
|          * 更新人 | ||||
|          */ | ||||
|         private String updaterName; | ||||
|         /** | ||||
|          * 更新时间 | ||||
|          */ | ||||
|         private LocalDateTime updateTime; | ||||
|     } | ||||
| } | ||||
| @@ -72,8 +72,14 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { | ||||
|                         "/swagger-ui/**", | ||||
|                         "/webjars/**", | ||||
|                         "/websocket/**", | ||||
|                         "/test/**", | ||||
|                         "/**/expert", | ||||
|                         "/captcha", | ||||
|                         "druid/**").anonymous() | ||||
|                         "druid/**", | ||||
|                         "/packing/woPackagingBox/page", | ||||
|                         "/packing/printModel/page" | ||||
|  | ||||
|                 ).anonymous() | ||||
| //                .antMatchers("/testCors").hasAuthority("system:dept:list222") | ||||
|                 // 除上面外的所有请求全部需要鉴权认证 | ||||
|                 .anyRequest() | ||||
|   | ||||
| @@ -61,7 +61,7 @@ public class SysLogLoginController { | ||||
|     public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception { | ||||
|         List<SysLogLoginDTO> list = sysLogLoginService.list(params); | ||||
|  | ||||
|         ExcelUtils.exportExcelToTarget(response, null, list, SysLogLoginExcel.class); | ||||
|         ExcelUtils.exportExcelToTarget(response, "登入登出日志导出", list, SysLogLoginExcel.class); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -46,7 +46,6 @@ public class SysLogOperationController { | ||||
|     }) | ||||
|     public Result<PageData<SysLogOperationDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){ | ||||
|         PageData<SysLogOperationDTO> page = sysLogOperationService.page(params); | ||||
|  | ||||
|         return new Result<PageData<SysLogOperationDTO>>().ok(page); | ||||
|     } | ||||
|  | ||||
| @@ -56,7 +55,7 @@ public class SysLogOperationController { | ||||
|     public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception { | ||||
|         List<SysLogOperationDTO> list = sysLogOperationService.list(params); | ||||
|  | ||||
|         ExcelUtils.exportExcelToTarget(response, null, list, SysLogOperationExcel.class); | ||||
|         ExcelUtils.exportExcelToTarget(response, "操作日志导出", list, SysLogOperationExcel.class); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -24,6 +24,8 @@ public class LoginUser implements UserDetails{ | ||||
|  | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     public static final String HTTP_HEADER_NAME = "loginUser"; | ||||
|  | ||||
|     private SysUserEntity sysUserEntity; | ||||
|  | ||||
|     private List<String> permissions; | ||||
|   | ||||
| @@ -7,8 +7,8 @@ import java.util.Date; | ||||
|  | ||||
| @Data | ||||
| public class SysLogLoginExcel { | ||||
|     @Excel(name = "用户操作") | ||||
|     private String operation; | ||||
|     @Excel(name = "用户操作", replace = {"登入_0", "登出_1"}) | ||||
|     private Integer operation; | ||||
|     @Excel(name = "状态", replace = {"失败_0", "成功_1", "账号已锁定_1"}) | ||||
|     private Integer status; | ||||
|     @Excel(name = "User-Agent") | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| package com.cnbm.admin.service.impl; | ||||
|  | ||||
| import com.alibaba.fastjson.JSON; | ||||
| import com.cnbm.admin.entity.LoginUser; | ||||
| import com.cnbm.admin.entity.SysLogLoginEntity; | ||||
| import com.cnbm.admin.enums.LoginOperationEnum; | ||||
| @@ -9,7 +10,6 @@ import com.cnbm.admin.service.CaptchaService; | ||||
| import com.cnbm.admin.service.SysLogLoginService; | ||||
| import com.cnbm.admin.utils.JwtUtil; | ||||
| import com.cnbm.admin.service.LoginService; | ||||
| import com.cnbm.admin.utils.ResponseResult; | ||||
| import com.cnbm.common.exception.ErrorCode; | ||||
| import com.cnbm.common.utils.IpUtils; | ||||
| import com.cnbm.common.utils.Result; | ||||
| @@ -22,8 +22,11 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticatio | ||||
| import org.springframework.security.core.Authentication; | ||||
| import org.springframework.security.core.context.SecurityContextHolder; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.web.context.request.RequestContextHolder; | ||||
| import org.springframework.web.context.request.ServletRequestAttributes; | ||||
|  | ||||
| import javax.servlet.http.HttpServletRequest; | ||||
| import javax.servlet.http.HttpSession; | ||||
| import java.util.Date; | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
| @@ -53,10 +56,10 @@ public class LoginServiceImpl implements LoginService { | ||||
|     @Override | ||||
|     public Result login(HttpServletRequest request, LoginParam loginParam) { | ||||
|         //验证码是否正确 | ||||
|         boolean flag = captchaService.validate(loginParam.getUuid(), loginParam.getCaptcha()); | ||||
|         if(!flag){ | ||||
|             return new Result<>().error(ErrorCode.CAPTCHA_ERROR, "验证码错误"); | ||||
|         } | ||||
| //        boolean flag = captchaService.validate(loginParam.getUuid(), loginParam.getCaptcha()); | ||||
| //        if(!flag){ | ||||
| //            return new Result<>().error(ErrorCode.CAPTCHA_ERROR, "验证码错误"); | ||||
| //        } | ||||
|         UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginParam.getUsername(),loginParam.getPassword()); | ||||
|         Authentication authenticate = authenticationManager.authenticate(authenticationToken); | ||||
|         //登录日志 | ||||
| @@ -81,6 +84,11 @@ public class LoginServiceImpl implements LoginService { | ||||
|         map.put("token",jwt); | ||||
|         //把完整的用户信息存入redis  userid作为key | ||||
|         redisTemplate.opsForValue().set("login:"+userid,loginUser,1, TimeUnit.DAYS); | ||||
|  | ||||
|         //当前登录用户信息存入session中 | ||||
|         HttpSession session = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getSession(); | ||||
|         session.setAttribute(loginUser.HTTP_HEADER_NAME, JSON.toJSONString(loginUser)); | ||||
|  | ||||
|         //登录成功 | ||||
|         log.setStatus(LoginStatusEnum.SUCCESS.value()); | ||||
|         log.setCreator(loginUser.getSysUserEntity().getId()); | ||||
|   | ||||
| @@ -9,6 +9,7 @@ import com.cnbm.admin.entity.SysRoleEntity; | ||||
| import com.cnbm.admin.entity.SysUserEntity; | ||||
| import com.cnbm.admin.enums.SuperAdminEnum; | ||||
| import com.cnbm.admin.service.*; | ||||
| import com.cnbm.admin.utils.BaseSupportUtils; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.service.impl.BaseServiceImpl; | ||||
| @@ -20,6 +21,7 @@ import org.springframework.security.core.context.SecurityContextHolder; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
|  | ||||
| import java.sql.Timestamp; | ||||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| @@ -89,6 +91,8 @@ public class SysRoleServiceImpl extends BaseServiceImpl<SysRoleDao, SysRoleEntit | ||||
|         SysRoleEntity entity = ConvertUtils.sourceToTarget(dto, SysRoleEntity.class); | ||||
|  | ||||
|         //保存角色 | ||||
|         Timestamp timestamp = new Timestamp(System.currentTimeMillis()); | ||||
|         entity.setCreateDate(timestamp); | ||||
|         insert(entity); | ||||
|  | ||||
|         //保存角色菜单关系 | ||||
|   | ||||
| @@ -9,6 +9,7 @@ import com.cnbm.admin.enums.SuperAdminEnum; | ||||
| import com.cnbm.admin.service.SysDeptService; | ||||
| import com.cnbm.admin.service.SysRoleUserService; | ||||
| import com.cnbm.admin.service.SysUserService; | ||||
| import com.cnbm.admin.utils.BaseSupportUtils; | ||||
| import com.cnbm.admin.utils.PasswordUtils; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.page.PageData; | ||||
| @@ -21,6 +22,7 @@ import org.springframework.security.core.context.SecurityContextHolder; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
|  | ||||
| import java.sql.Timestamp; | ||||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| @@ -98,6 +100,8 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUserDao, SysUserEntit | ||||
|  | ||||
|         //保存用户 | ||||
|         entity.setSuperAdmin(SuperAdminEnum.NO.value()); | ||||
|         Timestamp timestamp = new Timestamp(System.currentTimeMillis()); | ||||
|         entity.setCreateDate(timestamp); | ||||
|         insert(entity); | ||||
|  | ||||
|         //保存角色用户关系 | ||||
|   | ||||
| @@ -58,7 +58,7 @@ public abstract class BaseSupportUtils { | ||||
|      */ | ||||
|     public static <T extends Serializable> T setCommonField(T t, String... ignoreProperties) { | ||||
|         CommonField commonField = CommonField.builder() | ||||
|                 .enabled(WhetherEnum.YES.getValue()) | ||||
| //                .enabled(WhetherEnum.YES.getValue()) | ||||
|                 .valid(WhetherEnum.YES.getValue()) | ||||
|                 .createTime(LocalDateTime.now()) | ||||
|                 .creatorId(getLoginUser().getId()) | ||||
| @@ -89,7 +89,7 @@ public abstract class BaseSupportUtils { | ||||
|                 .updaterName(getLoginUser().getUsername()) | ||||
|                 .updateTime(LocalDateTime.now()) | ||||
|                 .build(); | ||||
|         BeanUtils.copyProperties(commonField, t, "enabled", "valid"); | ||||
|         BeanUtils.copyProperties(commonField, t,  "valid"); | ||||
|         return t; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -82,9 +82,11 @@ public class JwtUtil { | ||||
|  | ||||
|     public static void main(String[] args) throws Exception { | ||||
| //        String jwt = createJWT("123"); | ||||
|         Claims claims = parseJWT("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI5OWNhNGJhMjg5ZjU0OTVjODE5YTM0N2ExZmNlZjc0YSIsInN1YiI6IjEyMyIsImlzcyI6IndoeSIsImlhdCI6MTY1NDc1OTg5NiwiZXhwIjoxNjU0NzYzNDk2fQ.CTgS6yQjfXSGPJUTu-_rqjkh_KB_F9SzPThFfnvB5yg"); | ||||
|         Claims claims = parseJWT("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJkNTQxODQ5NjNjMWM0NzgzOTA0ZDAwZGI1ZmNkNWU3NiIsInN1YiI6IjEwNjcyNDY4NzU4MDAwMDAwMDEiLCJpc3MiOiJ3aHkiLCJpYXQiOjE2Nzg5MzE1MjAsImV4cCI6MTY3ODkzNTEyMH0.2we9FhhFU2Qvx2fvywqmA8A1qs0mbdXvr8T2CjJUz7o"); | ||||
|         String subject = claims.getSubject(); | ||||
|         System.out.println(subject); | ||||
|  | ||||
|         System.out.println(claims.toString()); | ||||
| //        System.out.println(claims); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -23,7 +23,7 @@ | ||||
| 	</select> | ||||
|  | ||||
| 	<select id="getIdAndPidList" resultType="com.cnbm.admin.entity.SysDeptEntity"> | ||||
| 		select t1.id, t1.pid from sys_dept t1  AND t1.valid = 1 | ||||
| 		select t1.id, t1.pid from sys_dept t1 where t1.valid = 1 | ||||
| 	</select> | ||||
|  | ||||
| 	<select id="getSubDeptIdList" resultType="long"> | ||||
|   | ||||
| @@ -1,7 +1,12 @@ | ||||
| spring: | ||||
|   datasource: | ||||
|       #MySQL | ||||
|       driver-class-name: com.mysql.cj.jdbc.Driver | ||||
|       #MySQL-local | ||||
| #      url: jdbc:mysql://10.0.1.249:3306/mt_cigs4?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true | ||||
| #      username: cigs4 | ||||
| #      password: 1qazxsw2 | ||||
|  | ||||
|       #MySQL-remote | ||||
|       url: jdbc:mysql://mysql.picaiba.com:30307/mt_cigs4?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true | ||||
|       username: root | ||||
|       password: 1qaz@WSX3edc$RFV | ||||
| @@ -54,13 +59,22 @@ spring: | ||||
| ##多数据源的配置,需要引用renren-dynamic-datasource | ||||
| dynamic: | ||||
|   datasource: | ||||
|     slave1: | ||||
|       driver-class-name: com.mysql.cj.jdbc.Driver | ||||
|       url: jdbc:mysql://mysql.picaiba.com:30307/mt_cigs4?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true | ||||
|       username: root | ||||
|       password: 1qaz@WSX3edc$RFV | ||||
|     slave2: | ||||
| #    ## 本mes系统 | ||||
| #    slave1: | ||||
| #      driver-class-name: com.mysql.cj.jdbc.Driver | ||||
| #      url: jdbc:mysql://mysql.picaiba.com:30307/mt_cigs4?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true | ||||
| #      username: root | ||||
| #      password: 1qaz@WSX3edc$RFV | ||||
|     ## camline系统 - remote | ||||
|     camline: | ||||
|       driver-class-name: com.mysql.cj.jdbc.Driver | ||||
|       url: jdbc:mysql://mysql.picaiba.com:30307/mt_cigs4?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true | ||||
|       username: root | ||||
|       password: 1qaz@WSX3edc$RFV | ||||
| # | ||||
|     #camline系统 - local | ||||
| #    camline: | ||||
| #      driver-class-name: com.mysql.cj.jdbc.Driver | ||||
| #      url: jdbc:mysql://10.0.1.23:3306/synapse?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true | ||||
| #      username: offline_data | ||||
| #      password: tpvmfab4 | ||||
| @@ -2,7 +2,7 @@ spring: | ||||
|   datasource: | ||||
|     #MySQL | ||||
|     driver-class-name: com.mysql.cj.jdbc.Driver | ||||
|     url: jdbc:mysql://mysql.picaiba.com:30307/ym_pass?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true | ||||
|     url: jdbc:mysql://mysql.picaiba.com:30307/mt_cigs4?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true | ||||
|     username: root | ||||
|     password: 1qaz@WSX3edc$RFV | ||||
|     #      #Oracle | ||||
|   | ||||
| @@ -33,9 +33,11 @@ spring: | ||||
|       enabled: true | ||||
|   redis: | ||||
|     database: 6 | ||||
|     host: redis.picaiba.com | ||||
|     port: 6380 | ||||
|     password: '@WSXcde3'   # 密码(默认为空) | ||||
|     host: 127.0.0.1 | ||||
|     #host: 10.0.1.249 | ||||
|     #host: 192.168.0.102 | ||||
|     port: 6379 | ||||
|     password: ''   # 密码(默认为空) | ||||
|     timeout: 6000ms  # 连接超时时长(毫秒) | ||||
|     jedis: | ||||
|       pool: | ||||
|   | ||||
							
								
								
									
										669
									
								
								ym-gateway/src/main/resources/logback.xml
									
									
									
									
									
										Normal dosya
									
								
							
							
						
						
									
										669
									
								
								ym-gateway/src/main/resources/logback.xml
									
									
									
									
									
										Normal dosya
									
								
							| @@ -0,0 +1,669 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 --> | ||||
| <!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true --> | ||||
| <!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。 | ||||
|                  当scan为true时,此属性生效。默认的时间间隔为1分钟。 --> | ||||
| <!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 --> | ||||
| <configuration  scan="true" scanPeriod="10 seconds"> | ||||
|     <contextName>logback-spring</contextName> | ||||
|  | ||||
|     <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 --> | ||||
|  | ||||
| <!--    <property name="logging.pathwork" value="C:/qgs_logger/work" />--> | ||||
| <!--    <property name="logging.pathopc" value="C:/qgs_logger/opc" />--> | ||||
| <!--    <property name="logging.pathmq" value="C:/qgs_logger/mq" />--> | ||||
| <!--    <property name="logging.eqlog" value="C:/qgs_logger/s7" />--> | ||||
|  | ||||
|     <property name="logging.eqlog" value="/var/log/logger/EQCommunicationLog" /> | ||||
|     <property name="logging.eventlog" value="/var/log/logger/EventLog" /> | ||||
|     <property name="logging.packing" value="/var/log/logger/Packing" /> | ||||
|     <property name="logging.pathwork" value="/var/log/logger/Working" /> | ||||
|  | ||||
|  | ||||
|     <!--0. 日志格式和颜色渲染 --> | ||||
|     <!-- 彩色日志依赖的渲染类 --> | ||||
|     <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> | ||||
|     <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> | ||||
|     <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> | ||||
|     <!-- 彩色日志格式 --> | ||||
|     <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> | ||||
|     <!--1. 输出到控制台--> | ||||
|     <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> | ||||
|  | ||||
|         <encoder> | ||||
|             <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> | ||||
|             <!-- 设置字符集 --> | ||||
|             <charset>UTF-8</charset> | ||||
|         </encoder> | ||||
|  | ||||
|  | ||||
|         <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--> | ||||
|         <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> | ||||
|             <level>info</level> | ||||
|         </filter> | ||||
|  | ||||
|     </appender> | ||||
|  | ||||
|     <!--2. 输出到文档--> | ||||
|     <!-- 2.1 level为 DEBUG 日志,时间滚动输出  --> | ||||
|     <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.pathwork}/debug/work-log-debug.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> <!-- 设置字符集 --> | ||||
|         </encoder> | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.pathwork}/work-log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|  | ||||
|         <!-- 此日志文档只记录debug级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>debug</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|     <appender name="EQ_COMM_LOG_DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.eqlog}/debug/s7-log-debug.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> <!-- 设置字符集 --> | ||||
|         </encoder> | ||||
|  | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.eqlog}/s7-eq-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|  | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|         <!-- 此日志文档只记录debug级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>debug</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|     <appender name="PACKING_LOG_DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.packing}/debug/packing-log-debug.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> <!-- 设置字符集 --> | ||||
|         </encoder> | ||||
|  | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.packing}/packing-log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|  | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|         <!-- 此日志文档只记录debug级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>debug</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|  | ||||
|  | ||||
|     <!-- 2.2 level为 INFO 日志,时间滚动输出  --> | ||||
|     <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.pathwork}/info/work-log-info.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> | ||||
|         </encoder> | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.pathwork}/work-log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|         <!-- 此日志文档只记录info级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>info</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|     <appender name="EQ_COMM_LOG_INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.eqlog}/info/s7-eq-info.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> | ||||
|         </encoder> | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.eqlog}/s7-eq-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|  | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|         <!-- 此日志文档只记录info级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>info</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|     <appender name="PACKING_LOG_INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.packing}/info/packing-log-info.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> | ||||
|         </encoder> | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.packing}/packing-log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|  | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|         <!-- 此日志文档只记录info级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>info</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|     <!-- 2线  开始 --> | ||||
|     <appender name="EVENT1_APPENDER_LINE2" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.eventlog}/line2/event1/kuka-event1-log-info.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> | ||||
|         </encoder> | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.eventlog}/line2/kuka-event1-log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|  | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|         <!-- 此日志文档只记录info级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>info</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|     <appender name="EVENT2_APPENDER_LINE2" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.eventlog}/line2/event2/kuka-event2-log-info.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> | ||||
|         </encoder> | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.eventlog}/line2/kuka-event2-log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|  | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|         <!-- 此日志文档只记录info级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>info</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|     <appender name="EVENT3_APPENDER_LINE2" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.eventlog}/line2/event3/kuka-event3-log-info.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> | ||||
|         </encoder> | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.eventlog}/line2/kuka-event3-log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|  | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|         <!-- 此日志文档只记录info级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>info</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|     <!-- 2线  结束 --> | ||||
|  | ||||
|     <!-- 1线  开始 --> | ||||
|     <appender name="EVENT1_APPENDER_LINE1" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.eventlog}/line1/event1/kuka-event1-log-info.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> | ||||
|         </encoder> | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.eventlog}/line1/kuka-event1-log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|  | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|         <!-- 此日志文档只记录info级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>info</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|     <appender name="EVENT2_APPENDER_LINE1" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.eventlog}/line1/event2/kuka-event2-log-info.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> | ||||
|         </encoder> | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.eventlog}/line1/kuka-event2-log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|  | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|         <!-- 此日志文档只记录info级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>info</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|     <appender name="EVENT3_APPENDER_LINE1" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.eventlog}/line1/event3/kuka-event3-log-info.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> | ||||
|         </encoder> | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.eventlog}/line1/kuka-event3-log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|  | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|         <!-- 此日志文档只记录info级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>info</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|     <!-- 1线  结束 --> | ||||
|  | ||||
|     <!-- event4  开始 --> | ||||
|     <appender name="EVENT4_APPENDER_LINE1" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.eventlog}/line1/event4/kuka-ngEvent-log-info.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> | ||||
|         </encoder> | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.eventlog}/line1/kuka-ngEvent-log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|  | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|         <!-- 此日志文档只记录info级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>info</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|     <appender name="EVENT4_APPENDER_LINE2" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.eventlog}/line2/event4/kuka-ngEvent-log-info.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> | ||||
|         </encoder> | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.eventlog}/line2/kuka-ngEvent-log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|  | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|         <!-- 此日志文档只记录info级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>info</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|     <!-- event4  结束 --> | ||||
|  | ||||
|     <!-- 2.3 level为 WARN 日志,时间滚动输出  --> | ||||
|     <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.pathwork}/warn/work-log-warn.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> <!-- 此处设置字符集 --> | ||||
|         </encoder> | ||||
|         <!-- 日志记录器的滚动策略,按日期,按大小记录 --> | ||||
| <!--        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">--> | ||||
| <!--            <fileNamePattern>${logging.pathwork}/work-log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>--> | ||||
| <!--            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">--> | ||||
| <!--                <maxFileSize>100MB</maxFileSize>--> | ||||
| <!--            </timeBasedFileNamingAndTriggeringPolicy>--> | ||||
| <!--            <!–日志文档保留天数–>--> | ||||
| <!--            <maxHistory>999</maxHistory>--> | ||||
| <!--        </rollingPolicy>--> | ||||
|  | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.pathwork}/work-log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|         <!-- 此日志文档只记录warn级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>warn</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|     <appender name="EQ_COMM_LOG_WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.eqlog}/warn/s7-log-warn.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> <!-- 此处设置字符集 --> | ||||
|         </encoder> | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.eqlog}/s7-log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|  | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|         <!-- 此日志文档只记录warn级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>warn</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|     <appender name="PACKING_LOG_WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.packing}/warn/packing-log-warn.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> <!-- 此处设置字符集 --> | ||||
|         </encoder> | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.packing}/packing-log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|  | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|         <!-- 此日志文档只记录warn级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>warn</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|  | ||||
|     <!-- 2.4 level为 ERROR 日志,时间滚动输出  --> | ||||
|     <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.pathwork}/error/work-log-error.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> <!-- 此处设置字符集 --> | ||||
|         </encoder> | ||||
|         <!-- 日志记录器的滚动策略,按日期,按大小记录 --> | ||||
| <!--        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">--> | ||||
| <!--            <fileNamePattern>${logging.pathwork}/work-log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>--> | ||||
| <!--            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">--> | ||||
| <!--                <maxFileSize>100MB</maxFileSize>--> | ||||
| <!--            </timeBasedFileNamingAndTriggeringPolicy>--> | ||||
| <!--            <!–日志文档保留天数–>--> | ||||
| <!--            <maxHistory>999</maxHistory>--> | ||||
| <!--        </rollingPolicy>--> | ||||
|  | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.pathwork}/work-log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|  | ||||
|         <!-- 此日志文档只记录ERROR级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>ERROR</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|     <appender name="EQ_COMM_LOG_ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.eqlog}/error/s7-log-error.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> <!-- 此处设置字符集 --> | ||||
|         </encoder> | ||||
|  | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.eqlog}/s7-log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|  | ||||
|         <!-- 此日志文档只记录ERROR级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>ERROR</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|     <appender name="PACKING_LOG_ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
|         <!-- 正在记录的日志文档的路径及文档名 --> | ||||
|         <file>${logging.packing}/error/packing-log-error.log</file> | ||||
|         <!--日志文档输出格式--> | ||||
|         <encoder> | ||||
|             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||||
|             <charset>UTF-8</charset> <!-- 此处设置字符集 --> | ||||
|         </encoder> | ||||
|  | ||||
|         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | ||||
|             <!-- rollover daily --> | ||||
|             <fileNamePattern>${logging.packing}/packing-log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||||
|             <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> | ||||
|             <maxFileSize>100MB</maxFileSize> | ||||
|             <maxHistory>999</maxHistory> | ||||
|             <totalSizeCap>200GB</totalSizeCap> | ||||
|         </rollingPolicy> | ||||
|  | ||||
|         <!-- 此日志文档只记录ERROR级别的 --> | ||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
|             <level>ERROR</level> | ||||
|             <onMatch>ACCEPT</onMatch> | ||||
|             <onMismatch>DENY</onMismatch> | ||||
|         </filter> | ||||
|     </appender> | ||||
|  | ||||
|     <!-- | ||||
|         <logger>用来设置某一个包或者具体的某一个类的日志打印级别、 | ||||
|         以及指定<appender>。<logger>仅有一个name属性, | ||||
|         一个可选的level和一个可选的addtivity属性。 | ||||
|         name:用来指定受此logger约束的某一个包或者具体的某一个类。 | ||||
|         level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, | ||||
|               还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 | ||||
|               如果未设置此属性,那么当前logger将会继承上级的级别。 | ||||
|         addtivity:是否向上级logger传递打印信息。默认是true。 | ||||
|         <logger name="org.springframework.web" level="info"/> | ||||
|         <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/> | ||||
|     --> | ||||
|  | ||||
|     <!-- | ||||
|         使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作: | ||||
|         第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息 | ||||
|         第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别: | ||||
|         【logging.level.org.mybatis=debug logging.level.dao=debug】 | ||||
|      --> | ||||
|  | ||||
|     <!-- | ||||
|         root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性 | ||||
|         level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, | ||||
|         不能设置为INHERITED或者同义词NULL。默认是DEBUG | ||||
|         可以包含零个或多个元素,标识这个appender将会添加到这个logger。 | ||||
|     --> | ||||
|  | ||||
|     <!-- name就是包名,这个包下的 所有logger 输出就以下配置(这里的logger只会输出代码里 你指定打印的log ) --> | ||||
|  | ||||
| <!--    <logger name="com.cnbm.pathwork" additivity="false">--> | ||||
| <!--        <appender-ref ref="WORKING_DEBUG_FILE" />--> | ||||
| <!--        <appender-ref ref="WORKING_INFO_FILE" />--> | ||||
| <!--        <appender-ref ref="WORKING_WARN_FILE" />--> | ||||
| <!--        <appender-ref ref="WORKING_ERROR_FILE" />--> | ||||
| <!--    </logger>--> | ||||
|     <logger name="com.cnbm.dispatch" additivity="false"> | ||||
|         <appender-ref ref="EQ_COMM_LOG_DEBUG_FILE" /> | ||||
|         <appender-ref ref="EQ_COMM_LOG_INFO_FILE" /> | ||||
|         <appender-ref ref="EQ_COMM_LOG_WARN_FILE" /> | ||||
|         <appender-ref ref="EQ_COMM_LOG_ERROR_FILE" /> | ||||
|     </logger> | ||||
|  | ||||
|     <!-- LINE2 开始 --> | ||||
|     <logger name="EVENT1Line2" level="INFO" additivity="false"> | ||||
|         <appender-ref ref="EVENT1_APPENDER_LINE2" /> | ||||
|     </logger> | ||||
|     <logger name="EVENT2Line2" level="INFO" additivity="false"> | ||||
|         <appender-ref ref="EVENT2_APPENDER_LINE2" /> | ||||
|     </logger> | ||||
|     <logger name="EVENT3Line2" level="INFO" additivity="false"> | ||||
|         <appender-ref ref="EVENT3_APPENDER_LINE2" /> | ||||
|     </logger> | ||||
|     <!-- LINE2 结束 --> | ||||
|  | ||||
|     <!-- LINE4NG 开始 --> | ||||
|     <logger name="EVENT4NGLine1" level="INFO" additivity="false"> | ||||
|         <appender-ref ref="EVENT4_APPENDER_LINE1" /> | ||||
|     </logger> | ||||
|     <logger name="EVENT4NGLine2" level="INFO" additivity="false"> | ||||
|         <appender-ref ref="EVENT4_APPENDER_LINE2" /> | ||||
|     </logger> | ||||
|     <!-- LINE4NG 结束 --> | ||||
|  | ||||
|     <!-- LINE1 开始 --> | ||||
|     <logger name="EVENT1Line1" level="INFO" additivity="false"> | ||||
|         <appender-ref ref="EVENT1_APPENDER_LINE1" /> | ||||
|     </logger> | ||||
|     <logger name="EVENT2Line1" level="INFO" additivity="false"> | ||||
|         <appender-ref ref="EVENT2_APPENDER_LINE1" /> | ||||
|     </logger> | ||||
|     <logger name="EVENT3Line1" level="INFO" additivity="false"> | ||||
|         <appender-ref ref="EVENT3_APPENDER_LINE1" /> | ||||
|     </logger> | ||||
|     <!-- LINE1 结束 --> | ||||
|  | ||||
|  | ||||
|     <logger name="com.cnbm.packing"  additivity="false"> | ||||
|         <appender-ref ref="PACKING_LOG_DEBUG_FILE" /> | ||||
|         <appender-ref ref="PACKING_LOG_INFO_FILE" /> | ||||
|         <appender-ref ref="PACKING_LOG_WARN_FILE" /> | ||||
|         <appender-ref ref="PACKING_LOG_ERROR_FILE" /> | ||||
|     </logger> | ||||
|  | ||||
|     <!--    work这个目录 是所有控制台信息 + 第三方jar包 输出的信息  --> | ||||
|     <root level="info"> | ||||
|         <appender-ref ref="CONSOLE" /> | ||||
|         <appender-ref ref="DEBUG_FILE" /> | ||||
|         <appender-ref ref="INFO_FILE" /> | ||||
|         <appender-ref ref="WARN_FILE" /> | ||||
|         <appender-ref ref="ERROR_FILE" /> | ||||
|     </root> | ||||
|  | ||||
|     <!-- 4.2 生产环境:输出到文档 | ||||
|     <springProfile name="pro"> | ||||
|         <root level="info"> | ||||
|             <appender-ref ref="CONSOLE" /> | ||||
|             <appender-ref ref="DEBUG_FILE" /> | ||||
|             <appender-ref ref="INFO_FILE" /> | ||||
|             <appender-ref ref="ERROR_FILE" /> | ||||
|             <appender-ref ref="WARN_FILE" /> | ||||
|         </root> | ||||
|     </springProfile> --> | ||||
| </configuration> | ||||
| @@ -19,7 +19,7 @@ public class CodeGenerator { | ||||
|  | ||||
|     @Test | ||||
|     public void test(){ | ||||
|         mybatisPlusGenerator(new String[]{"t_wo_power_level"}); | ||||
|         mybatisPlusGenerator(new String[]{"t_working_time"}); | ||||
|     } | ||||
|  | ||||
|     public static void mybatisPlusGenerator(String[] include){ | ||||
|   | ||||
| @@ -31,7 +31,7 @@ import java.util.Map; | ||||
|  * 打印标签模板表  前端控制器 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-02-20 | ||||
|  * @since  2024-01-25 | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("/code/printModel") | ||||
|   | ||||
| @@ -0,0 +1,116 @@ | ||||
| package com.cnbm.generator.code.controller; | ||||
|  | ||||
| import com.cnbm.admin.annotation.LogOperation; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.utils.ExcelUtils; | ||||
| import com.cnbm.common.utils.Result; | ||||
| import com.cnbm.common.validator.AssertUtils; | ||||
| import com.cnbm.common.validator.ValidatorUtils; | ||||
| import com.cnbm.common.validator.group.AddGroup; | ||||
| import com.cnbm.common.validator.group.DefaultGroup; | ||||
| import com.cnbm.common.validator.group.UpdateGroup; | ||||
| import com.cnbm.generator.code.dto.ProductLevelDTO; | ||||
| import com.cnbm.generator.code.excel.ProductLevelExcel; | ||||
| import com.cnbm.generator.code.service.ProductLevelServiceBiz; | ||||
| import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiImplicitParam; | ||||
| import io.swagger.annotations.ApiImplicitParams; | ||||
| import io.swagger.annotations.ApiOperation; | ||||
| import org.springframework.security.access.prepost.PreAuthorize; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
| import springfox.documentation.annotations.ApiIgnore; | ||||
|  | ||||
| import javax.servlet.http.HttpServletResponse; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * 产品等级 表  前端控制器 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-12-28 | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("/code/productLevel") | ||||
| @Api(tags="产品等级 表") | ||||
| public class ProductLevelController { | ||||
|     @Autowired | ||||
|     private ProductLevelServiceBiz productLevelService; | ||||
|  | ||||
|     @GetMapping("page") | ||||
|     @ApiOperation("分页") | ||||
|     @ApiImplicitParams({ | ||||
|         @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataTypeClass=Integer.class) , | ||||
|         @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataTypeClass=Integer.class) , | ||||
|         @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataTypeClass=String.class) , | ||||
|         @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataTypeClass=String.class) | ||||
|     }) | ||||
|     @PreAuthorize("@ex.hasAuthority('code:productLevel:page')") | ||||
|     public Result<PageData<ProductLevelDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){ | ||||
|         PageData<ProductLevelDTO> page = productLevelService.page(params); | ||||
|  | ||||
|         return new Result<PageData<ProductLevelDTO>>().ok(page); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("{id}") | ||||
|     @ApiOperation("信息") | ||||
|     @PreAuthorize("@ex.hasAuthority('code:productLevel:info')") | ||||
|     public Result<ProductLevelDTO> get(@PathVariable("id") Long id){ | ||||
|         ProductLevelDTO data = productLevelService.get(id); | ||||
|  | ||||
|         return new Result<ProductLevelDTO>().ok(data); | ||||
|     } | ||||
|  | ||||
|     @PostMapping | ||||
|     @ApiOperation("保存") | ||||
|     @LogOperation("保存") | ||||
|     @PreAuthorize("@ex.hasAuthority('code:productLevel:save')") | ||||
|     public Result<Long> save(@RequestBody ProductLevelDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); | ||||
|  | ||||
|         productLevelService.save(dto); | ||||
|  | ||||
|         return new Result<Long>().ok(dto.getId()); | ||||
|     } | ||||
|  | ||||
|     @PutMapping | ||||
|     @ApiOperation("修改") | ||||
|     @LogOperation("修改") | ||||
|     @PreAuthorize("@ex.hasAuthority('code:productLevel:update')") | ||||
|     public Result<Long> update(@RequestBody ProductLevelDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); | ||||
|  | ||||
|         productLevelService.update(dto); | ||||
|  | ||||
|         return new Result<Long>().ok(dto.getId()); | ||||
|     } | ||||
|  | ||||
|     @DeleteMapping | ||||
|     @ApiOperation("删除") | ||||
|     @LogOperation("删除") | ||||
|     @PreAuthorize("@ex.hasAuthority('code:productLevel:delete')") | ||||
|     public Result delete(@RequestBody Long[] ids){ | ||||
|         //效验数据 | ||||
|         AssertUtils.isArrayEmpty(ids, "id"); | ||||
|  | ||||
|         productLevelService.delete(ids); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("export") | ||||
|     @ApiOperation("导出") | ||||
|     @LogOperation("导出") | ||||
|     @PreAuthorize("@ex.hasAuthority('code:productLevel:export')") | ||||
|     public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception { | ||||
|         List<ProductLevelDTO> list = productLevelService.list(params); | ||||
|  | ||||
|         ExcelUtils.exportExcelToTarget(response, null, list, ProductLevelExcel.class); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,116 @@ | ||||
| package com.cnbm.generator.code.controller; | ||||
|  | ||||
| import com.cnbm.admin.annotation.LogOperation; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.utils.ExcelUtils; | ||||
| import com.cnbm.common.utils.Result; | ||||
| import com.cnbm.common.validator.AssertUtils; | ||||
| import com.cnbm.common.validator.ValidatorUtils; | ||||
| import com.cnbm.common.validator.group.AddGroup; | ||||
| import com.cnbm.common.validator.group.DefaultGroup; | ||||
| import com.cnbm.common.validator.group.UpdateGroup; | ||||
| import com.cnbm.generator.code.dto.ScenesDTO; | ||||
| import com.cnbm.generator.code.excel.ScenesExcel; | ||||
| import com.cnbm.generator.code.service.ScenesServiceBiz; | ||||
| import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiImplicitParam; | ||||
| import io.swagger.annotations.ApiImplicitParams; | ||||
| import io.swagger.annotations.ApiOperation; | ||||
| import org.springframework.security.access.prepost.PreAuthorize; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
| import springfox.documentation.annotations.ApiIgnore; | ||||
|  | ||||
| import javax.servlet.http.HttpServletResponse; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * 场景 表  前端控制器 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-12-28 | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("/code/scenes") | ||||
| @Api(tags="场景 表") | ||||
| public class ScenesController { | ||||
|     @Autowired | ||||
|     private ScenesServiceBiz scenesService; | ||||
|  | ||||
|     @GetMapping("page") | ||||
|     @ApiOperation("分页") | ||||
|     @ApiImplicitParams({ | ||||
|         @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataTypeClass=Integer.class) , | ||||
|         @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataTypeClass=Integer.class) , | ||||
|         @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataTypeClass=String.class) , | ||||
|         @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataTypeClass=String.class) | ||||
|     }) | ||||
|     @PreAuthorize("@ex.hasAuthority('code:scenes:page')") | ||||
|     public Result<PageData<ScenesDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){ | ||||
|         PageData<ScenesDTO> page = scenesService.page(params); | ||||
|  | ||||
|         return new Result<PageData<ScenesDTO>>().ok(page); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("{id}") | ||||
|     @ApiOperation("信息") | ||||
|     @PreAuthorize("@ex.hasAuthority('code:scenes:info')") | ||||
|     public Result<ScenesDTO> get(@PathVariable("id") Long id){ | ||||
|         ScenesDTO data = scenesService.get(id); | ||||
|  | ||||
|         return new Result<ScenesDTO>().ok(data); | ||||
|     } | ||||
|  | ||||
|     @PostMapping | ||||
|     @ApiOperation("保存") | ||||
|     @LogOperation("保存") | ||||
|     @PreAuthorize("@ex.hasAuthority('code:scenes:save')") | ||||
|     public Result<Long> save(@RequestBody ScenesDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); | ||||
|  | ||||
|         scenesService.save(dto); | ||||
|  | ||||
|         return new Result<Long>().ok(dto.getId()); | ||||
|     } | ||||
|  | ||||
|     @PutMapping | ||||
|     @ApiOperation("修改") | ||||
|     @LogOperation("修改") | ||||
|     @PreAuthorize("@ex.hasAuthority('code:scenes:update')") | ||||
|     public Result<Long> update(@RequestBody ScenesDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); | ||||
|  | ||||
|         scenesService.update(dto); | ||||
|  | ||||
|         return new Result<Long>().ok(dto.getId()); | ||||
|     } | ||||
|  | ||||
|     @DeleteMapping | ||||
|     @ApiOperation("删除") | ||||
|     @LogOperation("删除") | ||||
|     @PreAuthorize("@ex.hasAuthority('code:scenes:delete')") | ||||
|     public Result delete(@RequestBody Long[] ids){ | ||||
|         //效验数据 | ||||
|         AssertUtils.isArrayEmpty(ids, "id"); | ||||
|  | ||||
|         scenesService.delete(ids); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("export") | ||||
|     @ApiOperation("导出") | ||||
|     @LogOperation("导出") | ||||
|     @PreAuthorize("@ex.hasAuthority('code:scenes:export')") | ||||
|     public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception { | ||||
|         List<ScenesDTO> list = scenesService.list(params); | ||||
|  | ||||
|         ExcelUtils.exportExcelToTarget(response, null, list, ScenesExcel.class); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -31,7 +31,7 @@ import java.util.Map; | ||||
|  * 包装箱表  前端控制器 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-02-22 | ||||
|  * @since  2024-01-29 | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("/code/woPackagingBox") | ||||
|   | ||||
| @@ -31,7 +31,7 @@ import java.util.Map; | ||||
|  * 包装箱基板关联表 ( 基板表 )  前端控制器 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-02-21 | ||||
|  * @since  2023-03-03 | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("/code/woPackagingBoxSubstrate") | ||||
|   | ||||
| @@ -31,7 +31,7 @@ import java.util.Map; | ||||
|  * 功率等级 表  前端控制器 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-02-20 | ||||
|  * @since  2023-02-22 | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("/code/woPowerLevel") | ||||
|   | ||||
| @@ -0,0 +1,116 @@ | ||||
| package com.cnbm.generator.code.controller; | ||||
|  | ||||
| import com.cnbm.admin.annotation.LogOperation; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.utils.ExcelUtils; | ||||
| import com.cnbm.common.utils.Result; | ||||
| import com.cnbm.common.validator.AssertUtils; | ||||
| import com.cnbm.common.validator.ValidatorUtils; | ||||
| import com.cnbm.common.validator.group.AddGroup; | ||||
| import com.cnbm.common.validator.group.DefaultGroup; | ||||
| import com.cnbm.common.validator.group.UpdateGroup; | ||||
| import com.cnbm.generator.code.dto.WorkingTimeDTO; | ||||
| import com.cnbm.generator.code.excel.WorkingTimeExcel; | ||||
| import com.cnbm.generator.code.service.WorkingTimeServiceBiz; | ||||
| import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiImplicitParam; | ||||
| import io.swagger.annotations.ApiImplicitParams; | ||||
| import io.swagger.annotations.ApiOperation; | ||||
| import org.springframework.security.access.prepost.PreAuthorize; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
| import springfox.documentation.annotations.ApiIgnore; | ||||
|  | ||||
| import javax.servlet.http.HttpServletResponse; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * 班次时间段 表  前端控制器 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-12-28 | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("/code/workingTime") | ||||
| @Api(tags="班次时间段 表") | ||||
| public class WorkingTimeController { | ||||
|     @Autowired | ||||
|     private WorkingTimeServiceBiz workingTimeService; | ||||
|  | ||||
|     @GetMapping("page") | ||||
|     @ApiOperation("分页") | ||||
|     @ApiImplicitParams({ | ||||
|         @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataTypeClass=Integer.class) , | ||||
|         @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataTypeClass=Integer.class) , | ||||
|         @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataTypeClass=String.class) , | ||||
|         @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataTypeClass=String.class) | ||||
|     }) | ||||
|     @PreAuthorize("@ex.hasAuthority('code:workingTime:page')") | ||||
|     public Result<PageData<WorkingTimeDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){ | ||||
|         PageData<WorkingTimeDTO> page = workingTimeService.page(params); | ||||
|  | ||||
|         return new Result<PageData<WorkingTimeDTO>>().ok(page); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("{id}") | ||||
|     @ApiOperation("信息") | ||||
|     @PreAuthorize("@ex.hasAuthority('code:workingTime:info')") | ||||
|     public Result<WorkingTimeDTO> get(@PathVariable("id") Long id){ | ||||
|         WorkingTimeDTO data = workingTimeService.get(id); | ||||
|  | ||||
|         return new Result<WorkingTimeDTO>().ok(data); | ||||
|     } | ||||
|  | ||||
|     @PostMapping | ||||
|     @ApiOperation("保存") | ||||
|     @LogOperation("保存") | ||||
|     @PreAuthorize("@ex.hasAuthority('code:workingTime:save')") | ||||
|     public Result<Long> save(@RequestBody WorkingTimeDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); | ||||
|  | ||||
|         workingTimeService.save(dto); | ||||
|  | ||||
|         return new Result<Long>().ok(dto.getId()); | ||||
|     } | ||||
|  | ||||
|     @PutMapping | ||||
|     @ApiOperation("修改") | ||||
|     @LogOperation("修改") | ||||
|     @PreAuthorize("@ex.hasAuthority('code:workingTime:update')") | ||||
|     public Result<Long> update(@RequestBody WorkingTimeDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); | ||||
|  | ||||
|         workingTimeService.update(dto); | ||||
|  | ||||
|         return new Result<Long>().ok(dto.getId()); | ||||
|     } | ||||
|  | ||||
|     @DeleteMapping | ||||
|     @ApiOperation("删除") | ||||
|     @LogOperation("删除") | ||||
|     @PreAuthorize("@ex.hasAuthority('code:workingTime:delete')") | ||||
|     public Result delete(@RequestBody Long[] ids){ | ||||
|         //效验数据 | ||||
|         AssertUtils.isArrayEmpty(ids, "id"); | ||||
|  | ||||
|         workingTimeService.delete(ids); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("export") | ||||
|     @ApiOperation("导出") | ||||
|     @LogOperation("导出") | ||||
|     @PreAuthorize("@ex.hasAuthority('code:workingTime:export')") | ||||
|     public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception { | ||||
|         List<WorkingTimeDTO> list = workingTimeService.list(params); | ||||
|  | ||||
|         ExcelUtils.exportExcelToTarget(response, null, list, WorkingTimeExcel.class); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -14,7 +14,7 @@ import java.math.BigDecimal; | ||||
|  * 打印标签模板表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-02-20 | ||||
|  * @since  2024-01-25 | ||||
|  */ | ||||
| @Data | ||||
| @ApiModel(value = "打印标签模板表DTO对象") | ||||
| @@ -62,7 +62,7 @@ public class PrintModelDTO implements Serializable { | ||||
| 	@ApiModelProperty(value = "备注") | ||||
| 	private String remark; | ||||
|  | ||||
| 	@ApiModelProperty(value = "类型,0:模组标签,1:等级标签") | ||||
| 	@ApiModelProperty(value = "类型,1:手动,2:自动") | ||||
| 	private Integer type; | ||||
|  | ||||
| 	@ApiModelProperty(value = "是否默认模板,0:否,1:是") | ||||
| @@ -77,4 +77,22 @@ public class PrintModelDTO implements Serializable { | ||||
| 	@ApiModelProperty(value = "线体,1=F ; 2=S (用于过程1比对,和包装打印)(设备传给我们的)") | ||||
| 	private Integer lineBody; | ||||
|  | ||||
| 	@ApiModelProperty(value = "是否启用,0 停用;1 启用") | ||||
| 	private Integer isEnable; | ||||
|  | ||||
| 	@ApiModelProperty(value = "场景(用不着了,废弃)") | ||||
| 	private String scenes; | ||||
|  | ||||
| 	@ApiModelProperty(value = "产品等级,t_product_level 把code传过来放进去,不要放id") | ||||
| 	private String productGrade; | ||||
|  | ||||
| 	@ApiModelProperty(value = "节数,前端写死,输入") | ||||
| 	private String pitchNumber; | ||||
|  | ||||
| 	@ApiModelProperty(value = "产品等级,前端写死,输入") | ||||
| 	private String maxFuseCurrent; | ||||
|  | ||||
| 	@ApiModelProperty(value = "产品等级,前端写死,输入") | ||||
| 	private String coverName; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,65 @@ | ||||
| package com.cnbm.generator.code.dto; | ||||
|  | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.io.Serializable; | ||||
| import java.time.LocalDateTime; | ||||
|  | ||||
| import java.math.BigDecimal; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * 产品等级 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-12-28 | ||||
|  */ | ||||
| @Data | ||||
| @ApiModel(value = "产品等级 表DTO对象") | ||||
| public class ProductLevelDTO implements Serializable { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|  | ||||
|  | ||||
| 	@ApiModelProperty(value = "ID") | ||||
| 	private Long id; | ||||
|  | ||||
| 	@ApiModelProperty(value = "产品名") | ||||
| 	private String productName; | ||||
|  | ||||
| 	@ApiModelProperty(value = "产品等级,A1/A2/A3/A4/NK") | ||||
| 	private String productLevel; | ||||
|  | ||||
| 	@ApiModelProperty(value = "备注") | ||||
| 	private String remark; | ||||
|  | ||||
| 	@ApiModelProperty(value = "删除标志,是否有效:1 可用 0不可用") | ||||
| 	private Integer valid; | ||||
|  | ||||
| 	@ApiModelProperty(value = "创建人") | ||||
| 	private Long creatorId; | ||||
|  | ||||
| 	@ApiModelProperty(value = "创建人姓名") | ||||
| 	private String creatorName; | ||||
|  | ||||
| 	@ApiModelProperty(value = "创建时间") | ||||
| 	private LocalDateTime createTime; | ||||
|  | ||||
| 	@ApiModelProperty(value = "更新人") | ||||
| 	private Long updaterId; | ||||
|  | ||||
| 	@ApiModelProperty(value = "更新人姓名") | ||||
| 	private String updaterName; | ||||
|  | ||||
| 	@ApiModelProperty(value = "更新时间") | ||||
| 	private LocalDateTime updateTime; | ||||
|  | ||||
| 	@ApiModelProperty(value = "版本号") | ||||
| 	private Integer version; | ||||
|  | ||||
| 	@ApiModelProperty(value = "产品等级代码") | ||||
| 	private String code; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,62 @@ | ||||
| package com.cnbm.generator.code.dto; | ||||
|  | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.io.Serializable; | ||||
| import java.time.LocalDateTime; | ||||
|  | ||||
| import java.math.BigDecimal; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * 场景 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-12-28 | ||||
|  */ | ||||
| @Data | ||||
| @ApiModel(value = "场景 表DTO对象") | ||||
| public class ScenesDTO implements Serializable { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|  | ||||
|  | ||||
| 	@ApiModelProperty(value = "ID") | ||||
| 	private Long id; | ||||
|  | ||||
| 	@ApiModelProperty(value = "场景名") | ||||
| 	private String scenesName; | ||||
|  | ||||
| 	@ApiModelProperty(value = "备注") | ||||
| 	private String remark; | ||||
|  | ||||
| 	@ApiModelProperty(value = "删除标志,是否有效:1 可用 0不可用") | ||||
| 	private Integer valid; | ||||
|  | ||||
| 	@ApiModelProperty(value = "创建人") | ||||
| 	private Long creatorId; | ||||
|  | ||||
| 	@ApiModelProperty(value = "创建人姓名") | ||||
| 	private String creatorName; | ||||
|  | ||||
| 	@ApiModelProperty(value = "创建时间") | ||||
| 	private LocalDateTime createTime; | ||||
|  | ||||
| 	@ApiModelProperty(value = "更新人") | ||||
| 	private Long updaterId; | ||||
|  | ||||
| 	@ApiModelProperty(value = "更新人姓名") | ||||
| 	private String updaterName; | ||||
|  | ||||
| 	@ApiModelProperty(value = "更新时间") | ||||
| 	private LocalDateTime updateTime; | ||||
|  | ||||
| 	@ApiModelProperty(value = "版本号") | ||||
| 	private Integer version; | ||||
|  | ||||
| 	@ApiModelProperty(value = "场景code") | ||||
| 	private String code; | ||||
|  | ||||
| } | ||||
| @@ -14,7 +14,7 @@ import java.math.BigDecimal; | ||||
|  * 包装箱表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-02-22 | ||||
|  * @since  2024-01-29 | ||||
|  */ | ||||
| @Data | ||||
| @ApiModel(value = "包装箱表DTO对象") | ||||
| @@ -26,7 +26,7 @@ public class WoPackagingBoxDTO implements Serializable { | ||||
| 	@ApiModelProperty(value = "ID") | ||||
| 	private Long id; | ||||
|  | ||||
| 	@ApiModelProperty(value = "订单ID") | ||||
| 	@ApiModelProperty(value = "订单ID(舍弃)") | ||||
| 	private Long orderId; | ||||
|  | ||||
| 	@ApiModelProperty(value = "工单ID(舍弃啊)") | ||||
| @@ -41,7 +41,7 @@ public class WoPackagingBoxDTO implements Serializable { | ||||
| 	@ApiModelProperty(value = "等级(舍弃)") | ||||
| 	private Integer grade; | ||||
|  | ||||
| 	@ApiModelProperty(value = "基板数量,每个包装箱最大20片(舍弃)") | ||||
| 	@ApiModelProperty(value = "基板数量,每个包装箱最大20片") | ||||
| 	private Integer substrateQuantity; | ||||
|  | ||||
| 	@ApiModelProperty(value = "装箱完成时间,指的是包装完成时间") | ||||
| @@ -110,4 +110,19 @@ public class WoPackagingBoxDTO implements Serializable { | ||||
| 	@ApiModelProperty(value = "是否到达包装台,1=到达;2=未达到") | ||||
| 	private Integer isArrived; | ||||
|  | ||||
| 	@ApiModelProperty(value = "订单号") | ||||
| 	private String orderNum; | ||||
|  | ||||
| 	@ApiModelProperty(value = "产品等级,t_product_level 把code传过来放进去,不要放id") | ||||
| 	private String productGrade; | ||||
|  | ||||
| 	@ApiModelProperty(value = "节数,前端写死,输入") | ||||
| 	private String pitchNumber; | ||||
|  | ||||
| 	@ApiModelProperty(value = "最大额定熔断电流,前端写死,输入") | ||||
| 	private String maxFuseCurrent; | ||||
|  | ||||
| 	@ApiModelProperty(value = "盖板,前端写死,输入") | ||||
| 	private String coverName; | ||||
|  | ||||
| } | ||||
| @@ -14,7 +14,7 @@ import java.math.BigDecimal; | ||||
|  * 包装箱基板关联表 ( 基板表 ) | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-02-21 | ||||
|  * @since  2023-03-03 | ||||
|  */ | ||||
| @Data | ||||
| @ApiModel(value = "包装箱基板关联表 ( 基板表 )DTO对象") | ||||
| @@ -71,4 +71,106 @@ public class WoPackagingBoxSubstrateDTO implements Serializable { | ||||
| 	@ApiModelProperty(value = "功率等级") | ||||
| 	private String powerLevel; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private LocalDateTime lastUpdateTime; | ||||
|  | ||||
| 	@ApiModelProperty(value = "补偿后的功率,pmpp") | ||||
| 	private Float pmpp; | ||||
|  | ||||
| 	@ApiModelProperty(value = "订单名") | ||||
| 	private String orderName; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Long binclassFl1; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Long binclassFl2; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float etaFl1; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float etaFl2; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float ffFl1; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float ffFl2; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float imppFl1; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float imppFl2; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float insolflashcontrolFl1; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float insolflashcontrolFl2; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float insolmppFl1; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float insolmppFl2; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float insolvocFl1; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float insolvocFl2; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float insolFl1; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float insolFl2; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float iscFl1; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float iscFl2; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private LocalDateTime measTimeFl1; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private LocalDateTime measTimeFl2; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float pmppFl1; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float pmppFl2; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float tcellFl1; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float tcellFl2; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float tmonicellFl1; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float tmonicellFl2; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float umppFl1; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float umppFl2; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float uocFl1; | ||||
|  | ||||
| 	@ApiModelProperty(value = "") | ||||
| 	private Float uocFl2; | ||||
|  | ||||
| 	@ApiModelProperty(value = "真实PMPP") | ||||
| 	private Float actualPmpp; | ||||
|  | ||||
| } | ||||
| @@ -14,7 +14,7 @@ import java.math.BigDecimal; | ||||
|  * 功率等级 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-02-20 | ||||
|  * @since  2023-02-22 | ||||
|  */ | ||||
| @Data | ||||
| @ApiModel(value = "功率等级 表DTO对象") | ||||
| @@ -27,7 +27,7 @@ public class WoPowerLevelDTO implements Serializable { | ||||
| 	private Long id; | ||||
|  | ||||
| 	@ApiModelProperty(value = "功率等级名称,(现场人员手动录入)") | ||||
| 	private Integer powerClass; | ||||
| 	private String powerClass; | ||||
|  | ||||
| 	@ApiModelProperty(value = "pmpp_low,(现场人员手动录入)") | ||||
| 	private Float pmppLow; | ||||
| @@ -38,7 +38,7 @@ public class WoPowerLevelDTO implements Serializable { | ||||
| 	@ApiModelProperty(value = "物料号,(现场人员手动录入)") | ||||
| 	private String sapMaterialNum; | ||||
|  | ||||
| 	@ApiModelProperty(value = "线体,1=F ; 2=S (用于过程1比对,和包装打印)(设备传给我们的)") | ||||
| 	@ApiModelProperty(value = "线体,1=F ; 2=S (用于过程1比对,和包装打印)(设备传给我们的)(一个功率等级可能对应多个线体)") | ||||
| 	private Integer lineBody; | ||||
|  | ||||
| 	@ApiModelProperty(value = "lable_voc,(手动录入)") | ||||
|   | ||||
| @@ -0,0 +1,68 @@ | ||||
| package com.cnbm.generator.code.dto; | ||||
|  | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.io.Serializable; | ||||
| import java.time.LocalDateTime; | ||||
|  | ||||
| import java.math.BigDecimal; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * 班次时间段 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-12-28 | ||||
|  */ | ||||
| @Data | ||||
| @ApiModel(value = "班次时间段 表DTO对象") | ||||
| public class WorkingTimeDTO implements Serializable { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|  | ||||
|  | ||||
| 	@ApiModelProperty(value = "ID") | ||||
| 	private Long id; | ||||
|  | ||||
| 	@ApiModelProperty(value = "班次名 ,A/B/C...") | ||||
| 	private String orderName; | ||||
|  | ||||
| 	@ApiModelProperty(value = "班次开始时间, 0点 - 24点") | ||||
| 	private LocalDateTime beginTime; | ||||
|  | ||||
| 	@ApiModelProperty(value = "班次结束时间, 0点 - 24点") | ||||
| 	private LocalDateTime endTime; | ||||
|  | ||||
| 	@ApiModelProperty(value = "备注") | ||||
| 	private String remark; | ||||
|  | ||||
| 	@ApiModelProperty(value = "删除标志,是否有效:1 可用 0不可用") | ||||
| 	private Integer valid; | ||||
|  | ||||
| 	@ApiModelProperty(value = "创建人") | ||||
| 	private Long creatorId; | ||||
|  | ||||
| 	@ApiModelProperty(value = "创建人姓名") | ||||
| 	private String creatorName; | ||||
|  | ||||
| 	@ApiModelProperty(value = "创建时间") | ||||
| 	private LocalDateTime createTime; | ||||
|  | ||||
| 	@ApiModelProperty(value = "更新人") | ||||
| 	private Long updaterId; | ||||
|  | ||||
| 	@ApiModelProperty(value = "更新人姓名") | ||||
| 	private String updaterName; | ||||
|  | ||||
| 	@ApiModelProperty(value = "更新时间") | ||||
| 	private LocalDateTime updateTime; | ||||
|  | ||||
| 	@ApiModelProperty(value = "版本号") | ||||
| 	private Integer version; | ||||
|  | ||||
| 	@ApiModelProperty(value = "班次代码") | ||||
| 	private String code; | ||||
|  | ||||
| } | ||||
| @@ -14,7 +14,7 @@ import lombok.Data; | ||||
|  * </p> | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-02-20 | ||||
|  * @since 2024-01-25 | ||||
|  */ | ||||
| @Data | ||||
| @TableName("t_print_model") | ||||
| @@ -63,7 +63,7 @@ public class PrintModel implements Serializable { | ||||
|     @ApiModelProperty("备注") | ||||
|     private String remark; | ||||
|  | ||||
|     @ApiModelProperty("类型,0:模组标签,1:等级标签") | ||||
|     @ApiModelProperty("类型,1:手动,2:自动") | ||||
|     private Integer type; | ||||
|  | ||||
|     @ApiModelProperty("是否默认模板,0:否,1:是") | ||||
| @@ -78,6 +78,24 @@ public class PrintModel implements Serializable { | ||||
|     @ApiModelProperty("线体,1=F ; 2=S (用于过程1比对,和包装打印)(设备传给我们的)") | ||||
|     private Integer lineBody; | ||||
|  | ||||
|     @ApiModelProperty("是否启用,0 停用;1 启用") | ||||
|     private Integer isEnable; | ||||
|  | ||||
|     @ApiModelProperty("场景(用不着了,废弃)") | ||||
|     private String scenes; | ||||
|  | ||||
|     @ApiModelProperty("产品等级,t_product_level 把code传过来放进去,不要放id") | ||||
|     private String productGrade; | ||||
|  | ||||
|     @ApiModelProperty("节数,前端写死,输入") | ||||
|     private String pitchNumber; | ||||
|  | ||||
|     @ApiModelProperty("产品等级,前端写死,输入") | ||||
|     private String maxFuseCurrent; | ||||
|  | ||||
|     @ApiModelProperty("产品等级,前端写死,输入") | ||||
|     private String coverName; | ||||
|  | ||||
|  | ||||
|     public static final String ID = "ID"; | ||||
|  | ||||
| @@ -115,4 +133,16 @@ public class PrintModel implements Serializable { | ||||
|  | ||||
|     public static final String LINE_BODY = "line_body"; | ||||
|  | ||||
|     public static final String IS_ENABLE = "is_enable"; | ||||
|  | ||||
|     public static final String SCENES = "scenes"; | ||||
|  | ||||
|     public static final String PRODUCT_GRADE = "product_grade"; | ||||
|  | ||||
|     public static final String PITCH_NUMBER = "pitch_number"; | ||||
|  | ||||
|     public static final String MAX_FUSE_CURRENT = "max_fuse_current"; | ||||
|  | ||||
|     public static final String COVER_NAME = "cover_name"; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,93 @@ | ||||
| package com.cnbm.generator.code.entity; | ||||
|  | ||||
| import com.baomidou.mybatisplus.annotation.TableLogic; | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import java.io.Serializable; | ||||
| import java.time.LocalDateTime; | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
|  | ||||
| /** | ||||
|  * <p> | ||||
|  * 产品等级 表 | ||||
|  * </p> | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-12-28 | ||||
|  */ | ||||
| @Data | ||||
| @TableName("t_product_level") | ||||
| @ApiModel(value = "ProductLevel对象", description = "产品等级 表") | ||||
| public class ProductLevel implements Serializable { | ||||
|  | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     @ApiModelProperty("ID") | ||||
|     private Long id; | ||||
|  | ||||
|     @ApiModelProperty("产品名") | ||||
|     private String productName; | ||||
|  | ||||
|     @ApiModelProperty("产品等级,A1/A2/A3/A4/NK") | ||||
|     private String productLevel; | ||||
|  | ||||
|     @ApiModelProperty("备注") | ||||
|     private String remark; | ||||
|  | ||||
|     @ApiModelProperty("删除标志,是否有效:1 可用 0不可用") | ||||
|     @TableLogic | ||||
|     private Integer valid; | ||||
|  | ||||
|     @ApiModelProperty("创建人") | ||||
|     private Long creatorId; | ||||
|  | ||||
|     @ApiModelProperty("创建人姓名") | ||||
|     private String creatorName; | ||||
|  | ||||
|     @ApiModelProperty("创建时间") | ||||
|     private LocalDateTime createTime; | ||||
|  | ||||
|     @ApiModelProperty("更新人") | ||||
|     private Long updaterId; | ||||
|  | ||||
|     @ApiModelProperty("更新人姓名") | ||||
|     private String updaterName; | ||||
|  | ||||
|     @ApiModelProperty("更新时间") | ||||
|     private LocalDateTime updateTime; | ||||
|  | ||||
|     @ApiModelProperty("版本号") | ||||
|     private Integer version; | ||||
|  | ||||
|     @ApiModelProperty("产品等级代码") | ||||
|     private String code; | ||||
|  | ||||
|  | ||||
|     public static final String ID = "id"; | ||||
|  | ||||
|     public static final String PRODUCT_NAME = "product_name"; | ||||
|  | ||||
|     public static final String PRODUCT_LEVEL = "product_level"; | ||||
|  | ||||
|     public static final String REMARK = "remark"; | ||||
|  | ||||
|     public static final String VALID = "valid"; | ||||
|  | ||||
|     public static final String CREATOR_ID = "creator_id"; | ||||
|  | ||||
|     public static final String CREATOR_NAME = "creator_name"; | ||||
|  | ||||
|     public static final String CREATE_TIME = "create_time"; | ||||
|  | ||||
|     public static final String UPDATER_ID = "updater_id"; | ||||
|  | ||||
|     public static final String UPDATER_NAME = "updater_name"; | ||||
|  | ||||
|     public static final String UPDATE_TIME = "update_time"; | ||||
|  | ||||
|     public static final String VERSION = "version"; | ||||
|  | ||||
|     public static final String CODE = "code"; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,88 @@ | ||||
| package com.cnbm.generator.code.entity; | ||||
|  | ||||
| import com.baomidou.mybatisplus.annotation.TableLogic; | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import java.io.Serializable; | ||||
| import java.time.LocalDateTime; | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
|  | ||||
| /** | ||||
|  * <p> | ||||
|  * 场景 表 | ||||
|  * </p> | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-12-28 | ||||
|  */ | ||||
| @Data | ||||
| @TableName("t_scenes") | ||||
| @ApiModel(value = "Scenes对象", description = "场景 表") | ||||
| public class Scenes implements Serializable { | ||||
|  | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     @ApiModelProperty("ID") | ||||
|     private Long id; | ||||
|  | ||||
|     @ApiModelProperty("场景名") | ||||
|     private String scenesName; | ||||
|  | ||||
|     @ApiModelProperty("备注") | ||||
|     private String remark; | ||||
|  | ||||
|     @ApiModelProperty("删除标志,是否有效:1 可用 0不可用") | ||||
|     @TableLogic | ||||
|     private Integer valid; | ||||
|  | ||||
|     @ApiModelProperty("创建人") | ||||
|     private Long creatorId; | ||||
|  | ||||
|     @ApiModelProperty("创建人姓名") | ||||
|     private String creatorName; | ||||
|  | ||||
|     @ApiModelProperty("创建时间") | ||||
|     private LocalDateTime createTime; | ||||
|  | ||||
|     @ApiModelProperty("更新人") | ||||
|     private Long updaterId; | ||||
|  | ||||
|     @ApiModelProperty("更新人姓名") | ||||
|     private String updaterName; | ||||
|  | ||||
|     @ApiModelProperty("更新时间") | ||||
|     private LocalDateTime updateTime; | ||||
|  | ||||
|     @ApiModelProperty("版本号") | ||||
|     private Integer version; | ||||
|  | ||||
|     @ApiModelProperty("场景code") | ||||
|     private String code; | ||||
|  | ||||
|  | ||||
|     public static final String ID = "id"; | ||||
|  | ||||
|     public static final String SCENES_NAME = "scenes_name"; | ||||
|  | ||||
|     public static final String REMARK = "remark"; | ||||
|  | ||||
|     public static final String VALID = "valid"; | ||||
|  | ||||
|     public static final String CREATOR_ID = "creator_id"; | ||||
|  | ||||
|     public static final String CREATOR_NAME = "creator_name"; | ||||
|  | ||||
|     public static final String CREATE_TIME = "create_time"; | ||||
|  | ||||
|     public static final String UPDATER_ID = "updater_id"; | ||||
|  | ||||
|     public static final String UPDATER_NAME = "updater_name"; | ||||
|  | ||||
|     public static final String UPDATE_TIME = "update_time"; | ||||
|  | ||||
|     public static final String VERSION = "version"; | ||||
|  | ||||
|     public static final String CODE = "code"; | ||||
|  | ||||
| } | ||||
| @@ -14,7 +14,7 @@ import lombok.Data; | ||||
|  * </p> | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-02-22 | ||||
|  * @since 2024-01-29 | ||||
|  */ | ||||
| @Data | ||||
| @TableName("t_wo_packaging_box") | ||||
| @@ -26,7 +26,7 @@ public class WoPackagingBox implements Serializable { | ||||
|     @ApiModelProperty("ID") | ||||
|     private Long id; | ||||
|  | ||||
|     @ApiModelProperty("订单ID") | ||||
|     @ApiModelProperty("订单ID(舍弃)") | ||||
|     private Long orderId; | ||||
|  | ||||
|     @ApiModelProperty("工单ID(舍弃啊)") | ||||
| @@ -41,7 +41,7 @@ public class WoPackagingBox implements Serializable { | ||||
|     @ApiModelProperty("等级(舍弃)") | ||||
|     private Integer grade; | ||||
|  | ||||
|     @ApiModelProperty("基板数量,每个包装箱最大20片(舍弃)") | ||||
|     @ApiModelProperty("基板数量,每个包装箱最大20片") | ||||
|     private Integer substrateQuantity; | ||||
|  | ||||
|     @ApiModelProperty("装箱完成时间,指的是包装完成时间") | ||||
| @@ -111,6 +111,21 @@ public class WoPackagingBox implements Serializable { | ||||
|     @ApiModelProperty("是否到达包装台,1=到达;2=未达到") | ||||
|     private Integer isArrived; | ||||
|  | ||||
|     @ApiModelProperty("订单号") | ||||
|     private String orderNum; | ||||
|  | ||||
|     @ApiModelProperty("产品等级,t_product_level 把code传过来放进去,不要放id") | ||||
|     private String productGrade; | ||||
|  | ||||
|     @ApiModelProperty("节数,前端写死,输入") | ||||
|     private String pitchNumber; | ||||
|  | ||||
|     @ApiModelProperty("最大额定熔断电流,前端写死,输入") | ||||
|     private String maxFuseCurrent; | ||||
|  | ||||
|     @ApiModelProperty("盖板,前端写死,输入") | ||||
|     private String coverName; | ||||
|  | ||||
|  | ||||
|     public static final String ID = "ID"; | ||||
|  | ||||
| @@ -170,4 +185,14 @@ public class WoPackagingBox implements Serializable { | ||||
|  | ||||
|     public static final String IS_ARRIVED = "is_arrived"; | ||||
|  | ||||
|     public static final String ORDER_NUM = "ORDER_NUM"; | ||||
|  | ||||
|     public static final String PRODUCT_GRADE = "product_grade"; | ||||
|  | ||||
|     public static final String PITCH_NUMBER = "pitch_number"; | ||||
|  | ||||
|     public static final String MAX_FUSE_CURRENT = "max_fuse_current"; | ||||
|  | ||||
|     public static final String COVER_NAME = "cover_name"; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -14,7 +14,7 @@ import lombok.Data; | ||||
|  * </p> | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-02-21 | ||||
|  * @since 2023-03-03 | ||||
|  */ | ||||
| @Data | ||||
| @TableName("t_wo_packaging_box_substrate") | ||||
| @@ -72,6 +72,77 @@ public class WoPackagingBoxSubstrate implements Serializable { | ||||
|     @ApiModelProperty("功率等级") | ||||
|     private String powerLevel; | ||||
|  | ||||
|     private LocalDateTime lastUpdateTime; | ||||
|  | ||||
|     @ApiModelProperty("补偿后的功率,pmpp") | ||||
|     private Float pmpp; | ||||
|  | ||||
|     @ApiModelProperty("订单名") | ||||
|     private String orderName; | ||||
|  | ||||
|     private Long binclassFl1; | ||||
|  | ||||
|     private Long binclassFl2; | ||||
|  | ||||
|     private Float etaFl1; | ||||
|  | ||||
|     private Float etaFl2; | ||||
|  | ||||
|     private Float ffFl1; | ||||
|  | ||||
|     private Float ffFl2; | ||||
|  | ||||
|     private Float imppFl1; | ||||
|  | ||||
|     private Float imppFl2; | ||||
|  | ||||
|     private Float insolflashcontrolFl1; | ||||
|  | ||||
|     private Float insolflashcontrolFl2; | ||||
|  | ||||
|     private Float insolmppFl1; | ||||
|  | ||||
|     private Float insolmppFl2; | ||||
|  | ||||
|     private Float insolvocFl1; | ||||
|  | ||||
|     private Float insolvocFl2; | ||||
|  | ||||
|     private Float insolFl1; | ||||
|  | ||||
|     private Float insolFl2; | ||||
|  | ||||
|     private Float iscFl1; | ||||
|  | ||||
|     private Float iscFl2; | ||||
|  | ||||
|     private LocalDateTime measTimeFl1; | ||||
|  | ||||
|     private LocalDateTime measTimeFl2; | ||||
|  | ||||
|     private Float pmppFl1; | ||||
|  | ||||
|     private Float pmppFl2; | ||||
|  | ||||
|     private Float tcellFl1; | ||||
|  | ||||
|     private Float tcellFl2; | ||||
|  | ||||
|     private Float tmonicellFl1; | ||||
|  | ||||
|     private Float tmonicellFl2; | ||||
|  | ||||
|     private Float umppFl1; | ||||
|  | ||||
|     private Float umppFl2; | ||||
|  | ||||
|     private Float uocFl1; | ||||
|  | ||||
|     private Float uocFl2; | ||||
|  | ||||
|     @ApiModelProperty("真实PMPP") | ||||
|     private Float actualPmpp; | ||||
|  | ||||
|  | ||||
|     public static final String ID = "ID"; | ||||
|  | ||||
| @@ -105,4 +176,72 @@ public class WoPackagingBoxSubstrate implements Serializable { | ||||
|  | ||||
|     public static final String POWER_LEVEL = "POWER_LEVEL"; | ||||
|  | ||||
|     public static final String LAST_UPDATE_TIME = "LAST_UPDATE_TIME"; | ||||
|  | ||||
|     public static final String PMPP = "PMPP"; | ||||
|  | ||||
|     public static final String ORDER_NAME = "ORDER_NAME"; | ||||
|  | ||||
|     public static final String BINCLASS_FL1 = "BINCLASS_FL1"; | ||||
|  | ||||
|     public static final String BINCLASS_FL2 = "BINCLASS_FL2"; | ||||
|  | ||||
|     public static final String ETA_FL1 = "ETA_FL1"; | ||||
|  | ||||
|     public static final String ETA_FL2 = "ETA_FL2"; | ||||
|  | ||||
|     public static final String FF_FL1 = "FF_FL1"; | ||||
|  | ||||
|     public static final String FF_FL2 = "FF_FL2"; | ||||
|  | ||||
|     public static final String IMPP_FL1 = "IMPP_FL1"; | ||||
|  | ||||
|     public static final String IMPP_FL2 = "IMPP_FL2"; | ||||
|  | ||||
|     public static final String INSOLFLASHCONTROL_FL1 = "InsolFlashControl_FL1"; | ||||
|  | ||||
|     public static final String INSOLFLASHCONTROL_FL2 = "InsolFlashControl_FL2"; | ||||
|  | ||||
|     public static final String INSOLMPP_FL1 = "InsolMPP_FL1"; | ||||
|  | ||||
|     public static final String INSOLMPP_FL2 = "InsolMPP_FL2"; | ||||
|  | ||||
|     public static final String INSOLVOC_FL1 = "InsolVoc_FL1"; | ||||
|  | ||||
|     public static final String INSOLVOC_FL2 = "InsolVoc_FL2"; | ||||
|  | ||||
|     public static final String INSOL_FL1 = "Insol_FL1"; | ||||
|  | ||||
|     public static final String INSOL_FL2 = "Insol_FL2"; | ||||
|  | ||||
|     public static final String ISC_FL1 = "ISC_FL1"; | ||||
|  | ||||
|     public static final String ISC_FL2 = "ISC_FL2"; | ||||
|  | ||||
|     public static final String MEAS_TIME_FL1 = "MEAS_TIME_FL1"; | ||||
|  | ||||
|     public static final String MEAS_TIME_FL2 = "MEAS_TIME_FL2"; | ||||
|  | ||||
|     public static final String PMPP_FL1 = "PMPP_FL1"; | ||||
|  | ||||
|     public static final String PMPP_FL2 = "PMPP_FL2"; | ||||
|  | ||||
|     public static final String TCELL_FL1 = "Tcell_FL1"; | ||||
|  | ||||
|     public static final String TCELL_FL2 = "Tcell_FL2"; | ||||
|  | ||||
|     public static final String TMONICELL_FL1 = "Tmonicell_FL1"; | ||||
|  | ||||
|     public static final String TMONICELL_FL2 = "Tmonicell_FL2"; | ||||
|  | ||||
|     public static final String UMPP_FL1 = "UMPP_FL1"; | ||||
|  | ||||
|     public static final String UMPP_FL2 = "UMPP_FL2"; | ||||
|  | ||||
|     public static final String UOC_FL1 = "UOC_FL1"; | ||||
|  | ||||
|     public static final String UOC_FL2 = "UOC_FL2"; | ||||
|  | ||||
|     public static final String ACTUAL_PMPP = "ACTUAL_PMPP"; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -15,7 +15,7 @@ import lombok.Data; | ||||
|  * </p> | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-02-20 | ||||
|  * @since 2023-02-22 | ||||
|  */ | ||||
| @Data | ||||
| @TableName("t_wo_power_level") | ||||
| @@ -28,7 +28,7 @@ public class WoPowerLevel implements Serializable { | ||||
|     private Long id; | ||||
|  | ||||
|     @ApiModelProperty("功率等级名称,(现场人员手动录入)") | ||||
|     private Integer powerClass; | ||||
|     private String powerClass; | ||||
|  | ||||
|     @ApiModelProperty("pmpp_low,(现场人员手动录入)") | ||||
|     private Float pmppLow; | ||||
| @@ -39,7 +39,7 @@ public class WoPowerLevel implements Serializable { | ||||
|     @ApiModelProperty("物料号,(现场人员手动录入)") | ||||
|     private String sapMaterialNum; | ||||
|  | ||||
|     @ApiModelProperty("线体,1=F ; 2=S (用于过程1比对,和包装打印)(设备传给我们的)") | ||||
|     @ApiModelProperty("线体,1=F ; 2=S (用于过程1比对,和包装打印)(设备传给我们的)(一个功率等级可能对应多个线体)") | ||||
|     private Integer lineBody; | ||||
|  | ||||
|     @ApiModelProperty("lable_voc,(手动录入)") | ||||
|   | ||||
| @@ -0,0 +1,98 @@ | ||||
| package com.cnbm.generator.code.entity; | ||||
|  | ||||
| import com.baomidou.mybatisplus.annotation.TableLogic; | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import java.io.Serializable; | ||||
| import java.time.LocalDateTime; | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
|  | ||||
| /** | ||||
|  * <p> | ||||
|  * 班次时间段 表 | ||||
|  * </p> | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-12-28 | ||||
|  */ | ||||
| @Data | ||||
| @TableName("t_working_time") | ||||
| @ApiModel(value = "WorkingTime对象", description = "班次时间段 表") | ||||
| public class WorkingTime implements Serializable { | ||||
|  | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     @ApiModelProperty("ID") | ||||
|     private Long id; | ||||
|  | ||||
|     @ApiModelProperty("班次名 ,A/B/C...") | ||||
|     private String orderName; | ||||
|  | ||||
|     @ApiModelProperty("班次开始时间, 0点 - 24点") | ||||
|     private LocalDateTime beginTime; | ||||
|  | ||||
|     @ApiModelProperty("班次结束时间, 0点 - 24点") | ||||
|     private LocalDateTime endTime; | ||||
|  | ||||
|     @ApiModelProperty("备注") | ||||
|     private String remark; | ||||
|  | ||||
|     @ApiModelProperty("删除标志,是否有效:1 可用 0不可用") | ||||
|     @TableLogic | ||||
|     private Integer valid; | ||||
|  | ||||
|     @ApiModelProperty("创建人") | ||||
|     private Long creatorId; | ||||
|  | ||||
|     @ApiModelProperty("创建人姓名") | ||||
|     private String creatorName; | ||||
|  | ||||
|     @ApiModelProperty("创建时间") | ||||
|     private LocalDateTime createTime; | ||||
|  | ||||
|     @ApiModelProperty("更新人") | ||||
|     private Long updaterId; | ||||
|  | ||||
|     @ApiModelProperty("更新人姓名") | ||||
|     private String updaterName; | ||||
|  | ||||
|     @ApiModelProperty("更新时间") | ||||
|     private LocalDateTime updateTime; | ||||
|  | ||||
|     @ApiModelProperty("版本号") | ||||
|     private Integer version; | ||||
|  | ||||
|     @ApiModelProperty("班次代码") | ||||
|     private String code; | ||||
|  | ||||
|  | ||||
|     public static final String ID = "id"; | ||||
|  | ||||
|     public static final String ORDER_NAME = "order_name"; | ||||
|  | ||||
|     public static final String BEGIN_TIME = "begin_time"; | ||||
|  | ||||
|     public static final String END_TIME = "end_time"; | ||||
|  | ||||
|     public static final String REMARK = "remark"; | ||||
|  | ||||
|     public static final String VALID = "valid"; | ||||
|  | ||||
|     public static final String CREATOR_ID = "creator_id"; | ||||
|  | ||||
|     public static final String CREATOR_NAME = "creator_name"; | ||||
|  | ||||
|     public static final String CREATE_TIME = "create_time"; | ||||
|  | ||||
|     public static final String UPDATER_ID = "updater_id"; | ||||
|  | ||||
|     public static final String UPDATER_NAME = "updater_name"; | ||||
|  | ||||
|     public static final String UPDATE_TIME = "update_time"; | ||||
|  | ||||
|     public static final String VERSION = "version"; | ||||
|  | ||||
|     public static final String CODE = "code"; | ||||
|  | ||||
| } | ||||
| @@ -12,7 +12,7 @@ import java.util.Date; | ||||
|  * 打印标签模板表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-02-20 | ||||
|  * @since  2024-01-25 | ||||
|  */ | ||||
| @Data | ||||
| public class PrintModelExcel { | ||||
| @@ -42,7 +42,7 @@ public class PrintModelExcel { | ||||
|     private Integer valid; | ||||
|     @Excel(name = "备注") | ||||
|     private String remark; | ||||
|     @Excel(name = "类型,0:模组标签,1:等级标签") | ||||
|     @Excel(name = "类型,1:手动,2:自动") | ||||
|     private Integer type; | ||||
|     @Excel(name = "是否默认模板,0:否,1:是") | ||||
|     private Integer isDefault; | ||||
| @@ -52,5 +52,17 @@ public class PrintModelExcel { | ||||
|     private String content; | ||||
|     @Excel(name = "线体,1=F ; 2=S (用于过程1比对,和包装打印)(设备传给我们的)") | ||||
|     private Integer lineBody; | ||||
|     @Excel(name = "是否启用,0 停用;1 启用") | ||||
|     private Integer isEnable; | ||||
|     @Excel(name = "场景(用不着了,废弃)") | ||||
|     private String scenes; | ||||
|     @Excel(name = "产品等级,t_product_level 把code传过来放进去,不要放id") | ||||
|     private String productGrade; | ||||
|     @Excel(name = "节数,前端写死,输入") | ||||
|     private String pitchNumber; | ||||
|     @Excel(name = "产品等级,前端写死,输入") | ||||
|     private String maxFuseCurrent; | ||||
|     @Excel(name = "产品等级,前端写死,输入") | ||||
|     private String coverName; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,46 @@ | ||||
| package com.cnbm.generator.code.excel; | ||||
|  | ||||
| import cn.afterturn.easypoi.excel.annotation.Excel; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.time.LocalDateTime; | ||||
| import java.math.BigDecimal; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * 产品等级 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-12-28 | ||||
|  */ | ||||
| @Data | ||||
| public class ProductLevelExcel { | ||||
|     @Excel(name = "ID") | ||||
|     private Long id; | ||||
|     @Excel(name = "产品名") | ||||
|     private String productName; | ||||
|     @Excel(name = "产品等级,A1/A2/A3/A4/NK") | ||||
|     private String productLevel; | ||||
|     @Excel(name = "备注") | ||||
|     private String remark; | ||||
|     @Excel(name = "删除标志,是否有效:1 可用 0不可用") | ||||
|     private Integer valid; | ||||
|     @Excel(name = "创建人") | ||||
|     private Long creatorId; | ||||
|     @Excel(name = "创建人姓名") | ||||
|     private String creatorName; | ||||
|     @Excel(name = "创建时间") | ||||
|     private LocalDateTime createTime; | ||||
|     @Excel(name = "更新人") | ||||
|     private Long updaterId; | ||||
|     @Excel(name = "更新人姓名") | ||||
|     private String updaterName; | ||||
|     @Excel(name = "更新时间") | ||||
|     private LocalDateTime updateTime; | ||||
|     @Excel(name = "版本号") | ||||
|     private Integer version; | ||||
|     @Excel(name = "产品等级代码") | ||||
|     private String code; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,44 @@ | ||||
| package com.cnbm.generator.code.excel; | ||||
|  | ||||
| import cn.afterturn.easypoi.excel.annotation.Excel; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.time.LocalDateTime; | ||||
| import java.math.BigDecimal; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * 场景 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-12-28 | ||||
|  */ | ||||
| @Data | ||||
| public class ScenesExcel { | ||||
|     @Excel(name = "ID") | ||||
|     private Long id; | ||||
|     @Excel(name = "场景名") | ||||
|     private String scenesName; | ||||
|     @Excel(name = "备注") | ||||
|     private String remark; | ||||
|     @Excel(name = "删除标志,是否有效:1 可用 0不可用") | ||||
|     private Integer valid; | ||||
|     @Excel(name = "创建人") | ||||
|     private Long creatorId; | ||||
|     @Excel(name = "创建人姓名") | ||||
|     private String creatorName; | ||||
|     @Excel(name = "创建时间") | ||||
|     private LocalDateTime createTime; | ||||
|     @Excel(name = "更新人") | ||||
|     private Long updaterId; | ||||
|     @Excel(name = "更新人姓名") | ||||
|     private String updaterName; | ||||
|     @Excel(name = "更新时间") | ||||
|     private LocalDateTime updateTime; | ||||
|     @Excel(name = "版本号") | ||||
|     private Integer version; | ||||
|     @Excel(name = "场景code") | ||||
|     private String code; | ||||
|  | ||||
| } | ||||
| @@ -12,13 +12,13 @@ import java.util.Date; | ||||
|  * 包装箱表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-02-22 | ||||
|  * @since  2024-01-29 | ||||
|  */ | ||||
| @Data | ||||
| public class WoPackagingBoxExcel { | ||||
|     @Excel(name = "ID") | ||||
|     private Long id; | ||||
|     @Excel(name = "订单ID") | ||||
|     @Excel(name = "订单ID(舍弃)") | ||||
|     private Long orderId; | ||||
|     @Excel(name = "工单ID(舍弃啊)") | ||||
|     private Long workOrderId; | ||||
| @@ -28,7 +28,7 @@ public class WoPackagingBoxExcel { | ||||
|     private Integer power; | ||||
|     @Excel(name = "等级(舍弃)") | ||||
|     private Integer grade; | ||||
|     @Excel(name = "基板数量,每个包装箱最大20片(舍弃)") | ||||
|     @Excel(name = "基板数量,每个包装箱最大20片") | ||||
|     private Integer substrateQuantity; | ||||
|     @Excel(name = "装箱完成时间,指的是包装完成时间") | ||||
|     private LocalDateTime packagingTime; | ||||
| @@ -74,5 +74,15 @@ public class WoPackagingBoxExcel { | ||||
|     private Integer model; | ||||
|     @Excel(name = "是否到达包装台,1=到达;2=未达到") | ||||
|     private Integer isArrived; | ||||
|     @Excel(name = "订单号") | ||||
|     private String orderNum; | ||||
|     @Excel(name = "产品等级,t_product_level 把code传过来放进去,不要放id") | ||||
|     private String productGrade; | ||||
|     @Excel(name = "节数,前端写死,输入") | ||||
|     private String pitchNumber; | ||||
|     @Excel(name = "最大额定熔断电流,前端写死,输入") | ||||
|     private String maxFuseCurrent; | ||||
|     @Excel(name = "盖板,前端写死,输入") | ||||
|     private String coverName; | ||||
|  | ||||
| } | ||||
| @@ -12,7 +12,7 @@ import java.util.Date; | ||||
|  * 包装箱基板关联表 ( 基板表 ) | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-02-21 | ||||
|  * @since  2023-03-03 | ||||
|  */ | ||||
| @Data | ||||
| public class WoPackagingBoxSubstrateExcel { | ||||
| @@ -48,5 +48,73 @@ public class WoPackagingBoxSubstrateExcel { | ||||
|     private Integer lineBody; | ||||
|     @Excel(name = "功率等级") | ||||
|     private String powerLevel; | ||||
|     @Excel(name = "") | ||||
|     private LocalDateTime lastUpdateTime; | ||||
|     @Excel(name = "补偿后的功率,pmpp") | ||||
|     private Float pmpp; | ||||
|     @Excel(name = "订单名") | ||||
|     private String orderName; | ||||
|     @Excel(name = "") | ||||
|     private Long binclassFl1; | ||||
|     @Excel(name = "") | ||||
|     private Long binclassFl2; | ||||
|     @Excel(name = "") | ||||
|     private Float etaFl1; | ||||
|     @Excel(name = "") | ||||
|     private Float etaFl2; | ||||
|     @Excel(name = "") | ||||
|     private Float ffFl1; | ||||
|     @Excel(name = "") | ||||
|     private Float ffFl2; | ||||
|     @Excel(name = "") | ||||
|     private Float imppFl1; | ||||
|     @Excel(name = "") | ||||
|     private Float imppFl2; | ||||
|     @Excel(name = "") | ||||
|     private Float insolflashcontrolFl1; | ||||
|     @Excel(name = "") | ||||
|     private Float insolflashcontrolFl2; | ||||
|     @Excel(name = "") | ||||
|     private Float insolmppFl1; | ||||
|     @Excel(name = "") | ||||
|     private Float insolmppFl2; | ||||
|     @Excel(name = "") | ||||
|     private Float insolvocFl1; | ||||
|     @Excel(name = "") | ||||
|     private Float insolvocFl2; | ||||
|     @Excel(name = "") | ||||
|     private Float insolFl1; | ||||
|     @Excel(name = "") | ||||
|     private Float insolFl2; | ||||
|     @Excel(name = "") | ||||
|     private Float iscFl1; | ||||
|     @Excel(name = "") | ||||
|     private Float iscFl2; | ||||
|     @Excel(name = "") | ||||
|     private LocalDateTime measTimeFl1; | ||||
|     @Excel(name = "") | ||||
|     private LocalDateTime measTimeFl2; | ||||
|     @Excel(name = "") | ||||
|     private Float pmppFl1; | ||||
|     @Excel(name = "") | ||||
|     private Float pmppFl2; | ||||
|     @Excel(name = "") | ||||
|     private Float tcellFl1; | ||||
|     @Excel(name = "") | ||||
|     private Float tcellFl2; | ||||
|     @Excel(name = "") | ||||
|     private Float tmonicellFl1; | ||||
|     @Excel(name = "") | ||||
|     private Float tmonicellFl2; | ||||
|     @Excel(name = "") | ||||
|     private Float umppFl1; | ||||
|     @Excel(name = "") | ||||
|     private Float umppFl2; | ||||
|     @Excel(name = "") | ||||
|     private Float uocFl1; | ||||
|     @Excel(name = "") | ||||
|     private Float uocFl2; | ||||
|     @Excel(name = "真实PMPP") | ||||
|     private Float actualPmpp; | ||||
|  | ||||
| } | ||||
| @@ -12,21 +12,21 @@ import java.util.Date; | ||||
|  * 功率等级 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-02-20 | ||||
|  * @since  2023-02-22 | ||||
|  */ | ||||
| @Data | ||||
| public class WoPowerLevelExcel { | ||||
|     @Excel(name = "ID") | ||||
|     private Long id; | ||||
|     @Excel(name = "功率等级名称,(现场人员手动录入)") | ||||
|     private Integer powerClass; | ||||
|     private String powerClass; | ||||
|     @Excel(name = "pmpp_low,(现场人员手动录入)") | ||||
|     private Float pmppLow; | ||||
|     @Excel(name = "pmpp_high,(现场人员手动录入)") | ||||
|     private Float pmppHigh; | ||||
|     @Excel(name = "物料号,(现场人员手动录入)") | ||||
|     private String sapMaterialNum; | ||||
|     @Excel(name = "线体,1=F ; 2=S (用于过程1比对,和包装打印)(设备传给我们的)") | ||||
|     @Excel(name = "线体,1=F ; 2=S (用于过程1比对,和包装打印)(设备传给我们的)(一个功率等级可能对应多个线体)") | ||||
|     private Integer lineBody; | ||||
|     @Excel(name = "lable_voc,(手动录入)") | ||||
|     private BigDecimal lableVoc; | ||||
|   | ||||
| @@ -0,0 +1,48 @@ | ||||
| package com.cnbm.generator.code.excel; | ||||
|  | ||||
| import cn.afterturn.easypoi.excel.annotation.Excel; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.time.LocalDateTime; | ||||
| import java.math.BigDecimal; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * 班次时间段 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-12-28 | ||||
|  */ | ||||
| @Data | ||||
| public class WorkingTimeExcel { | ||||
|     @Excel(name = "ID") | ||||
|     private Long id; | ||||
|     @Excel(name = "班次名 ,A/B/C...") | ||||
|     private String orderName; | ||||
|     @Excel(name = "班次开始时间, 0点 - 24点") | ||||
|     private LocalDateTime beginTime; | ||||
|     @Excel(name = "班次结束时间, 0点 - 24点") | ||||
|     private LocalDateTime endTime; | ||||
|     @Excel(name = "备注") | ||||
|     private String remark; | ||||
|     @Excel(name = "删除标志,是否有效:1 可用 0不可用") | ||||
|     private Integer valid; | ||||
|     @Excel(name = "创建人") | ||||
|     private Long creatorId; | ||||
|     @Excel(name = "创建人姓名") | ||||
|     private String creatorName; | ||||
|     @Excel(name = "创建时间") | ||||
|     private LocalDateTime createTime; | ||||
|     @Excel(name = "更新人") | ||||
|     private Long updaterId; | ||||
|     @Excel(name = "更新人姓名") | ||||
|     private String updaterName; | ||||
|     @Excel(name = "更新时间") | ||||
|     private LocalDateTime updateTime; | ||||
|     @Excel(name = "版本号") | ||||
|     private Integer version; | ||||
|     @Excel(name = "班次代码") | ||||
|     private String code; | ||||
|  | ||||
| } | ||||
| @@ -8,7 +8,7 @@ import org.apache.ibatis.annotations.Mapper; | ||||
|  * 打印标签模板表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-02-20 | ||||
|  * @since 2024-01-25 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface PrintModelMapper extends BaseDao<PrintModel> { | ||||
|   | ||||
| @@ -20,6 +20,12 @@ | ||||
|             <id column="IS_PREVIEW" property="isPreview" /> | ||||
|             <id column="CONTENT" property="content" /> | ||||
|             <id column="line_body" property="lineBody" /> | ||||
|             <id column="is_enable" property="isEnable" /> | ||||
|             <id column="scenes" property="scenes" /> | ||||
|             <id column="product_grade" property="productGrade" /> | ||||
|             <id column="pitch_number" property="pitchNumber" /> | ||||
|             <id column="max_fuse_current" property="maxFuseCurrent" /> | ||||
|             <id column="cover_name" property="coverName" /> | ||||
|     </resultMap> | ||||
|  | ||||
| </mapper> | ||||
|   | ||||
| @@ -0,0 +1,16 @@ | ||||
| package com.cnbm.generator.code.mapper; | ||||
|  | ||||
| import com.cnbm.common.dao.BaseDao; | ||||
| import com.cnbm.generator.code.entity.ProductLevel; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| /** | ||||
|  * 产品等级 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-12-28 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface ProductLevelMapper extends BaseDao<ProductLevel> { | ||||
| 	 | ||||
| } | ||||
| @@ -0,0 +1,20 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||
| <mapper namespace="com.cnbm.generator.code.mapper.ProductLevelMapper"> | ||||
|     <resultMap type="com.cnbm.generator.code.entity.ProductLevel" id="ProductLevelMap"> | ||||
|             <id column="id" property="id" /> | ||||
|             <id column="product_name" property="productName" /> | ||||
|             <id column="product_level" property="productLevel" /> | ||||
|             <id column="remark" property="remark" /> | ||||
|             <id column="valid" property="valid" /> | ||||
|             <id column="creator_id" property="creatorId" /> | ||||
|             <id column="creator_name" property="creatorName" /> | ||||
|             <id column="create_time" property="createTime" /> | ||||
|             <id column="updater_id" property="updaterId" /> | ||||
|             <id column="updater_name" property="updaterName" /> | ||||
|             <id column="update_time" property="updateTime" /> | ||||
|             <id column="version" property="version" /> | ||||
|             <id column="code" property="code" /> | ||||
|     </resultMap> | ||||
|  | ||||
| </mapper> | ||||
| @@ -0,0 +1,16 @@ | ||||
| package com.cnbm.generator.code.mapper; | ||||
|  | ||||
| import com.cnbm.common.dao.BaseDao; | ||||
| import com.cnbm.generator.code.entity.Scenes; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| /** | ||||
|  * 场景 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-12-28 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface ScenesMapper extends BaseDao<Scenes> { | ||||
| 	 | ||||
| } | ||||
| @@ -0,0 +1,19 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||
| <mapper namespace="com.cnbm.generator.code.mapper.ScenesMapper"> | ||||
|     <resultMap type="com.cnbm.generator.code.entity.Scenes" id="ScenesMap"> | ||||
|             <id column="id" property="id" /> | ||||
|             <id column="scenes_name" property="scenesName" /> | ||||
|             <id column="remark" property="remark" /> | ||||
|             <id column="valid" property="valid" /> | ||||
|             <id column="creator_id" property="creatorId" /> | ||||
|             <id column="creator_name" property="creatorName" /> | ||||
|             <id column="create_time" property="createTime" /> | ||||
|             <id column="updater_id" property="updaterId" /> | ||||
|             <id column="updater_name" property="updaterName" /> | ||||
|             <id column="update_time" property="updateTime" /> | ||||
|             <id column="version" property="version" /> | ||||
|             <id column="code" property="code" /> | ||||
|     </resultMap> | ||||
|  | ||||
| </mapper> | ||||
| @@ -8,7 +8,7 @@ import org.apache.ibatis.annotations.Mapper; | ||||
|  * 包装箱表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-02-22 | ||||
|  * @since 2024-01-29 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface WoPackagingBoxMapper extends BaseDao<WoPackagingBox> { | ||||
|   | ||||
| @@ -31,6 +31,11 @@ | ||||
|             <id column="LINE_BODY" property="lineBody" /> | ||||
|             <id column="model" property="model" /> | ||||
|             <id column="is_arrived" property="isArrived" /> | ||||
|             <id column="ORDER_NUM" property="orderNum" /> | ||||
|             <id column="product_grade" property="productGrade" /> | ||||
|             <id column="pitch_number" property="pitchNumber" /> | ||||
|             <id column="max_fuse_current" property="maxFuseCurrent" /> | ||||
|             <id column="cover_name" property="coverName" /> | ||||
|     </resultMap> | ||||
|  | ||||
| </mapper> | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import org.apache.ibatis.annotations.Mapper; | ||||
|  * 包装箱基板关联表 ( 基板表 ) | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-02-21 | ||||
|  * @since 2023-03-03 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface WoPackagingBoxSubstrateMapper extends BaseDao<WoPackagingBoxSubstrate> { | ||||
|   | ||||
| @@ -18,6 +18,40 @@ | ||||
|             <id column="SAP_MATERIAL" property="sapMaterial" /> | ||||
|             <id column="LINE_BODY" property="lineBody" /> | ||||
|             <id column="POWER_LEVEL" property="powerLevel" /> | ||||
|             <id column="LAST_UPDATE_TIME" property="lastUpdateTime" /> | ||||
|             <id column="PMPP" property="pmpp" /> | ||||
|             <id column="ORDER_NAME" property="orderName" /> | ||||
|             <id column="BINCLASS_FL1" property="binclassFl1" /> | ||||
|             <id column="BINCLASS_FL2" property="binclassFl2" /> | ||||
|             <id column="ETA_FL1" property="etaFl1" /> | ||||
|             <id column="ETA_FL2" property="etaFl2" /> | ||||
|             <id column="FF_FL1" property="ffFl1" /> | ||||
|             <id column="FF_FL2" property="ffFl2" /> | ||||
|             <id column="IMPP_FL1" property="imppFl1" /> | ||||
|             <id column="IMPP_FL2" property="imppFl2" /> | ||||
|             <id column="InsolFlashControl_FL1" property="insolflashcontrolFl1" /> | ||||
|             <id column="InsolFlashControl_FL2" property="insolflashcontrolFl2" /> | ||||
|             <id column="InsolMPP_FL1" property="insolmppFl1" /> | ||||
|             <id column="InsolMPP_FL2" property="insolmppFl2" /> | ||||
|             <id column="InsolVoc_FL1" property="insolvocFl1" /> | ||||
|             <id column="InsolVoc_FL2" property="insolvocFl2" /> | ||||
|             <id column="Insol_FL1" property="insolFl1" /> | ||||
|             <id column="Insol_FL2" property="insolFl2" /> | ||||
|             <id column="ISC_FL1" property="iscFl1" /> | ||||
|             <id column="ISC_FL2" property="iscFl2" /> | ||||
|             <id column="MEAS_TIME_FL1" property="measTimeFl1" /> | ||||
|             <id column="MEAS_TIME_FL2" property="measTimeFl2" /> | ||||
|             <id column="PMPP_FL1" property="pmppFl1" /> | ||||
|             <id column="PMPP_FL2" property="pmppFl2" /> | ||||
|             <id column="Tcell_FL1" property="tcellFl1" /> | ||||
|             <id column="Tcell_FL2" property="tcellFl2" /> | ||||
|             <id column="Tmonicell_FL1" property="tmonicellFl1" /> | ||||
|             <id column="Tmonicell_FL2" property="tmonicellFl2" /> | ||||
|             <id column="UMPP_FL1" property="umppFl1" /> | ||||
|             <id column="UMPP_FL2" property="umppFl2" /> | ||||
|             <id column="UOC_FL1" property="uocFl1" /> | ||||
|             <id column="UOC_FL2" property="uocFl2" /> | ||||
|             <id column="ACTUAL_PMPP" property="actualPmpp" /> | ||||
|     </resultMap> | ||||
|  | ||||
| </mapper> | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import org.apache.ibatis.annotations.Mapper; | ||||
|  * 功率等级 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-02-20 | ||||
|  * @since 2023-02-22 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface WoPowerLevelMapper extends BaseDao<WoPowerLevel> { | ||||
|   | ||||
| @@ -0,0 +1,16 @@ | ||||
| package com.cnbm.generator.code.mapper; | ||||
|  | ||||
| import com.cnbm.common.dao.BaseDao; | ||||
| import com.cnbm.generator.code.entity.WorkingTime; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| /** | ||||
|  * 班次时间段 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-12-28 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface WorkingTimeMapper extends BaseDao<WorkingTime> { | ||||
| 	 | ||||
| } | ||||
| @@ -0,0 +1,21 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||
| <mapper namespace="com.cnbm.generator.code.mapper.WorkingTimeMapper"> | ||||
|     <resultMap type="com.cnbm.generator.code.entity.WorkingTime" id="WorkingTimeMap"> | ||||
|             <id column="id" property="id" /> | ||||
|             <id column="order_name" property="orderName" /> | ||||
|             <id column="begin_time" property="beginTime" /> | ||||
|             <id column="end_time" property="endTime" /> | ||||
|             <id column="remark" property="remark" /> | ||||
|             <id column="valid" property="valid" /> | ||||
|             <id column="creator_id" property="creatorId" /> | ||||
|             <id column="creator_name" property="creatorName" /> | ||||
|             <id column="create_time" property="createTime" /> | ||||
|             <id column="updater_id" property="updaterId" /> | ||||
|             <id column="updater_name" property="updaterName" /> | ||||
|             <id column="update_time" property="updateTime" /> | ||||
|             <id column="version" property="version" /> | ||||
|             <id column="code" property="code" /> | ||||
|     </resultMap> | ||||
|  | ||||
| </mapper> | ||||
| @@ -1,7 +1,7 @@ | ||||
| -- 菜单初始SQL | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date)VALUES (1627506543435272194, 1067246875800000035, '打印标签模板表', 'packing/printModel', NULL, 0, 'icon-desktop', 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1627506543435272195, 1627506543435272194, '查看', NULL, 'packing:printModel:page,packing:printModel:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1627506543435272196, 1627506543435272194, '新增', NULL, 'packing:printModel:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1627506543435272197, 1627506543435272194, '修改', NULL, 'packing:printModel:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1627506543435272198, 1627506543435272194, '删除', NULL, 'packing:printModel:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1627506543435272199, 1627506543435272194, '导出', NULL, 'packing:printModel:export', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date)VALUES (1750401797217132546, 1067246875800000035, '打印标签模板表', 'code/printModel', NULL, 0, 'icon-desktop', 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1750401797217132547, 1750401797217132546, '查看', NULL, 'code:printModel:page,code:printModel:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1750401797217132548, 1750401797217132546, '新增', NULL, 'code:printModel:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1750401797217132549, 1750401797217132546, '修改', NULL, 'code:printModel:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1750401797217132550, 1750401797217132546, '删除', NULL, 'code:printModel:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1750401797217132551, 1750401797217132546, '导出', NULL, 'code:printModel:export', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
|   | ||||
| @@ -0,0 +1,7 @@ | ||||
| -- 菜单初始SQL | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date)VALUES (1740170405581496322, 1067246875800000035, '产品等级 表', 'code/productLevel', NULL, 0, 'icon-desktop', 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1740170405581496323, 1740170405581496322, '查看', NULL, 'code:productLevel:page,code:productLevel:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1740170405581496324, 1740170405581496322, '新增', NULL, 'code:productLevel:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1740170405581496325, 1740170405581496322, '修改', NULL, 'code:productLevel:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1740170405581496326, 1740170405581496322, '删除', NULL, 'code:productLevel:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1740170405581496327, 1740170405581496322, '导出', NULL, 'code:productLevel:export', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| @@ -0,0 +1,7 @@ | ||||
| -- 菜单初始SQL | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date)VALUES (1740173054175444994, 1067246875800000035, '场景 表', 'code/scenes', NULL, 0, 'icon-desktop', 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1740173054175444995, 1740173054175444994, '查看', NULL, 'code:scenes:page,code:scenes:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1740173054175444996, 1740173054175444994, '新增', NULL, 'code:scenes:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1740173054175444997, 1740173054175444994, '修改', NULL, 'code:scenes:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1740173054175444998, 1740173054175444994, '删除', NULL, 'code:scenes:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1740173054175444999, 1740173054175444994, '导出', NULL, 'code:scenes:export', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| @@ -1,7 +1,7 @@ | ||||
| -- 菜单初始SQL | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date)VALUES (1627855073022648322, 1067246875800000035, '包装箱基板关联表 ( 基板表 )', 'packing/woPackagingBoxSubstrate', NULL, 0, 'icon-desktop', 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1627855073022648323, 1627855073022648322, '查看', NULL, 'packing:woPackagingBoxSubstrate:page,packing:woPackagingBoxSubstrate:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1627855073022648324, 1627855073022648322, '新增', NULL, 'packing:woPackagingBoxSubstrate:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1627855073022648325, 1627855073022648322, '修改', NULL, 'packing:woPackagingBoxSubstrate:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1627855073022648326, 1627855073022648322, '删除', NULL, 'packing:woPackagingBoxSubstrate:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1627855073022648327, 1627855073022648322, '导出', NULL, 'packing:woPackagingBoxSubstrate:export', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date)VALUES (1631549072342364161, 1067246875800000035, '包装箱基板关联表 ( 基板表 )', 'code/woPackagingBoxSubstrate', NULL, 0, 'icon-desktop', 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1631549072342364162, 1631549072342364161, '查看', NULL, 'code:woPackagingBoxSubstrate:page,code:woPackagingBoxSubstrate:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1631549072342364163, 1631549072342364161, '新增', NULL, 'code:woPackagingBoxSubstrate:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1631549072342364164, 1631549072342364161, '修改', NULL, 'code:woPackagingBoxSubstrate:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1631549072342364165, 1631549072342364161, '删除', NULL, 'code:woPackagingBoxSubstrate:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1631549072342364166, 1631549072342364161, '导出', NULL, 'code:woPackagingBoxSubstrate:export', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| -- 菜单初始SQL | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date)VALUES (1628230581925277697, 1067246875800000035, '包装箱表', 'code/woPackagingBox', NULL, 0, 'icon-desktop', 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1628230581925277698, 1628230581925277697, '查看', NULL, 'code:woPackagingBox:page,code:woPackagingBox:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1628230581925277699, 1628230581925277697, '新增', NULL, 'code:woPackagingBox:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1628230581925277700, 1628230581925277697, '修改', NULL, 'code:woPackagingBox:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1628230581925277701, 1628230581925277697, '删除', NULL, 'code:woPackagingBox:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1628230581925277702, 1628230581925277697, '导出', NULL, 'code:woPackagingBox:export', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date)VALUES (1751843769903550465, 1067246875800000035, '包装箱表', 'code/woPackagingBox', NULL, 0, 'icon-desktop', 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1751843769903550466, 1751843769903550465, '查看', NULL, 'code:woPackagingBox:page,code:woPackagingBox:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1751843769903550467, 1751843769903550465, '新增', NULL, 'code:woPackagingBox:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1751843769903550468, 1751843769903550465, '修改', NULL, 'code:woPackagingBox:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1751843769903550469, 1751843769903550465, '删除', NULL, 'code:woPackagingBox:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1751843769903550470, 1751843769903550465, '导出', NULL, 'code:woPackagingBox:export', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| -- 菜单初始SQL | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date)VALUES (1627486255993688065, 1067246875800000035, '功率等级 表', 'packing/woPowerLevel', NULL, 0, 'icon-desktop', 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1627486255993688066, 1627486255993688065, '查看', NULL, 'packing:woPowerLevel:page,packing:woPowerLevel:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1627486255993688067, 1627486255993688065, '新增', NULL, 'packing:woPowerLevel:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1627486255993688068, 1627486255993688065, '修改', NULL, 'packing:woPowerLevel:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1627486255993688069, 1627486255993688065, '删除', NULL, 'packing:woPowerLevel:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1627486255993688070, 1627486255993688065, '导出', NULL, 'packing:woPowerLevel:export', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date)VALUES (1628374086450421761, 1067246875800000035, '功率等级 表', 'code/woPowerLevel', NULL, 0, 'icon-desktop', 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1628374086450421762, 1628374086450421761, '查看', NULL, 'code:woPowerLevel:page,code:woPowerLevel:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1628374086450421763, 1628374086450421761, '新增', NULL, 'code:woPowerLevel:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1628374086450421764, 1628374086450421761, '修改', NULL, 'code:woPowerLevel:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1628374086450421765, 1628374086450421761, '删除', NULL, 'code:woPowerLevel:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1628374086450421766, 1628374086450421761, '导出', NULL, 'code:woPowerLevel:export', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
|   | ||||
| @@ -0,0 +1,7 @@ | ||||
| -- 菜单初始SQL | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date)VALUES (1740170256717230082, 1067246875800000035, '班次时间段 表', 'code/workingTime', NULL, 0, 'icon-desktop', 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1740170256717230083, 1740170256717230082, '查看', NULL, 'code:workingTime:page,code:workingTime:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1740170256717230084, 1740170256717230082, '新增', NULL, 'code:workingTime:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1740170256717230085, 1740170256717230082, '修改', NULL, 'code:workingTime:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1740170256717230086, 1740170256717230082, '删除', NULL, 'code:workingTime:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| INSERT INTO sys_menu(id, pid, name, url, permissions, type, icon, sort, creator, create_date, updater, update_date) VALUES (1740170256717230087, 1740170256717230082, '导出', NULL, 'code:workingTime:export', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | ||||
| @@ -8,7 +8,7 @@ import com.cnbm.generator.code.entity.PrintModel; | ||||
|  * 打印标签模板表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-02-20 | ||||
|  * @since  2024-01-25 | ||||
|  */ | ||||
| public interface PrintModelServiceBiz extends CrudService<PrintModel, PrintModelDTO> { | ||||
|  | ||||
|   | ||||
| @@ -0,0 +1,15 @@ | ||||
| package com.cnbm.generator.code.service; | ||||
|  | ||||
| import com.cnbm.common.service.CrudService; | ||||
| import com.cnbm.generator.code.dto.ProductLevelDTO; | ||||
| import com.cnbm.generator.code.entity.ProductLevel; | ||||
|  | ||||
| /** | ||||
|  * 产品等级 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-12-28 | ||||
|  */ | ||||
| public interface ProductLevelServiceBiz extends CrudService<ProductLevel, ProductLevelDTO> { | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,15 @@ | ||||
| package com.cnbm.generator.code.service; | ||||
|  | ||||
| import com.cnbm.common.service.CrudService; | ||||
| import com.cnbm.generator.code.dto.ScenesDTO; | ||||
| import com.cnbm.generator.code.entity.Scenes; | ||||
|  | ||||
| /** | ||||
|  * 场景 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-12-28 | ||||
|  */ | ||||
| public interface ScenesServiceBiz extends CrudService<Scenes, ScenesDTO> { | ||||
|  | ||||
| } | ||||
| @@ -8,7 +8,7 @@ import com.cnbm.generator.code.entity.WoPackagingBox; | ||||
|  * 包装箱表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-02-22 | ||||
|  * @since  2024-01-29 | ||||
|  */ | ||||
| public interface WoPackagingBoxServiceBiz extends CrudService<WoPackagingBox, WoPackagingBoxDTO> { | ||||
|  | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import com.cnbm.generator.code.entity.WoPackagingBoxSubstrate; | ||||
|  * 包装箱基板关联表 ( 基板表 ) | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-02-21 | ||||
|  * @since  2023-03-03 | ||||
|  */ | ||||
| public interface WoPackagingBoxSubstrateServiceBiz extends CrudService<WoPackagingBoxSubstrate, WoPackagingBoxSubstrateDTO> { | ||||
|  | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import com.cnbm.generator.code.entity.WoPowerLevel; | ||||
|  * 功率等级 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-02-20 | ||||
|  * @since  2023-02-22 | ||||
|  */ | ||||
| public interface WoPowerLevelServiceBiz extends CrudService<WoPowerLevel, WoPowerLevelDTO> { | ||||
|  | ||||
|   | ||||
| @@ -0,0 +1,15 @@ | ||||
| package com.cnbm.generator.code.service; | ||||
|  | ||||
| import com.cnbm.common.service.CrudService; | ||||
| import com.cnbm.generator.code.dto.WorkingTimeDTO; | ||||
| import com.cnbm.generator.code.entity.WorkingTime; | ||||
|  | ||||
| /** | ||||
|  * 班次时间段 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since  2023-12-28 | ||||
|  */ | ||||
| public interface WorkingTimeServiceBiz extends CrudService<WorkingTime, WorkingTimeDTO> { | ||||
|  | ||||
| } | ||||
| @@ -15,7 +15,7 @@ import java.util.Map; | ||||
|  * 打印标签模板表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-02-20 | ||||
|  * @since 2024-01-25 | ||||
|  */ | ||||
| @Service | ||||
| public class PrintModelServiceBizImpl extends CrudServiceImpl<PrintModelMapper, PrintModel, PrintModelDTO> implements PrintModelServiceBiz { | ||||
|   | ||||
| @@ -0,0 +1,34 @@ | ||||
| package com.cnbm.generator.code.service.impl; | ||||
|  | ||||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||||
| import com.cnbm.common.service.impl.CrudServiceImpl; | ||||
| import com.cnbm.generator.code.dto.ProductLevelDTO; | ||||
| import com.cnbm.generator.code.mapper.ProductLevelMapper; | ||||
| import com.cnbm.generator.code.entity.ProductLevel; | ||||
| import com.cnbm.generator.code.service.ProductLevelServiceBiz; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * 产品等级 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-12-28 | ||||
|  */ | ||||
| @Service | ||||
| public class ProductLevelServiceBizImpl extends CrudServiceImpl<ProductLevelMapper, ProductLevel, ProductLevelDTO> implements ProductLevelServiceBiz { | ||||
|  | ||||
|     @Override | ||||
|     public QueryWrapper<ProductLevel> getWrapper(Map<String, Object> params){ | ||||
|         String id = (String)params.get("id"); | ||||
|  | ||||
|         QueryWrapper<ProductLevel> wrapper = new QueryWrapper<>(); | ||||
|         wrapper.eq(StringUtils.isNotBlank(id), "id", id); | ||||
|  | ||||
|         return wrapper; | ||||
|     } | ||||
|  | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,34 @@ | ||||
| package com.cnbm.generator.code.service.impl; | ||||
|  | ||||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||||
| import com.cnbm.common.service.impl.CrudServiceImpl; | ||||
| import com.cnbm.generator.code.dto.ScenesDTO; | ||||
| import com.cnbm.generator.code.mapper.ScenesMapper; | ||||
| import com.cnbm.generator.code.entity.Scenes; | ||||
| import com.cnbm.generator.code.service.ScenesServiceBiz; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * 场景 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-12-28 | ||||
|  */ | ||||
| @Service | ||||
| public class ScenesServiceBizImpl extends CrudServiceImpl<ScenesMapper, Scenes, ScenesDTO> implements ScenesServiceBiz { | ||||
|  | ||||
|     @Override | ||||
|     public QueryWrapper<Scenes> getWrapper(Map<String, Object> params){ | ||||
|         String id = (String)params.get("id"); | ||||
|  | ||||
|         QueryWrapper<Scenes> wrapper = new QueryWrapper<>(); | ||||
|         wrapper.eq(StringUtils.isNotBlank(id), "id", id); | ||||
|  | ||||
|         return wrapper; | ||||
|     } | ||||
|  | ||||
|  | ||||
| } | ||||
| @@ -15,7 +15,7 @@ import java.util.Map; | ||||
|  * 包装箱表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-02-22 | ||||
|  * @since 2024-01-29 | ||||
|  */ | ||||
| @Service | ||||
| public class WoPackagingBoxServiceBizImpl extends CrudServiceImpl<WoPackagingBoxMapper, WoPackagingBox, WoPackagingBoxDTO> implements WoPackagingBoxServiceBiz { | ||||
|   | ||||
| @@ -15,7 +15,7 @@ import java.util.Map; | ||||
|  * 包装箱基板关联表 ( 基板表 ) | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-02-21 | ||||
|  * @since 2023-03-03 | ||||
|  */ | ||||
| @Service | ||||
| public class WoPackagingBoxSubstrateServiceBizImpl extends CrudServiceImpl<WoPackagingBoxSubstrateMapper, WoPackagingBoxSubstrate, WoPackagingBoxSubstrateDTO> implements WoPackagingBoxSubstrateServiceBiz { | ||||
|   | ||||
| @@ -15,7 +15,7 @@ import java.util.Map; | ||||
|  * 功率等级 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-02-20 | ||||
|  * @since 2023-02-22 | ||||
|  */ | ||||
| @Service | ||||
| public class WoPowerLevelServiceBizImpl extends CrudServiceImpl<WoPowerLevelMapper, WoPowerLevel, WoPowerLevelDTO> implements WoPowerLevelServiceBiz { | ||||
|   | ||||
| @@ -0,0 +1,34 @@ | ||||
| package com.cnbm.generator.code.service.impl; | ||||
|  | ||||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||||
| import com.cnbm.common.service.impl.CrudServiceImpl; | ||||
| import com.cnbm.generator.code.dto.WorkingTimeDTO; | ||||
| import com.cnbm.generator.code.mapper.WorkingTimeMapper; | ||||
| import com.cnbm.generator.code.entity.WorkingTime; | ||||
| import com.cnbm.generator.code.service.WorkingTimeServiceBiz; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * 班次时间段 表 | ||||
|  * | ||||
|  * @author codeGenerator | ||||
|  * @since 2023-12-28 | ||||
|  */ | ||||
| @Service | ||||
| public class WorkingTimeServiceBizImpl extends CrudServiceImpl<WorkingTimeMapper, WorkingTime, WorkingTimeDTO> implements WorkingTimeServiceBiz { | ||||
|  | ||||
|     @Override | ||||
|     public QueryWrapper<WorkingTime> getWrapper(Map<String, Object> params){ | ||||
|         String id = (String)params.get("id"); | ||||
|  | ||||
|         QueryWrapper<WorkingTime> wrapper = new QueryWrapper<>(); | ||||
|         wrapper.eq(StringUtils.isNotBlank(id), "id", id); | ||||
|  | ||||
|         return wrapper; | ||||
|     } | ||||
|  | ||||
|  | ||||
| } | ||||
| @@ -23,6 +23,16 @@ | ||||
|             <artifactId>ym-common</artifactId> | ||||
|             <version>1.0-SNAPSHOT</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.cnbm</groupId> | ||||
|             <artifactId>ym-s7</artifactId> | ||||
|             <version>1.0-SNAPSHOT</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.cnbm</groupId> | ||||
|             <artifactId>ym-dynamic-datasource</artifactId> | ||||
|             <version>1.0-SNAPSHOT</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.springframework.security</groupId> | ||||
|             <artifactId>spring-security-core</artifactId> | ||||
| @@ -33,10 +43,5 @@ | ||||
|             <version>1.0-SNAPSHOT</version> | ||||
|             <scope>compile</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.cnbm</groupId> | ||||
|             <artifactId>ym-dynamic-datasource</artifactId> | ||||
|             <version>1.0-SNAPSHOT</version> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| </project> | ||||
							
								
								
									
										15
									
								
								ym-packing/src/main/java/com/cnbm/dispatch/enums/CodeEnum.java
									
									
									
									
									
										Normal dosya
									
								
							
							
						
						
									
										15
									
								
								ym-packing/src/main/java/com/cnbm/dispatch/enums/CodeEnum.java
									
									
									
									
									
										Normal dosya
									
								
							| @@ -0,0 +1,15 @@ | ||||
| package com.cnbm.dispatch.enums; | ||||
|  | ||||
| /** | ||||
|  * @Author: 蔡翔 | ||||
|  * @Date: 2019/10/14 10:07 | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public interface CodeEnum { | ||||
|     Integer getNamespace(); | ||||
|     String getIdentity(); | ||||
|     String getType(); | ||||
|     String getName(); | ||||
|     String getDesc(); | ||||
|     void set(String name,Integer nameSpace,String identity); | ||||
| } | ||||
| @@ -0,0 +1,90 @@ | ||||
| package com.cnbm.dispatch.enums.kuka.step1; | ||||
|  | ||||
| import com.cnbm.s7.s7connector.api.DaveArea; | ||||
| import com.cnbm.s7.s7connector.type.PlcVar; | ||||
|  | ||||
| /** | ||||
|  * @Desc: "" | ||||
|  * @Author: caixiang | ||||
|  * @DATE: 2023/2/21 19:35 | ||||
|  */ | ||||
| public enum Step1Mes2PlcVar { | ||||
|     SubArrivedFinish("SubArrivedFinish", PlcVar.BOOL,1, DaveArea.DB,2000,26,0), | ||||
|  | ||||
|     dLable_Pnom("dLable_Pnom", PlcVar.DINT,1, DaveArea.DB,2000,28,0), | ||||
|     dLable_Voc("dLable_Voc", PlcVar.REAL,1, DaveArea.DB,2000,32,0), | ||||
|     dLable_Isc("dLable_Isc", PlcVar.REAL,1, DaveArea.DB,2000,36,0), | ||||
|     dLable_Vmpp("dLable_Vmpp", PlcVar.REAL,1, DaveArea.DB,2000,40,0), | ||||
|     dLable_Impp("dLable_Vmpp", PlcVar.REAL,1, DaveArea.DB,2000,44,0), | ||||
|     ; | ||||
|  | ||||
|     private String name; | ||||
|     private DaveArea area; | ||||
|     private Integer areaNumber; | ||||
|     private Integer byteOffset; | ||||
|     private Integer bitOffset; | ||||
|     private PlcVar type; | ||||
|     //length = 1代表 非数组;;;       length > 1 代表数组  ;; 注意 length这个参数 是实际plc中 数组的长度,和read操作相关 | ||||
|     //如果是String 类型不用填length 只需要填string类型的起始位置就行了,我会自己去取数据长度(也就是说这里的length并不是string 的长度)。 | ||||
|     private Integer length; | ||||
|  | ||||
|     //这个字段只是给 字符串变量 和 字符串数组 用, 这个字段是plc中设置的最大String长度 | ||||
|     private Integer strSize; | ||||
|  | ||||
|     Step1Mes2PlcVar(String name, PlcVar type, Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset){ | ||||
|         this.name = name; | ||||
|         this.type = type; | ||||
|         this.length = length; | ||||
|         this.area = area; | ||||
|         this.areaNumber = areaNumber; | ||||
|         this.byteOffset = byteOffset; | ||||
|         this.bitOffset = bitOffset; | ||||
|         this.strSize = 0; | ||||
|     } | ||||
|     Step1Mes2PlcVar(String name, PlcVar type, Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset, Integer strSize){ | ||||
|         this.name = name; | ||||
|         this.type = type; | ||||
|         this.length = length; | ||||
|         this.area = area; | ||||
|         this.areaNumber = areaNumber; | ||||
|         this.byteOffset = byteOffset; | ||||
|         this.bitOffset = bitOffset; | ||||
|         this.strSize = strSize; | ||||
|     } | ||||
|  | ||||
|     public Integer getStrSize() { | ||||
|         return strSize; | ||||
|     } | ||||
|  | ||||
|     public void setStrSize(Integer strSize) { | ||||
|         this.strSize = strSize; | ||||
|     } | ||||
|  | ||||
|     public String getName() { | ||||
|         return name; | ||||
|     } | ||||
|  | ||||
|     public DaveArea getArea() { | ||||
|         return area; | ||||
|     } | ||||
|  | ||||
|     public Integer getAreaNumber() { | ||||
|         return areaNumber; | ||||
|     } | ||||
|  | ||||
|     public Integer getBitOffset() { | ||||
|         return bitOffset; | ||||
|     } | ||||
|  | ||||
|     public Integer getByteOffset() { | ||||
|         return byteOffset; | ||||
|     } | ||||
|  | ||||
|     public PlcVar getType() { | ||||
|         return type; | ||||
|     } | ||||
|  | ||||
|     public Integer getLength() { | ||||
|         return length; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,88 @@ | ||||
| package com.cnbm.dispatch.enums.kuka.step1; | ||||
|  | ||||
| import com.cnbm.s7.s7connector.api.DaveArea; | ||||
| import com.cnbm.s7.s7connector.type.PlcVar; | ||||
|  | ||||
| /** | ||||
|  * @Desc: "" | ||||
|  * @Author: caixiang | ||||
|  * @DATE: 2023/2/21 19:35 | ||||
|  */ | ||||
| public enum Step1Plc2MesVar { | ||||
|  | ||||
|     SubArrivedToMes("SubArrivedToMes", PlcVar.BOOL,1, DaveArea.DB,2000,0,0), | ||||
|     SubIdToMes("SubIdToMes",PlcVar.STRING,1,DaveArea.DB,2000,2,0,20), | ||||
|     LineNum("LineNum", PlcVar.UINT,1, DaveArea.DB,2000,24,0), | ||||
|  | ||||
|     ; | ||||
|  | ||||
|     private String name; | ||||
|     private DaveArea area; | ||||
|     private Integer areaNumber; | ||||
|     private Integer byteOffset; | ||||
|     private Integer bitOffset; | ||||
|     private PlcVar type; | ||||
|     //length = 1代表 非数组;;;       length > 1 代表数组  ;; 注意 length这个参数 是实际plc中 数组的长度,和read操作相关 | ||||
|     //如果是String 类型不用填length 只需要填string类型的起始位置就行了,我会自己去取数据长度(也就是说这里的length并不是string 的长度)。 | ||||
|     private Integer length; | ||||
|  | ||||
|     //这个字段只是给 字符串变量 和 字符串数组 用, 这个字段是plc中设置的最大String长度 | ||||
|     private Integer strSize; | ||||
|  | ||||
|     Step1Plc2MesVar(String name, PlcVar type, Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset){ | ||||
|         this.name = name; | ||||
|         this.type = type; | ||||
|         this.length = length; | ||||
|         this.area = area; | ||||
|         this.areaNumber = areaNumber; | ||||
|         this.byteOffset = byteOffset; | ||||
|         this.bitOffset = bitOffset; | ||||
|         this.strSize = 0; | ||||
|     } | ||||
|     Step1Plc2MesVar(String name, PlcVar type, Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset, Integer strSize){ | ||||
|         this.name = name; | ||||
|         this.type = type; | ||||
|         this.length = length; | ||||
|         this.area = area; | ||||
|         this.areaNumber = areaNumber; | ||||
|         this.byteOffset = byteOffset; | ||||
|         this.bitOffset = bitOffset; | ||||
|         this.strSize = strSize; | ||||
|     } | ||||
|  | ||||
|     public Integer getStrSize() { | ||||
|         return strSize; | ||||
|     } | ||||
|  | ||||
|     public void setStrSize(Integer strSize) { | ||||
|         this.strSize = strSize; | ||||
|     } | ||||
|  | ||||
|     public String getName() { | ||||
|         return name; | ||||
|     } | ||||
|  | ||||
|     public DaveArea getArea() { | ||||
|         return area; | ||||
|     } | ||||
|  | ||||
|     public Integer getAreaNumber() { | ||||
|         return areaNumber; | ||||
|     } | ||||
|  | ||||
|     public Integer getBitOffset() { | ||||
|         return bitOffset; | ||||
|     } | ||||
|  | ||||
|     public Integer getByteOffset() { | ||||
|         return byteOffset; | ||||
|     } | ||||
|  | ||||
|     public PlcVar getType() { | ||||
|         return type; | ||||
|     } | ||||
|  | ||||
|     public Integer getLength() { | ||||
|         return length; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,88 @@ | ||||
| package com.cnbm.dispatch.enums.kuka.step2; | ||||
|  | ||||
| import com.cnbm.s7.s7connector.api.DaveArea; | ||||
| import com.cnbm.s7.s7connector.type.PlcVar; | ||||
|  | ||||
| /** | ||||
|  * @Desc: "" | ||||
|  * @Author: caixiang | ||||
|  * @DATE: 2023/2/21 19:35 | ||||
|  */ | ||||
| public enum Step2Mes2PlcVar { | ||||
|  | ||||
|     //心跳变量(这个可以要求电控同事加一个,不和业务关联,只用于通讯) | ||||
|     BoxId("BoxId",PlcVar.STRING,1,DaveArea.DB,2000,714,0,20), | ||||
|     ShelfIsFullFinish("ShelfIsFullFinish",PlcVar.BOOL,1,DaveArea.DB,2000,712,0), | ||||
|  | ||||
|     ; | ||||
|  | ||||
|     private String name; | ||||
|     private DaveArea area; | ||||
|     private Integer areaNumber; | ||||
|     private Integer byteOffset; | ||||
|     private Integer bitOffset; | ||||
|     private PlcVar type; | ||||
|     //length = 1代表 非数组;;;       length > 1 代表数组  ;; 注意 length这个参数 是实际plc中 数组的长度,和read操作相关 | ||||
|     //如果是String 类型不用填length 只需要填string类型的起始位置就行了,我会自己去取数据长度(也就是说这里的length并不是string 的长度)。 | ||||
|     private Integer length; | ||||
|  | ||||
|     //这个字段只是给 字符串变量 和 字符串数组 用, 这个字段是plc中设置的最大String长度 | ||||
|     private Integer strSize; | ||||
|  | ||||
|     Step2Mes2PlcVar(String name, PlcVar type, Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset){ | ||||
|         this.name = name; | ||||
|         this.type = type; | ||||
|         this.length = length; | ||||
|         this.area = area; | ||||
|         this.areaNumber = areaNumber; | ||||
|         this.byteOffset = byteOffset; | ||||
|         this.bitOffset = bitOffset; | ||||
|         this.strSize = 0; | ||||
|     } | ||||
|     Step2Mes2PlcVar(String name, PlcVar type, Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset, Integer strSize){ | ||||
|         this.name = name; | ||||
|         this.type = type; | ||||
|         this.length = length; | ||||
|         this.area = area; | ||||
|         this.areaNumber = areaNumber; | ||||
|         this.byteOffset = byteOffset; | ||||
|         this.bitOffset = bitOffset; | ||||
|         this.strSize = strSize; | ||||
|     } | ||||
|  | ||||
|     public Integer getStrSize() { | ||||
|         return strSize; | ||||
|     } | ||||
|  | ||||
|     public void setStrSize(Integer strSize) { | ||||
|         this.strSize = strSize; | ||||
|     } | ||||
|  | ||||
|     public String getName() { | ||||
|         return name; | ||||
|     } | ||||
|  | ||||
|     public DaveArea getArea() { | ||||
|         return area; | ||||
|     } | ||||
|  | ||||
|     public Integer getAreaNumber() { | ||||
|         return areaNumber; | ||||
|     } | ||||
|  | ||||
|     public Integer getBitOffset() { | ||||
|         return bitOffset; | ||||
|     } | ||||
|  | ||||
|     public Integer getByteOffset() { | ||||
|         return byteOffset; | ||||
|     } | ||||
|  | ||||
|     public PlcVar getType() { | ||||
|         return type; | ||||
|     } | ||||
|  | ||||
|     public Integer getLength() { | ||||
|         return length; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,91 @@ | ||||
| package com.cnbm.dispatch.enums.kuka.step2; | ||||
|  | ||||
| import com.cnbm.s7.s7connector.api.DaveArea; | ||||
| import com.cnbm.s7.s7connector.type.PlcVar; | ||||
|  | ||||
| /** | ||||
|  * @Desc: "" | ||||
|  * @Author: caixiang | ||||
|  * @DATE: 2023/2/21 19:35 | ||||
|  */ | ||||
| public enum Step2Plc2MesVar { | ||||
|  | ||||
|     //心跳变量(这个可以要求电控同事加一个,不和业务关联,只用于通讯) | ||||
|  | ||||
|     ShelfIsFull("ShelfIsFull", PlcVar.BOOL,1, DaveArea.DB,2000,48,0), | ||||
|     SubIdList("SubIdList",PlcVar.STRING_Array,30,DaveArea.DB,2000,50,0,20), | ||||
|     LineNum("LineNum", PlcVar.UINT,1, DaveArea.DB,2000,710,0), | ||||
|     PackageNumberSet("PackageNumberSet", PlcVar.UINT,1, DaveArea.DB,2000,764,0), | ||||
|  | ||||
|     ; | ||||
|  | ||||
|     private String name; | ||||
|     private DaveArea area; | ||||
|     private Integer areaNumber; | ||||
|     private Integer byteOffset; | ||||
|     private Integer bitOffset; | ||||
|     private PlcVar type; | ||||
|     //length = 1代表 非数组;;;       length > 1 代表数组  ;; 注意 length这个参数 是实际plc中 数组的长度,和read操作相关 | ||||
|     //如果是String 类型不用填length 只需要填string类型的起始位置就行了,我会自己去取数据长度(也就是说这里的length并不是string 的长度)。 | ||||
|     private Integer length; | ||||
|  | ||||
|     //这个字段只是给 字符串变量 和 字符串数组 用, 这个字段是plc中设置的最大String长度 | ||||
|     private Integer strSize; | ||||
|  | ||||
|     Step2Plc2MesVar(String name, PlcVar type, Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset){ | ||||
|         this.name = name; | ||||
|         this.type = type; | ||||
|         this.length = length; | ||||
|         this.area = area; | ||||
|         this.areaNumber = areaNumber; | ||||
|         this.byteOffset = byteOffset; | ||||
|         this.bitOffset = bitOffset; | ||||
|         this.strSize = 0; | ||||
|     } | ||||
|     Step2Plc2MesVar(String name, PlcVar type, Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset, Integer strSize){ | ||||
|         this.name = name; | ||||
|         this.type = type; | ||||
|         this.length = length; | ||||
|         this.area = area; | ||||
|         this.areaNumber = areaNumber; | ||||
|         this.byteOffset = byteOffset; | ||||
|         this.bitOffset = bitOffset; | ||||
|         this.strSize = strSize; | ||||
|     } | ||||
|  | ||||
|     public Integer getStrSize() { | ||||
|         return strSize; | ||||
|     } | ||||
|  | ||||
|     public void setStrSize(Integer strSize) { | ||||
|         this.strSize = strSize; | ||||
|     } | ||||
|  | ||||
|     public String getName() { | ||||
|         return name; | ||||
|     } | ||||
|  | ||||
|     public DaveArea getArea() { | ||||
|         return area; | ||||
|     } | ||||
|  | ||||
|     public Integer getAreaNumber() { | ||||
|         return areaNumber; | ||||
|     } | ||||
|  | ||||
|     public Integer getBitOffset() { | ||||
|         return bitOffset; | ||||
|     } | ||||
|  | ||||
|     public Integer getByteOffset() { | ||||
|         return byteOffset; | ||||
|     } | ||||
|  | ||||
|     public PlcVar getType() { | ||||
|         return type; | ||||
|     } | ||||
|  | ||||
|     public Integer getLength() { | ||||
|         return length; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,87 @@ | ||||
| package com.cnbm.dispatch.enums.kuka.step3; | ||||
|  | ||||
| import com.cnbm.s7.s7connector.api.DaveArea; | ||||
| import com.cnbm.s7.s7connector.type.PlcVar; | ||||
|  | ||||
| /** | ||||
|  * @Desc: "" | ||||
|  * @Author: caixiang | ||||
|  * @DATE: 2023/2/21 19:35 | ||||
|  */ | ||||
| public enum Step3Mes2PlcVar { | ||||
|  | ||||
|     //心跳变量(这个可以要求电控同事加一个,不和业务关联,只用于通讯) | ||||
|     ShelfIsFullArrivedFinish("ShelfIsFullArrivedFinish", PlcVar.BOOL,1, DaveArea.DB,2000,762,0), | ||||
|  | ||||
|     ; | ||||
|  | ||||
|     private String name; | ||||
|     private DaveArea area; | ||||
|     private Integer areaNumber; | ||||
|     private Integer byteOffset; | ||||
|     private Integer bitOffset; | ||||
|     private PlcVar type; | ||||
|     //length = 1代表 非数组;;;       length > 1 代表数组  ;; 注意 length这个参数 是实际plc中 数组的长度,和read操作相关 | ||||
|     //如果是String 类型不用填length 只需要填string类型的起始位置就行了,我会自己去取数据长度(也就是说这里的length并不是string 的长度)。 | ||||
|     private Integer length; | ||||
|  | ||||
|     //这个字段只是给 字符串变量 和 字符串数组 用, 这个字段是plc中设置的最大String长度 | ||||
|     private Integer strSize; | ||||
|  | ||||
|     Step3Mes2PlcVar(String name, PlcVar type, Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset){ | ||||
|         this.name = name; | ||||
|         this.type = type; | ||||
|         this.length = length; | ||||
|         this.area = area; | ||||
|         this.areaNumber = areaNumber; | ||||
|         this.byteOffset = byteOffset; | ||||
|         this.bitOffset = bitOffset; | ||||
|         this.strSize = 0; | ||||
|     } | ||||
|     Step3Mes2PlcVar(String name, PlcVar type, Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset, Integer strSize){ | ||||
|         this.name = name; | ||||
|         this.type = type; | ||||
|         this.length = length; | ||||
|         this.area = area; | ||||
|         this.areaNumber = areaNumber; | ||||
|         this.byteOffset = byteOffset; | ||||
|         this.bitOffset = bitOffset; | ||||
|         this.strSize = strSize; | ||||
|     } | ||||
|  | ||||
|     public Integer getStrSize() { | ||||
|         return strSize; | ||||
|     } | ||||
|  | ||||
|     public void setStrSize(Integer strSize) { | ||||
|         this.strSize = strSize; | ||||
|     } | ||||
|  | ||||
|     public String getName() { | ||||
|         return name; | ||||
|     } | ||||
|  | ||||
|     public DaveArea getArea() { | ||||
|         return area; | ||||
|     } | ||||
|  | ||||
|     public Integer getAreaNumber() { | ||||
|         return areaNumber; | ||||
|     } | ||||
|  | ||||
|     public Integer getBitOffset() { | ||||
|         return bitOffset; | ||||
|     } | ||||
|  | ||||
|     public Integer getByteOffset() { | ||||
|         return byteOffset; | ||||
|     } | ||||
|  | ||||
|     public PlcVar getType() { | ||||
|         return type; | ||||
|     } | ||||
|  | ||||
|     public Integer getLength() { | ||||
|         return length; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,90 @@ | ||||
| package com.cnbm.dispatch.enums.kuka.step3; | ||||
|  | ||||
| import com.cnbm.s7.s7connector.api.DaveArea; | ||||
| import com.cnbm.s7.s7connector.type.PlcVar; | ||||
|  | ||||
| /** | ||||
|  * @Desc: "" | ||||
|  * @Author: caixiang | ||||
|  * @DATE: 2023/2/21 19:35 | ||||
|  */ | ||||
| public enum Step3Plc2MesVar { | ||||
|  | ||||
|     //心跳变量(这个可以要求电控同事加一个,不和业务关联,只用于通讯) | ||||
|  | ||||
|     ShelfIsFullArrived("ShelfIsFullArrived", PlcVar.BOOL,1, DaveArea.DB,2000,736,0), | ||||
|     BoxId("BoxId",PlcVar.STRING,60,DaveArea.DB,2000,738,0,20), | ||||
|     LineNum("LineNum", PlcVar.UINT,1, DaveArea.DB,2000,760,0), | ||||
|  | ||||
|     ; | ||||
|  | ||||
|     private String name; | ||||
|     private DaveArea area; | ||||
|     private Integer areaNumber; | ||||
|     private Integer byteOffset; | ||||
|     private Integer bitOffset; | ||||
|     private PlcVar type; | ||||
|     //length = 1代表 非数组;;;       length > 1 代表数组  ;; 注意 length这个参数 是实际plc中 数组的长度,和read操作相关 | ||||
|     //如果是String 类型不用填length 只需要填string类型的起始位置就行了,我会自己去取数据长度(也就是说这里的length并不是string 的长度)。 | ||||
|     private Integer length; | ||||
|  | ||||
|     //这个字段只是给 字符串变量 和 字符串数组 用, 这个字段是plc中设置的最大String长度 | ||||
|     private Integer strSize; | ||||
|  | ||||
|     Step3Plc2MesVar(String name, PlcVar type, Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset){ | ||||
|         this.name = name; | ||||
|         this.type = type; | ||||
|         this.length = length; | ||||
|         this.area = area; | ||||
|         this.areaNumber = areaNumber; | ||||
|         this.byteOffset = byteOffset; | ||||
|         this.bitOffset = bitOffset; | ||||
|         this.strSize = 0; | ||||
|     } | ||||
|     Step3Plc2MesVar(String name, PlcVar type, Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset, Integer strSize){ | ||||
|         this.name = name; | ||||
|         this.type = type; | ||||
|         this.length = length; | ||||
|         this.area = area; | ||||
|         this.areaNumber = areaNumber; | ||||
|         this.byteOffset = byteOffset; | ||||
|         this.bitOffset = bitOffset; | ||||
|         this.strSize = strSize; | ||||
|     } | ||||
|  | ||||
|     public Integer getStrSize() { | ||||
|         return strSize; | ||||
|     } | ||||
|  | ||||
|     public void setStrSize(Integer strSize) { | ||||
|         this.strSize = strSize; | ||||
|     } | ||||
|  | ||||
|     public String getName() { | ||||
|         return name; | ||||
|     } | ||||
|  | ||||
|     public DaveArea getArea() { | ||||
|         return area; | ||||
|     } | ||||
|  | ||||
|     public Integer getAreaNumber() { | ||||
|         return areaNumber; | ||||
|     } | ||||
|  | ||||
|     public Integer getBitOffset() { | ||||
|         return bitOffset; | ||||
|     } | ||||
|  | ||||
|     public Integer getByteOffset() { | ||||
|         return byteOffset; | ||||
|     } | ||||
|  | ||||
|     public PlcVar getType() { | ||||
|         return type; | ||||
|     } | ||||
|  | ||||
|     public Integer getLength() { | ||||
|         return length; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,90 @@ | ||||
| package com.cnbm.dispatch.enums.kuka.step4; | ||||
|  | ||||
| import com.cnbm.s7.s7connector.api.DaveArea; | ||||
| import com.cnbm.s7.s7connector.type.PlcVar; | ||||
|  | ||||
| /** | ||||
|  * @Desc: "" | ||||
|  * @Author: caixiang | ||||
|  * @DATE: 2023/2/21 19:35 | ||||
|  */ | ||||
| public enum Step4Mes2PlcVar { | ||||
|     SubArrivedFinish("SubArrivedFinish", PlcVar.BOOL,1, DaveArea.DB,2001,24,0), | ||||
|  | ||||
|     dLable_Pnom("dLable_Pnom", PlcVar.DINT,1, DaveArea.DB,2001,26,0), | ||||
|     dLable_Voc("dLable_Voc", PlcVar.REAL,1, DaveArea.DB,2001,30,0), | ||||
|     dLable_Isc("dLable_Isc", PlcVar.REAL,1, DaveArea.DB,2001,34,0), | ||||
|     dLable_Vmpp("dLable_Vmpp", PlcVar.REAL,1, DaveArea.DB,2001,38,0), | ||||
|     dLable_Impp("dLable_Vmpp", PlcVar.REAL,1, DaveArea.DB,2001,42,0), | ||||
|     ; | ||||
|  | ||||
|     private String name; | ||||
|     private DaveArea area; | ||||
|     private Integer areaNumber; | ||||
|     private Integer byteOffset; | ||||
|     private Integer bitOffset; | ||||
|     private PlcVar type; | ||||
|     //length = 1代表 非数组;;;       length > 1 代表数组  ;; 注意 length这个参数 是实际plc中 数组的长度,和read操作相关 | ||||
|     //如果是String 类型不用填length 只需要填string类型的起始位置就行了,我会自己去取数据长度(也就是说这里的length并不是string 的长度)。 | ||||
|     private Integer length; | ||||
|  | ||||
|     //这个字段只是给 字符串变量 和 字符串数组 用, 这个字段是plc中设置的最大String长度 | ||||
|     private Integer strSize; | ||||
|  | ||||
|     Step4Mes2PlcVar(String name, PlcVar type, Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset){ | ||||
|         this.name = name; | ||||
|         this.type = type; | ||||
|         this.length = length; | ||||
|         this.area = area; | ||||
|         this.areaNumber = areaNumber; | ||||
|         this.byteOffset = byteOffset; | ||||
|         this.bitOffset = bitOffset; | ||||
|         this.strSize = 0; | ||||
|     } | ||||
|     Step4Mes2PlcVar(String name, PlcVar type, Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset, Integer strSize){ | ||||
|         this.name = name; | ||||
|         this.type = type; | ||||
|         this.length = length; | ||||
|         this.area = area; | ||||
|         this.areaNumber = areaNumber; | ||||
|         this.byteOffset = byteOffset; | ||||
|         this.bitOffset = bitOffset; | ||||
|         this.strSize = strSize; | ||||
|     } | ||||
|  | ||||
|     public Integer getStrSize() { | ||||
|         return strSize; | ||||
|     } | ||||
|  | ||||
|     public void setStrSize(Integer strSize) { | ||||
|         this.strSize = strSize; | ||||
|     } | ||||
|  | ||||
|     public String getName() { | ||||
|         return name; | ||||
|     } | ||||
|  | ||||
|     public DaveArea getArea() { | ||||
|         return area; | ||||
|     } | ||||
|  | ||||
|     public Integer getAreaNumber() { | ||||
|         return areaNumber; | ||||
|     } | ||||
|  | ||||
|     public Integer getBitOffset() { | ||||
|         return bitOffset; | ||||
|     } | ||||
|  | ||||
|     public Integer getByteOffset() { | ||||
|         return byteOffset; | ||||
|     } | ||||
|  | ||||
|     public PlcVar getType() { | ||||
|         return type; | ||||
|     } | ||||
|  | ||||
|     public Integer getLength() { | ||||
|         return length; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,87 @@ | ||||
| package com.cnbm.dispatch.enums.kuka.step4; | ||||
|  | ||||
| import com.cnbm.s7.s7connector.api.DaveArea; | ||||
| import com.cnbm.s7.s7connector.type.PlcVar; | ||||
|  | ||||
| /** | ||||
|  * @Desc: "" | ||||
|  * @Author: caixiang | ||||
|  * @DATE: 2023/2/21 19:35 | ||||
|  */ | ||||
| public enum Step4Plc2MesVar { | ||||
|  | ||||
|     SubArrivedToMes("SubArrivedToMes", PlcVar.BOOL,1, DaveArea.DB,2001,0,0), | ||||
|     SubIdToMes("SubIdToMes",PlcVar.STRING,1,DaveArea.DB,2001,2,0,20), | ||||
|  | ||||
|     ; | ||||
|  | ||||
|     private String name; | ||||
|     private DaveArea area; | ||||
|     private Integer areaNumber; | ||||
|     private Integer byteOffset; | ||||
|     private Integer bitOffset; | ||||
|     private PlcVar type; | ||||
|     //length = 1代表 非数组;;;       length > 1 代表数组  ;; 注意 length这个参数 是实际plc中 数组的长度,和read操作相关 | ||||
|     //如果是String 类型不用填length 只需要填string类型的起始位置就行了,我会自己去取数据长度(也就是说这里的length并不是string 的长度)。 | ||||
|     private Integer length; | ||||
|  | ||||
|     //这个字段只是给 字符串变量 和 字符串数组 用, 这个字段是plc中设置的最大String长度 | ||||
|     private Integer strSize; | ||||
|  | ||||
|     Step4Plc2MesVar(String name, PlcVar type, Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset){ | ||||
|         this.name = name; | ||||
|         this.type = type; | ||||
|         this.length = length; | ||||
|         this.area = area; | ||||
|         this.areaNumber = areaNumber; | ||||
|         this.byteOffset = byteOffset; | ||||
|         this.bitOffset = bitOffset; | ||||
|         this.strSize = 0; | ||||
|     } | ||||
|     Step4Plc2MesVar(String name, PlcVar type, Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset, Integer strSize){ | ||||
|         this.name = name; | ||||
|         this.type = type; | ||||
|         this.length = length; | ||||
|         this.area = area; | ||||
|         this.areaNumber = areaNumber; | ||||
|         this.byteOffset = byteOffset; | ||||
|         this.bitOffset = bitOffset; | ||||
|         this.strSize = strSize; | ||||
|     } | ||||
|  | ||||
|     public Integer getStrSize() { | ||||
|         return strSize; | ||||
|     } | ||||
|  | ||||
|     public void setStrSize(Integer strSize) { | ||||
|         this.strSize = strSize; | ||||
|     } | ||||
|  | ||||
|     public String getName() { | ||||
|         return name; | ||||
|     } | ||||
|  | ||||
|     public DaveArea getArea() { | ||||
|         return area; | ||||
|     } | ||||
|  | ||||
|     public Integer getAreaNumber() { | ||||
|         return areaNumber; | ||||
|     } | ||||
|  | ||||
|     public Integer getBitOffset() { | ||||
|         return bitOffset; | ||||
|     } | ||||
|  | ||||
|     public Integer getByteOffset() { | ||||
|         return byteOffset; | ||||
|     } | ||||
|  | ||||
|     public PlcVar getType() { | ||||
|         return type; | ||||
|     } | ||||
|  | ||||
|     public Integer getLength() { | ||||
|         return length; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,416 @@ | ||||
| package com.cnbm.dispatch.line1; | ||||
|  | ||||
| import cn.hutool.core.date.DateUtil; | ||||
| import com.cnbm.dispatch.enums.kuka.step1.Step1Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step1.Step1Plc2MesVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step2.Step2Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step2.Step2Plc2MesVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step3.Step3Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step3.Step3Plc2MesVar; | ||||
| import com.cnbm.packing.dto.CamlineExtendArgDTO; | ||||
| import com.cnbm.packing.entity.WoPackagingBoxSubstrate; | ||||
| import com.cnbm.packing.entity.WoPowerLevel; | ||||
| import com.cnbm.packing.service.*; | ||||
| import com.cnbm.s7.s7connector.enmuc.S7Client; | ||||
| import com.cnbm.s7.s7connector.type.PlcVar; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.boot.ApplicationArguments; | ||||
| import org.springframework.boot.ApplicationRunner; | ||||
| import org.springframework.core.annotation.Order; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.text.DecimalFormat; | ||||
| import java.text.Format; | ||||
| import java.time.LocalDateTime; | ||||
| import java.util.Date; | ||||
| import java.util.concurrent.Executors; | ||||
| import java.util.concurrent.ScheduledExecutorService; | ||||
| import java.util.concurrent.TimeUnit; | ||||
|  | ||||
| /** | ||||
|  * @Desc: "" | ||||
|  * @Author: caixiang | ||||
|  * @DATE: 2022/12/23 12:33 | ||||
|  */ | ||||
| @Component | ||||
| @Order(value = 1) | ||||
| public class KukaEvent1ThreadLine1 implements ApplicationRunner { | ||||
|     private static final Logger logger = LoggerFactory.getLogger("EVENT1Line1"); | ||||
|  | ||||
|     @Autowired | ||||
|     DynamicDataSourceService service; | ||||
|     @Autowired | ||||
|     WoPowerLevelServiceBiz levelServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoCompensationPowerServiceBiz compensationPowerServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoPackagingBoxSubstrateServiceBiz substrateServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoPackagingBoxServiceBiz boxServiceBiz; | ||||
|  | ||||
|     public KukaEvent1ThreadLine1(){ | ||||
|         this.kukaStep1 = Executors.newScheduledThreadPool(1); | ||||
|     } | ||||
|  | ||||
|     private ScheduledExecutorService kukaStep1; | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * return | ||||
|      *          成功: 返回相应的object对象 | ||||
|      *          失败: 返回null | ||||
|      * */ | ||||
|     private Object read(S7Client s7Client,Step1Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step1Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private Object read(S7Client s7Client, Step2Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step2Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private Object read(S7Client s7Client, Step3Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step3Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     public String getBoxId(String sapMaterial){ | ||||
|         Integer todayBoxNum = service.getTodayBoxNum()+1; | ||||
|         String nowTime = DateUtil.format(new Date(), "yyMMdd"); | ||||
|  | ||||
|         todayBoxNum+=500; | ||||
|         logger.info("BOXID生成Event-------现在生成boxId ,sapMaterial: "+sapMaterial+",nowTime:"+nowTime+",todayBoxNum:"+formateString(todayBoxNum)); | ||||
|         String res = "301"+sapMaterial+nowTime+formateString(todayBoxNum); | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     public String getErrorBoxId(String sapMaterial){ | ||||
|  | ||||
|         String nowTime = DateUtil.format(new Date(), "yyMMdd"); | ||||
|         String mixBoxError = "001"; | ||||
|         String res = "444"+sapMaterial+nowTime+mixBoxError; | ||||
|         logger.info("BOXID生成Event-------现在生成errBoxId ,sapMaterial: "+sapMaterial+",nowTime:"+nowTime); | ||||
|  | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|     public String removeKG(String str){ | ||||
|         return str.substring(0,17); | ||||
|     } | ||||
|  | ||||
|     public static void main(String[] args) { | ||||
|         Integer a = 102; | ||||
|         Format f1 = new DecimalFormat("000"); | ||||
|         System.out.println(f1.format(a)); | ||||
|     } | ||||
|     public String formateString(Integer a){ | ||||
|         Format f1 = new DecimalFormat("000"); | ||||
|         return f1.format(a); | ||||
|     } | ||||
|  | ||||
|     //return true 出现混档了,return false 没有出现混档 | ||||
|     private boolean isMixLevel(String[] subIds,Integer size){ | ||||
|         String correctLevel = substrateServiceBiz.getBySubId(subIds[0]).getPowerLevel(); | ||||
|         String errMsg = "以下基板ID出现混档:"; | ||||
|         boolean res = false; | ||||
|         for(int i=0;i<size;i++){ | ||||
|             String powerLevel = substrateServiceBiz.getBySubId(subIds[i]).getPowerLevel(); | ||||
|  | ||||
|             if(!powerLevel.equals(correctLevel)){ | ||||
|                 errMsg += "基板ID:"+subIds[i]+" 档位:"+powerLevel+", "; | ||||
|                 res = true; | ||||
|             } | ||||
|         } | ||||
|         if(res){ | ||||
|             logger.error(errMsg); | ||||
|         } | ||||
|  | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     @Override | ||||
|     public void run(ApplicationArguments args) throws Exception { | ||||
|  | ||||
|         kukaStep1.scheduleAtFixedRate(new Runnable() { | ||||
|             @Override | ||||
|             public void run() { | ||||
|                 try { | ||||
|  | ||||
|                     //调度开始 | ||||
|                     Integer subArrived = waitingForTarget(Step1Plc2MesVar.SubArrivedToMes, true); | ||||
|                     logger.info(""); | ||||
|                     logger.info("==================================  现在开始执行 过程一 任务( 开始 )   ==================================="); | ||||
|                     if(subArrived != 1){ | ||||
|                         logger.info("标签打印Event---  失败"+" --- "+" MES监听 Step1Plc2MesVar.SubArrivedToMes 是否 等于 1 失败"); | ||||
|                     } else if (subArrived == 2) { | ||||
|                         throw new Exception("MES 监听值出现异常。"); | ||||
|                     } | ||||
|                     logger.info("标签打印Event --- 成功 ---- MES监听到 SubArrivedToMes==true"); | ||||
|  | ||||
|                     //一. 从plc 中获取 subId 和 lineNum | ||||
|                     String subId = (String) read(S7Client.S7_DDJ1,Step1Plc2MesVar.SubIdToMes); | ||||
|                     Integer lineNum = (Integer) read(S7Client.S7_DDJ1,Step1Plc2MesVar.LineNum); | ||||
|                     //把基板ID字符串的空格去掉,因为plc中设置的20位,但实际基板ID就是17位,因为带空格去数据库查询 有问题的。 | ||||
|                     if(subId == null || lineNum == null){ | ||||
|                         logger.info("标签打印Event---  失败"+" --- "+" MES采集到null值,subId:"+subId+",lineNum:"+lineNum); | ||||
|                     } | ||||
|                     subId = removeKG(subId); | ||||
|                     logger.info("标签打印Event --- 成功 ---- MES 从plu中 read 到基板id:"+subId); | ||||
|  | ||||
|                     //二. MES 业务 | ||||
|                     //===============           MES 业务 开始         ================= | ||||
|                     logger.info("=================  现在开始执行 过程一 任务 ( MES 业务 ) ( 开始 )   =================="); | ||||
|                     //1. 从comline数据库中获取 实际pmpp | ||||
|                     float pmppActual = service.getPMPPBySubId(subId); | ||||
|                     //2. 匹配和计算补偿功率 | ||||
|                     float pmppCompensation = compensationPowerServiceBiz.calculCompensationPMPP(pmppActual,lineNum); | ||||
|                     //3. 依据补偿功率,获取工艺参数,并且把这些工艺参数传给kuka | ||||
|                     WoPowerLevel argByPMPP = levelServiceBiz.getArgByPMPP(pmppCompensation, lineNum); | ||||
|                     write(S7Client.S7_DDJ1,Step1Mes2PlcVar.dLable_Pnom,Integer.valueOf(argByPMPP.getPowerClass())); | ||||
|                     write(S7Client.S7_DDJ1,Step1Mes2PlcVar.dLable_Voc,argByPMPP.getLableVoc()); | ||||
|                     write(S7Client.S7_DDJ1,Step1Mes2PlcVar.dLable_Isc,argByPMPP.getLableIsc()); | ||||
|                     write(S7Client.S7_DDJ1,Step1Mes2PlcVar.dLable_Vmpp,argByPMPP.getLableVmpp()); | ||||
|                     write(S7Client.S7_DDJ1,Step1Mes2PlcVar.dLable_Impp,argByPMPP.getLableImpp()); | ||||
|                     logger.info("标签打印Event--- 采集到 基板ID: "+subId+", 线边号:"+lineNum+",从camline 获取到实际pmpp"+pmppActual+",计算后 补偿功率:"+pmppCompensation+",dLable_Pnom: "+argByPMPP.getPowerClass() +",dLable_Voc: "+argByPMPP.getLableVoc()+",dLable_Isc: "+argByPMPP.getLableIsc()+",dLable_Vmpp: "+argByPMPP.getLableVmpp()+",dLable_Impp: "+argByPMPP.getLableImpp()); | ||||
|  | ||||
|  | ||||
|  | ||||
|                     //4. 把基板录到数据库 | ||||
|                     WoPackagingBoxSubstrate woPackagingBoxSubstrate = new WoPackagingBoxSubstrate(); | ||||
|                     woPackagingBoxSubstrate.setLineBody(lineNum); | ||||
|                     woPackagingBoxSubstrate.setPowerLevel(argByPMPP.getPowerClass()); | ||||
|                     woPackagingBoxSubstrate.setSapMaterial(argByPMPP.getSapMaterialNum()); | ||||
|                     woPackagingBoxSubstrate.setWoSubstrateId(subId); | ||||
|                     woPackagingBoxSubstrate.setActualPmpp(pmppActual); | ||||
|                     woPackagingBoxSubstrate.setCreateTime(LocalDateTime.now()); | ||||
|                     //计算后的补偿功率 | ||||
|                     woPackagingBoxSubstrate.setPmpp(pmppCompensation); | ||||
|  | ||||
|  | ||||
|                     //5. 从camline那里获取可变字段 | ||||
|                     CamlineExtendArgDTO extendArgFromCamline = service.getExtendArgFromCamline(subId); | ||||
|                     logger.info("标签打印Event--- 基板ID: "+subId+", 从camline获取PID16~PID22 的实测数据 成功, 数据内容:"+extendArgFromCamline.toString()); | ||||
|                     woPackagingBoxSubstrate.setLastUpdateTime(extendArgFromCamline.getLastUpdateTime()); | ||||
|                     woPackagingBoxSubstrate.setOrderName(extendArgFromCamline.getOrderName()); | ||||
|                     woPackagingBoxSubstrate.setBinclassFl1(extendArgFromCamline.getBinclassFl1()); | ||||
|                     woPackagingBoxSubstrate.setBinclassFl2(extendArgFromCamline.getBinclassFl2()); | ||||
|                     woPackagingBoxSubstrate.setEtaFl1(extendArgFromCamline.getEtaFl1()); | ||||
|                     woPackagingBoxSubstrate.setEtaFl2(extendArgFromCamline.getEtaFl2()); | ||||
|                     woPackagingBoxSubstrate.setFfFl1(extendArgFromCamline.getFfFl1()); | ||||
|                     woPackagingBoxSubstrate.setFfFl2(extendArgFromCamline.getFfFl2()); | ||||
|                     woPackagingBoxSubstrate.setImppFl1(extendArgFromCamline.getImppFl1()); | ||||
|                     woPackagingBoxSubstrate.setImppFl2(extendArgFromCamline.getImppFl2()); | ||||
|                     woPackagingBoxSubstrate.setInsolflashcontrolFl1(extendArgFromCamline.getInsolflashcontrolFl1()); | ||||
|                     woPackagingBoxSubstrate.setInsolflashcontrolFl2(extendArgFromCamline.getInsolflashcontrolFl2()); | ||||
|                     woPackagingBoxSubstrate.setInsolmppFl1(extendArgFromCamline.getInsolmppFl1()); | ||||
|                     woPackagingBoxSubstrate.setInsolmppFl2(extendArgFromCamline.getInsolmppFl2()); | ||||
|                     woPackagingBoxSubstrate.setInsolvocFl1(extendArgFromCamline.getInsolvocFl1()); | ||||
|                     woPackagingBoxSubstrate.setInsolvocFl2(extendArgFromCamline.getInsolvocFl2()); | ||||
|                     woPackagingBoxSubstrate.setInsolFl1(extendArgFromCamline.getInsolFl1()); | ||||
|                     woPackagingBoxSubstrate.setInsolFl2(extendArgFromCamline.getInsolFl2()); | ||||
|                     woPackagingBoxSubstrate.setIscFl1(extendArgFromCamline.getIscFl1()); | ||||
|                     woPackagingBoxSubstrate.setIscFl2(extendArgFromCamline.getIscFl2()); | ||||
|                     woPackagingBoxSubstrate.setMeasTimeFl1(extendArgFromCamline.getMeasTimeFl1()); | ||||
|                     woPackagingBoxSubstrate.setMeasTimeFl2(extendArgFromCamline.getMeasTimeFl2  ()); | ||||
|                     woPackagingBoxSubstrate.setPmppFl1(extendArgFromCamline.getPmppFl1()); | ||||
|                     woPackagingBoxSubstrate.setPmppFl2(extendArgFromCamline.getPmppFl2()); | ||||
|                     woPackagingBoxSubstrate.setTcellFl1(extendArgFromCamline.getTcellFl1()); | ||||
|                     woPackagingBoxSubstrate.setTcellFl2(extendArgFromCamline.getTcellFl2()); | ||||
|                     woPackagingBoxSubstrate.setTmonicellFl1(extendArgFromCamline.getTmonicellFl1()); | ||||
|                     woPackagingBoxSubstrate.setTmonicellFl2(extendArgFromCamline.getTmonicellFl2()); | ||||
|                     woPackagingBoxSubstrate.setUmppFl1(extendArgFromCamline.getUmppFl1()); | ||||
|                     woPackagingBoxSubstrate.setUmppFl2(extendArgFromCamline.getUmppFl2()); | ||||
|                     woPackagingBoxSubstrate.setUocFl1(extendArgFromCamline.getUocFl1()); | ||||
|                     woPackagingBoxSubstrate.setUocFl1(extendArgFromCamline.getUocFl2()); | ||||
|  | ||||
|                     substrateServiceBiz.insert(woPackagingBoxSubstrate); | ||||
|  | ||||
|                     logger.info("标签打印Event--- 基板ID: "+subId+", 录入数据库成功"); | ||||
|                     logger.info("=================  现在开始执行 过程一 任务 ( MES 业务 ) ( 结束 )   =================="); | ||||
|                     //===============           MES 业务 结束         ================= | ||||
|  | ||||
|                     //三. 当MES完成任务后,把MesToPlc.SubArrivedFinish变量置为true,告诉plc,我操作完成了 | ||||
|                     write(S7Client.S7_DDJ1,Step1Mes2PlcVar.SubArrivedFinish,true); | ||||
|                     logger.info("标签打印Event--- 基板ID: "+subId+", SubArrivedFinish,置为true 成功"); | ||||
|                     //四. mes 监控 到PlcToMes.SubArrived==false,就把MesToPlc.SubArrivedFinish置为false | ||||
|                     Integer subArrived2 = waitingForTarget(Step1Plc2MesVar.SubArrivedToMes, false); | ||||
|                     if(subArrived2 != 1){ | ||||
|                         logger.info("标签打印Event--- 失败"+" --- "+"MES监听 Step1Plc2MesVar.SubArrivedToMes 是否 等于 1 失败"); | ||||
|                     }else if (subArrived2 == 2) { | ||||
|                         throw new Exception("MES 监听值出现异常。"); | ||||
|                     } | ||||
|  | ||||
|                     write(S7Client.S7_DDJ1,Step1Mes2PlcVar.SubArrivedFinish,false); | ||||
|                     logger.info("标签打印Event--- 基板ID: "+subId+", SubArrivedFinish,置为 false 成功"); | ||||
|                     logger.info("==================================  现在开始执行 过程一 任务( 结束 )   ==================================="); | ||||
|                     logger.info(""); | ||||
|                 }catch (Throwable e){ | ||||
|                     logger.info("标签打印Event--- 出现异常 : {}",e.getMessage(),e); | ||||
|                 } | ||||
|             } | ||||
|         },1,1, TimeUnit.SECONDS); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * | ||||
|      * arg: | ||||
|      *      Step1Plc2MesVar 参数类型 | ||||
|      *      targetValue        目的值 | ||||
|      * return: | ||||
|      *      2 s7 访问异常; | ||||
|      *      1 成功; | ||||
|      * */ | ||||
|     private Integer waitingForTarget(Step1Plc2MesVar var, Boolean targetValue) { | ||||
|         Integer res = 0; | ||||
|         while (true){ | ||||
|             try { | ||||
|  | ||||
|                 Boolean now = (Boolean) read(S7Client.S7_DDJ1,var); | ||||
|                 //注意:即使now为null ,这里也不会抛出异常,这里很容易产生 空轮询。 | ||||
|                 if(now == null){ | ||||
|                     throw new Exception(""); | ||||
|                 } | ||||
|                 if(targetValue.equals(now)){ | ||||
|                     res = 1; | ||||
|                     break; | ||||
|                 } | ||||
|                 Thread.sleep(200); | ||||
|             }catch (Throwable e){ | ||||
|                 logger.info("S7 数据采集 异常. 监听 变量 :"+var.getName()+" 为目标值:"+targetValue+"失败"); | ||||
|                 res = 2; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return res; | ||||
|     } | ||||
|     /** | ||||
|      * | ||||
|      * arg: | ||||
|      *      Step2Plc2MesVar 参数类型 | ||||
|      *      targetValue        目的值 | ||||
|      * return: | ||||
|      *      2 s7 访问异常; | ||||
|      *      1 成功; | ||||
|      * */ | ||||
|     private Integer waitingForTarget(Step2Plc2MesVar var, Boolean targetValue) { | ||||
|         Integer res = 0; | ||||
|         while (true){ | ||||
|             try { | ||||
|                 Boolean now = (Boolean) read(S7Client.S7_DDJ1,var); | ||||
|                 if(now == null){ | ||||
|                     throw new Exception(""); | ||||
|                 } | ||||
|                 if(targetValue.equals(now)){ | ||||
|                     res = 1; | ||||
|                     break; | ||||
|                 } | ||||
|                 Thread.sleep(200); | ||||
|             }catch (Throwable e){ | ||||
|                 logger.info("S7 数据采集 异常. 监听 变量 :"+var.getName()+" 为目标值:"+targetValue+"失败"); | ||||
|                 res = 2; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return res; | ||||
|     } | ||||
|     /** | ||||
|      * | ||||
|      * arg: | ||||
|      *      Step3Plc2MesVar 参数类型 | ||||
|      *      targetValue        目的值 | ||||
|      * return: | ||||
|      *      2 s7 访问异常; | ||||
|      *      1 成功; | ||||
|      * */ | ||||
|     private Integer waitingForTarget(Step3Plc2MesVar var, Boolean targetValue) { | ||||
|         Integer res = 0; | ||||
|         while (true){ | ||||
|             try { | ||||
|                 Boolean now = (Boolean) read(S7Client.S7_DDJ1,var); | ||||
|                 if(now == null){ | ||||
|                     throw new Exception(""); | ||||
|                 } | ||||
|                 if(targetValue.equals(now)){ | ||||
|                     res = 1; | ||||
|                     break; | ||||
|                 } | ||||
|                 Thread.sleep(200); | ||||
|             }catch (Throwable e){ | ||||
|                 logger.info("S7 数据采集 异常. 监听 变量 :"+var.getName()+" 为目标值:"+targetValue+"失败"); | ||||
|                 res = 2; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return res; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,490 @@ | ||||
| package com.cnbm.dispatch.line1; | ||||
|  | ||||
| import cn.hutool.core.date.DateUtil; | ||||
| import com.cnbm.dispatch.enums.kuka.step1.Step1Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step1.Step1Plc2MesVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step2.Step2Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step2.Step2Plc2MesVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step3.Step3Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step3.Step3Plc2MesVar; | ||||
| import com.cnbm.packing.dto.CamlineSubIdDTO; | ||||
| import com.cnbm.packing.entity.WoPackagingBox; | ||||
| import com.cnbm.packing.entity.WoPackagingBoxSubstrate; | ||||
| import com.cnbm.packing.service.*; | ||||
| import com.cnbm.s7.s7connector.enmuc.S7Client; | ||||
| import com.cnbm.s7.s7connector.type.PlcVar; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.boot.ApplicationArguments; | ||||
| import org.springframework.boot.ApplicationRunner; | ||||
| import org.springframework.core.annotation.Order; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.text.DecimalFormat; | ||||
| import java.text.Format; | ||||
| import java.time.LocalDateTime; | ||||
| import java.util.Arrays; | ||||
| import java.util.Date; | ||||
| import java.util.concurrent.Executors; | ||||
| import java.util.concurrent.ScheduledExecutorService; | ||||
| import java.util.concurrent.TimeUnit; | ||||
|  | ||||
| /** | ||||
|  * @Desc: "" | ||||
|  * @Author: caixiang | ||||
|  * @DATE: 2022/12/23 12:33 | ||||
|  */ | ||||
| @Component | ||||
| @Order(value = 1) | ||||
| public class KukaEvent2ThreadLine1 implements ApplicationRunner { | ||||
|  | ||||
|     private static final Logger logger = LoggerFactory.getLogger("EVENT2Line1"); | ||||
|  | ||||
|  | ||||
|     @Autowired | ||||
|     DynamicDataSourceService service; | ||||
|     @Autowired | ||||
|     WoPowerLevelServiceBiz levelServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoCompensationPowerServiceBiz compensationPowerServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoPackagingBoxSubstrateServiceBiz substrateServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoPackagingBoxServiceBiz boxServiceBiz; | ||||
|  | ||||
|     public KukaEvent2ThreadLine1(){ | ||||
|  | ||||
|         this.kukaStep2 = Executors.newScheduledThreadPool(1); | ||||
|  | ||||
|     } | ||||
|  | ||||
|  | ||||
|     private ScheduledExecutorService kukaStep2; | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * return | ||||
|      *          成功: 返回相应的object对象 | ||||
|      *          失败: 返回null | ||||
|      * */ | ||||
|     private Object read(S7Client s7Client,Step1Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step1Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private Object read(S7Client s7Client, Step2Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step2Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private Object read(S7Client s7Client, Step3Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step3Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     public String getBoxId(String sapMaterial){ | ||||
|         Integer todayBoxNum = service.getTodayBoxNum()+1; | ||||
|         String nowTime = DateUtil.format(new Date(), "yyMMdd"); | ||||
|  | ||||
|         todayBoxNum+=500; | ||||
|         Format f1 = new DecimalFormat("000"); | ||||
|         System.out.println(f1.format(todayBoxNum)); | ||||
|         logger.info("BOXID生成Event-------现在生成boxId ,sapMaterial: "+sapMaterial+",nowTime:"+nowTime+",todayBoxNum:"+formateString(todayBoxNum)); | ||||
|         String res = "301"+sapMaterial+nowTime+formateString(todayBoxNum); | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     public String getErrorBoxId(String sapMaterial){ | ||||
|         Integer todayErrBoxNum = service.getTodayErrBoxNum()+1; | ||||
|         String nowTime = DateUtil.format(new Date(), "yyMMdd"); | ||||
|         String mixBoxError = "001"; | ||||
|         String res = "444"+sapMaterial+nowTime+mixBoxError+"01"+todayErrBoxNum; | ||||
|         logger.info("BOXID生成Event-------现在生成errBoxId ,sapMaterial: "+sapMaterial+",nowTime:"+nowTime+",todayErrBoxNum:"+todayErrBoxNum); | ||||
|  | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|     public String removeKG(String str){ | ||||
|         return str.substring(0,17); | ||||
|     } | ||||
|  | ||||
|     public static void main(String[] args) { | ||||
|         Integer a = 102; | ||||
|         Integer b  = 1; | ||||
|         Format f1 = new DecimalFormat("000"); | ||||
|         System.out.println(f1.format(a)); | ||||
|         System.out.println(f1.format(b)); | ||||
|     } | ||||
|     public String formateString(Integer a){ | ||||
|         Format f1 = new DecimalFormat("000"); | ||||
|         return f1.format(a); | ||||
|     } | ||||
|  | ||||
|     //return true 出现混档了,return false 没有出现混档 | ||||
| //    private boolean isMixLevel(String[] subIds,Integer size){ | ||||
| //        WoPackagingBoxSubstrate bySubId = substrateServiceBiz.getBySubId(subIds[0]); | ||||
| //        String correctLevel = null; | ||||
| //        String powerLevel = null; | ||||
| //        //如果 我们数据库没有  去camline 数据库里面取  --  开始 | ||||
| //        if(bySubId == null){ | ||||
| //            logger.info("BOXID生成Event-------检查是否混箱时,发现数据库中 无subId:"+ subIds[0]+"现在从camline 系统获取这个基板相关信息"); | ||||
| //            //todo | ||||
| //            CamlineSubIdDTO subIdByCamline = service.getSubIdByCamline(subIds[0]); | ||||
| //            logger.info("BOXID生成Event-------检查是否混箱时,发现数据库中 无subId:"+ subIds[0]+"现在从camline 系统获取这个基板相关信息是:"+subIdByCamline); | ||||
| // | ||||
| //            correctLevel = subIdByCamline.getPowerLevel(); | ||||
| //            powerLevel = subIdByCamline.getSapMaterial(); | ||||
| //        }else { | ||||
| //            correctLevel = bySubId.getPowerLevel(); | ||||
| //            powerLevel = bySubId.getSapMaterial(); | ||||
| //        } | ||||
| //        String errMsg = "以下基板ID出现混档:"; | ||||
| //        boolean res = false; | ||||
| //        for(int i=0;i<size;i++){ | ||||
| // | ||||
| //            if(!powerLevel.equals(correctLevel)){ | ||||
| //                errMsg += "基板ID:"+subIds[i]+" 档位:"+powerLevel+", "; | ||||
| //                res = true; | ||||
| //            } | ||||
| //        } | ||||
| //        if(res){ | ||||
| //            logger.error(errMsg); | ||||
| //        } | ||||
| // | ||||
| //        return res; | ||||
| //    } | ||||
|     private CamlineSubIdDTO getFromCamline(String subId){ | ||||
|         return service.getSubIdByCamline(subId); | ||||
|     } | ||||
|     private boolean isMixLevel(String[] subIds,Integer size){ | ||||
|         WoPackagingBoxSubstrate bySubId = substrateServiceBiz.getBySubId(subIds[0]); | ||||
|         String correctLevel = null; | ||||
|  | ||||
|         //如果 我们数据库没有  去camline 数据库里面取  --  开始 | ||||
|         if(bySubId == null){ | ||||
|             logger.info("BOXID生成Event-------检查是否混箱时,发现数据库中 无subId:"+ subIds[0]+"现在从camline 系统获取这个基板相关信息"); | ||||
|             //todo | ||||
|             CamlineSubIdDTO subIdByCamline = service.getSubIdByCamline(subIds[0]); | ||||
|             logger.info("BOXID生成Event-------检查是否混箱时,发现数据库中 无subId:"+ subIds[0]+"现在从camline 系统获取这个基板相关信息是:"+subIdByCamline); | ||||
|  | ||||
|             correctLevel = subIdByCamline.getPowerLevel(); | ||||
|         }else { | ||||
|             correctLevel = bySubId.getPowerLevel(); | ||||
|         } | ||||
|  | ||||
|  | ||||
|         String errMsg = "以下基板ID出现混档:"; | ||||
|         boolean res = false; | ||||
|         for(int i=0;i<size;i++){ | ||||
|             WoPackagingBoxSubstrate innerSub = substrateServiceBiz.getBySubId(subIds[i]); | ||||
|             String powerLevel = null; | ||||
|             if(innerSub==null){ | ||||
|                 powerLevel = getFromCamline(subIds[i]).getPowerLevel(); | ||||
|             }else { | ||||
|                 powerLevel = innerSub.getPowerLevel(); | ||||
|             } | ||||
|  | ||||
|             if(!powerLevel.equals(correctLevel)){ | ||||
|                 errMsg += "基板ID:"+subIds[i]+" 档位:"+powerLevel+", "; | ||||
|                 res = true; | ||||
|             } | ||||
|         } | ||||
|         if(res){ | ||||
|             logger.error(errMsg); | ||||
|         } | ||||
|  | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     @Override | ||||
|     public void run(ApplicationArguments args) throws Exception { | ||||
|         kukaStep2.scheduleAtFixedRate(new Runnable() { | ||||
|             @Override | ||||
|             public void run() { | ||||
|                 try { | ||||
|  | ||||
|                     //调度开始 | ||||
|                     Integer shelfIsFull = waitingForTarget(Step2Plc2MesVar.ShelfIsFull, true); | ||||
|                     logger.info(""); | ||||
|                     logger.info("==================================  现在开始执行 过程二 任务( 开始 )   ==================================="); | ||||
|                     if(shelfIsFull != 1){ | ||||
|                         logger.info("BOXID生成Event-------失败"+" --- "+"MES监听 Step2Plc2MesVar.ShelfIsFull 是否 等于 1 失败"); | ||||
|                     }else if(shelfIsFull == 2){ | ||||
|                         throw new Exception("MES 监听值出现异常。"); | ||||
|                     } | ||||
|  | ||||
|                     //一. 从plc 中获取 subIdList 和 lineNum | ||||
|                     String[] subIdList = (String[])read(S7Client.S7_DDJ1,Step2Plc2MesVar.SubIdList); | ||||
|                     Integer listSize = (Integer)read(S7Client.S7_DDJ1,Step2Plc2MesVar.PackageNumberSet)-1; | ||||
|  | ||||
|  | ||||
|                     //二. MES 业务 | ||||
|                     //===============           MES 业务 开始         ================= | ||||
|                     //1.MES 生成BoxId | ||||
|                     if(subIdList.length<=0){ | ||||
|                         logger.info("BOXID生成Event-------失败"+" --- "+"从plc里面获取到的基板列表 为空"); | ||||
|                         throw new Exception("BOXID生成Event失败-------kuka机械手 取到了空箱"); | ||||
|                     } | ||||
|                     if(listSize == null){ | ||||
|                         logger.info("BOXID生成Event-------失败"+" --- "+"从plc里面获取到的listSize 为null"); | ||||
|                         throw new Exception("BOXID生成Event失败-------listSize 为null"); | ||||
|                     } | ||||
|  | ||||
|                     //真实的基板ID 就是17位的,plc读取过来,有空格,要把后面3位空格去掉就行了。 | ||||
|                     for(int i=0;i<subIdList.length;i++){ | ||||
|                         subIdList[i] = removeKG(subIdList[i]); | ||||
|                     } | ||||
|                     logger.info("BOXID生成Event-------获取到基板列表:"+ Arrays.toString(subIdList)+",基板数量:"+listSize); | ||||
|  | ||||
|                     WoPackagingBoxSubstrate bySubId = substrateServiceBiz.getBySubId(subIdList[0]); | ||||
|                     logger.info("BOXID生成Event-------依据subId"+subIdList[0]+"去qgs数据库 查询数据,数据内容:"+bySubId); | ||||
|  | ||||
|  | ||||
|                     //如果我们系统中找不到这块基板那么就去camline里面找 | ||||
| //                    if(bySubId == null){ | ||||
| //                        logger.info("BOXID生成Event-------数据库中 无subId:"+ subIdList[0]+"现在从camline 系统获取这个基板相关信息"); | ||||
| //                        //todo | ||||
| //                        CamlineSubIdDTO subIdByCamline = service.getSubIdByCamline(subIdList[0]); | ||||
| //                        logger.info("BOXID生成Event-------camline 中关于此基板信息:"+ subIdByCamline); | ||||
| // | ||||
| //                        bySubId = new WoPackagingBoxSubstrate(); | ||||
| //                        bySubId.setPowerLevel(subIdByCamline.getPowerLevel()); | ||||
| //                        bySubId.setSapMaterial(subIdByCamline.getSapMaterial()); | ||||
| //                        bySubId.setLineBody(1); | ||||
| //                    } | ||||
|                     if(bySubId == null){ | ||||
|                         logger.info("BOXID生成Event-------数据库中 无subId:"+ subIdList[0]); | ||||
|                         throw new Exception("BOXID生成Event-------数据库中 无subId:"+ subIdList[0]); | ||||
|                     } | ||||
|  | ||||
|  | ||||
|                     //校验是否存在混档位情况      -- 开始 | ||||
|                     String boxId = ""; | ||||
|                     if(isMixLevel(subIdList,listSize)){ | ||||
|                         //出现混档 | ||||
|                         logger.info("BOXID生成Event-------subIdList :"+Arrays.asList(subIdList)+"出现混档"); | ||||
|                         boxId = getErrorBoxId(bySubId.getSapMaterial()); | ||||
|  | ||||
|                     }else { | ||||
|                         //正常情况 | ||||
|                         logger.info("BOXID生成Event-------subIdList :"+Arrays.asList(subIdList)+"没有出现混档"); | ||||
|                         boxId = getBoxId(bySubId.getSapMaterial()); | ||||
|                     } | ||||
|                     logger.info("BOXID生成Event-------subIdList :"+Arrays.asList(subIdList)+"isMixLevel 校验结束"); | ||||
|                     //校验是否存在混档位情况      -- 结束 | ||||
|  | ||||
|  | ||||
|                     logger.info("BOXID生成Event-------mes 生成的boxId :"+ boxId); | ||||
|                     //2. 依次update 基板表,把boxId 赋予这些基板 | ||||
|                     for(int i=0;i<listSize;i++){ | ||||
|                         substrateServiceBiz.updatePackagingBoxIdAndSlotByWoSubstrateId(boxId,(i+1),subIdList[i]); | ||||
|                     } | ||||
|                     //3.去camline数据库 查询此基板ID 对应的订单 | ||||
|                     String orderNameBySubId = service.getOrderNameBySubId(subIdList[0]); | ||||
|                     //4. box信息录入到box表 | ||||
|                     WoPackagingBox woPackagingBox = new WoPackagingBox(); | ||||
|                     woPackagingBox.setBoxNo(boxId); | ||||
|                     woPackagingBox.setSubstrateQuantity(listSize); | ||||
|                     woPackagingBox.setPackagingTime(LocalDateTime.now()); | ||||
|                     woPackagingBox.setPowerLevel(bySubId.getPowerLevel()); | ||||
|                     woPackagingBox.setLineBody(bySubId.getLineBody()); | ||||
|                     woPackagingBox.setSapMaterial(bySubId.getSapMaterial()); | ||||
|                     woPackagingBox.setOrderNum(orderNameBySubId); | ||||
|                     //1-手动模式,2-自动模式 | ||||
|                     woPackagingBox.setModel(2); | ||||
|                     woPackagingBox.setCreateTime(LocalDateTime.now()); | ||||
|                     woPackagingBox.setPackagingTime(LocalDateTime.now()); | ||||
|                     boxServiceBiz.insert(woPackagingBox); | ||||
|                     logger.info("BOXID生成Event-------boxId :"+ boxId+"写入数据库成功"); | ||||
|                     //===============           MES 业务 结束         ================= | ||||
|  | ||||
|                     //三. 把生成的BoxId 告诉kuka | ||||
|                     write(S7Client.S7_DDJ1,Step2Mes2PlcVar.BoxId,boxId); | ||||
|                     logger.info("BOXID生成Event-------boxId :"+ boxId+"传给PLC 成功"); | ||||
|  | ||||
|                     //四. 当MES完成任务后,把MesToPlc.ShelfIsFullFinish变量置为true,告诉plc,我操作完成了 | ||||
|                     write(S7Client.S7_DDJ1,Step2Mes2PlcVar.ShelfIsFullFinish,true); | ||||
|                     logger.info("BOXID生成Event-------boxId :"+ boxId+"ShelfIsFullFinish 置为true 成功"); | ||||
|                     //四. mes 监控 到PlcToMes.SubArrived==false,就把MesToPlc.SubArrivedFinish置为false | ||||
|                     Integer subArrived2 = waitingForTarget(Step2Plc2MesVar.ShelfIsFull, false); | ||||
|                     if(subArrived2 != 1){ | ||||
|                         logger.info("BOXID生成Event-------失败"+" --- "+"步骤1.  MES监听 Step1Plc2MesVar.SubArrivedToMes 是否 等于 1 失败"); | ||||
|                     }else if(subArrived2 == 2){ | ||||
|                         throw new Exception("MES 监听值出现异常。"); | ||||
|                     } | ||||
|                     write(S7Client.S7_DDJ1,Step2Mes2PlcVar.ShelfIsFullFinish,false); | ||||
|                     logger.info("BOXID生成Event-------boxId :"+ boxId+"ShelfIsFullFinish 置为false 成功,Event2 成功结束"); | ||||
|                     logger.info("==================================  现在开始执行 过程二 任务( 结束 )   ==================================="); | ||||
|                     logger.info(""); | ||||
|  | ||||
|                 }catch (Throwable e){ | ||||
| //                    logger.info("BOXID生成Event-------  出现异常:" + e.toString()); | ||||
|                     logger.info("BOXID生成Event--- 出现异常 : {}",e.getMessage(),e); | ||||
|                 } | ||||
|             } | ||||
|         },1,1, TimeUnit.SECONDS); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * | ||||
|      * arg: | ||||
|      *      Step1Plc2MesVar 参数类型 | ||||
|      *      targetValue        目的值 | ||||
|      * return: | ||||
|      *      2 s7 访问异常; | ||||
|      *      1 成功; | ||||
|      * */ | ||||
|     private Integer waitingForTarget(Step1Plc2MesVar var, Boolean targetValue) { | ||||
|         Integer res = 0; | ||||
|         while (true){ | ||||
|             try { | ||||
|  | ||||
|                 Boolean now = (Boolean) read(S7Client.S7_DDJ1,var); | ||||
|                 //注意:即使now为null ,这里也不会抛出异常,这里很容易产生 空轮询。 | ||||
|                 if(now == null){ | ||||
|                     throw new Exception(""); | ||||
|                 } | ||||
|                 if(targetValue.equals(now)){ | ||||
|                     res = 1; | ||||
|                     break; | ||||
|                 } | ||||
|                 Thread.sleep(200); | ||||
|             }catch (Throwable e){ | ||||
|                 logger.info("S7 数据采集 异常. 监听 变量 :"+var.getName()+" 为目标值:"+targetValue+"失败"); | ||||
|                 res = 2; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return res; | ||||
|     } | ||||
|     /** | ||||
|      * | ||||
|      * arg: | ||||
|      *      Step2Plc2MesVar 参数类型 | ||||
|      *      targetValue        目的值 | ||||
|      * return: | ||||
|      *      2 s7 访问异常; | ||||
|      *      1 成功; | ||||
|      * */ | ||||
|     private Integer waitingForTarget(Step2Plc2MesVar var, Boolean targetValue) { | ||||
|         Integer res = 0; | ||||
|         while (true){ | ||||
|             try { | ||||
|                 Boolean now = (Boolean) read(S7Client.S7_DDJ1,var); | ||||
|                 if(now == null){ | ||||
|                     throw new Exception(""); | ||||
|                 } | ||||
|                 if(targetValue.equals(now)){ | ||||
|                     res = 1; | ||||
|                     break; | ||||
|                 } | ||||
|                 Thread.sleep(200); | ||||
|             }catch (Throwable e){ | ||||
|                 logger.info("S7 数据采集 异常. 监听 变量 :"+var.getName()+" 为目标值:"+targetValue+"失败"); | ||||
|                 res = 2; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return res; | ||||
|     } | ||||
|     /** | ||||
|      * | ||||
|      * arg: | ||||
|      *      Step3Plc2MesVar 参数类型 | ||||
|      *      targetValue        目的值 | ||||
|      * return: | ||||
|      *      2 s7 访问异常; | ||||
|      *      1 成功; | ||||
|      * */ | ||||
|     private Integer waitingForTarget(Step3Plc2MesVar var, Boolean targetValue) { | ||||
|         Integer res = 0; | ||||
|         while (true){ | ||||
|             try { | ||||
|                 Boolean now = (Boolean) read(S7Client.S7_DDJ1,var); | ||||
|                 if(now == null){ | ||||
|                     throw new Exception(""); | ||||
|                 } | ||||
|                 if(targetValue.equals(now)){ | ||||
|                     res = 1; | ||||
|                     break; | ||||
|                 } | ||||
|                 Thread.sleep(200); | ||||
|             }catch (Throwable e){ | ||||
|                 logger.info("S7 数据采集 异常. 监听 变量 :"+var.getName()+" 为目标值:"+targetValue+"失败"); | ||||
|                 res = 2; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return res; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,354 @@ | ||||
| package com.cnbm.dispatch.line1; | ||||
|  | ||||
| import cn.hutool.core.date.DateUtil; | ||||
| import com.cnbm.dispatch.enums.kuka.step1.Step1Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step1.Step1Plc2MesVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step2.Step2Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step2.Step2Plc2MesVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step3.Step3Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step3.Step3Plc2MesVar; | ||||
| import com.cnbm.packing.service.*; | ||||
| import com.cnbm.s7.s7connector.enmuc.S7Client; | ||||
| import com.cnbm.s7.s7connector.type.PlcVar; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.boot.ApplicationArguments; | ||||
| import org.springframework.boot.ApplicationRunner; | ||||
| import org.springframework.core.annotation.Order; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.text.DecimalFormat; | ||||
| import java.text.Format; | ||||
| import java.util.Date; | ||||
| import java.util.concurrent.Executors; | ||||
| import java.util.concurrent.ScheduledExecutorService; | ||||
| import java.util.concurrent.TimeUnit; | ||||
|  | ||||
| /** | ||||
|  * @Desc: "" | ||||
|  * @Author: caixiang | ||||
|  * @DATE: 2022/12/23 12:33 | ||||
|  */ | ||||
| @Component | ||||
| @Order(value = 1) | ||||
| public class KukaEvent3ThreadLine1 implements ApplicationRunner { | ||||
|  | ||||
|     private static final Logger logger = LoggerFactory.getLogger("EVENT3Line1"); | ||||
|  | ||||
|     @Autowired | ||||
|     DynamicDataSourceService service; | ||||
|     @Autowired | ||||
|     WoPowerLevelServiceBiz levelServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoCompensationPowerServiceBiz compensationPowerServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoPackagingBoxSubstrateServiceBiz substrateServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoPackagingBoxServiceBiz boxServiceBiz; | ||||
|  | ||||
|     public KukaEvent3ThreadLine1(){ | ||||
|         this.kukaStep3 = Executors.newScheduledThreadPool(1); | ||||
|     } | ||||
|  | ||||
|  | ||||
|  | ||||
|     private ScheduledExecutorService kukaStep3; | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * return | ||||
|      *          成功: 返回相应的object对象 | ||||
|      *          失败: 返回null | ||||
|      * */ | ||||
|     private Object read(S7Client s7Client,Step1Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step1Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private Object read(S7Client s7Client, Step2Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step2Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private Object read(S7Client s7Client, Step3Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step3Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     public String getBoxId(String sapMaterial){ | ||||
|         Integer todayBoxNum = service.getTodayBoxNum()+1; | ||||
|         String nowTime = DateUtil.format(new Date(), "yyMMdd"); | ||||
|  | ||||
|         todayBoxNum+=500; | ||||
|         logger.info("BOXID生成Event-------现在生成boxId ,sapMaterial: "+sapMaterial+",nowTime:"+nowTime+",todayBoxNum:"+formateString(todayBoxNum)); | ||||
|         String res = "301"+sapMaterial+nowTime+formateString(todayBoxNum); | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     public String getErrorBoxId(String sapMaterial){ | ||||
|  | ||||
|         String nowTime = DateUtil.format(new Date(), "yyMMdd"); | ||||
|         String mixBoxError = "001"; | ||||
|         String res = "444"+sapMaterial+nowTime+mixBoxError; | ||||
|         logger.info("BOXID生成Event-------现在生成errBoxId ,sapMaterial: "+sapMaterial+",nowTime:"+nowTime); | ||||
|  | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|     public String removeKG(String str){ | ||||
|         return str.substring(0,17); | ||||
|     } | ||||
|  | ||||
|     public static void main(String[] args) { | ||||
|         Integer a = 102; | ||||
|         Format f1 = new DecimalFormat("000"); | ||||
|         System.out.println(f1.format(a)); | ||||
|     } | ||||
|     public String formateString(Integer a){ | ||||
|         Format f1 = new DecimalFormat("000"); | ||||
|         return f1.format(a); | ||||
|     } | ||||
|  | ||||
|     //return true 出现混档了,return false 没有出现混档 | ||||
|     private boolean isMixLevel(String[] subIds,Integer size){ | ||||
|         String correctLevel = substrateServiceBiz.getBySubId(subIds[0]).getPowerLevel(); | ||||
|         String errMsg = "以下基板ID出现混档:"; | ||||
|         boolean res = false; | ||||
|         for(int i=0;i<size;i++){ | ||||
|             String powerLevel = substrateServiceBiz.getBySubId(subIds[i]).getPowerLevel(); | ||||
|  | ||||
|             if(!powerLevel.equals(correctLevel)){ | ||||
|                 errMsg += "基板ID:"+subIds[i]+" 档位:"+powerLevel+", "; | ||||
|                 res = true; | ||||
|             } | ||||
|         } | ||||
|         if(res){ | ||||
|             logger.error(errMsg); | ||||
|         } | ||||
|  | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     @Override | ||||
|     public void run(ApplicationArguments args) throws Exception { | ||||
|  | ||||
|         kukaStep3.scheduleAtFixedRate(new Runnable() { | ||||
|             @Override | ||||
|             public void run() { | ||||
|                 try { | ||||
|  | ||||
|                     //调度开始 | ||||
|                     Integer shelfIsFull = waitingForTarget(Step3Plc2MesVar.ShelfIsFullArrived, true); | ||||
|                     logger.info(""); | ||||
|                     logger.info("==================================  现在开始执行 过程三 任务( 开始 )   ==================================="); | ||||
|                     if(shelfIsFull != 1){ | ||||
|                         logger.info("装箱单打印Event------失败"+" --- "+"MES监听 Step3Plc2MesVar.ShelfIsFullArrived 是否 等于 1 失败"); | ||||
|                     }else if(shelfIsFull == 2){ | ||||
|                         throw new Exception("MES 监听值出现异常。"); | ||||
|                     } | ||||
|  | ||||
|                     //一. 从plc 中获取 subIdList 和 lineNum | ||||
|                     String boxId = (String)read(S7Client.S7_DDJ1,Step3Plc2MesVar.BoxId); | ||||
|                     Integer lineNum = (Integer) read(S7Client.S7_DDJ1,Step3Plc2MesVar.LineNum); | ||||
|                     if(boxId == null){ | ||||
|                         logger.info("装箱单打印Event-------失败"+" --- "+"从plc里面获取到的boxId 为null"); | ||||
|                         throw new Exception("装箱单打印Event-------boxId 为null"); | ||||
|                     } | ||||
|                     logger.info("装箱单打印Event------到达站台的boxId :"+boxId); | ||||
|  | ||||
|                     //二. MES 业务 | ||||
|                     //===============           MES 业务 开始         ================= | ||||
|                     //1. box信息录入到box表 | ||||
|                     boxServiceBiz.updateIsArrivedByBoxNo(1,boxId); | ||||
|                     logger.info("装箱单打印Event------boxId :"+boxId+"更新数据库成功"); | ||||
|                     //===============           MES 业务 结束         ================= | ||||
|  | ||||
|  | ||||
|                     //四. 当MES完成任务后,把MesToPlc.ShelfIsFullArrivedFinish变量置为true,告诉plc,我操作完成了 | ||||
|                     write(S7Client.S7_DDJ1,Step3Mes2PlcVar.ShelfIsFullArrivedFinish,true); | ||||
|                     logger.info("装箱单打印Event------boxId :"+boxId+", ShelfIsFullArrivedFinish置为true 成功"); | ||||
|                     //四. mes 监控 到PlcToMes.SubArrived==false,就把MesToPlc.SubArrivedFinish置为false | ||||
|                     Integer subArrived2 = waitingForTarget(Step3Plc2MesVar.ShelfIsFullArrived, false); | ||||
|                     if(subArrived2 != 1){ | ||||
|                         logger.info("装箱单打印Event------失败"+" --- "+"步骤1.  MES监听 Step3Plc2MesVar.ShelfIsFullArrived 是否 等于 1 失败"); | ||||
|                     }else if(subArrived2 == 2){ | ||||
|                         throw new Exception("MES 监听值出现异常。"); | ||||
|                     } | ||||
|                     logger.info("装箱单打印Event------boxId :"+boxId+", 监听到subArrived=false 成功"); | ||||
|                     write(S7Client.S7_DDJ1,Step3Mes2PlcVar.ShelfIsFullArrivedFinish,false); | ||||
|                     logger.info("装箱单打印Event------boxId :"+boxId+", Even3 成功"); | ||||
|  | ||||
|                     logger.info("==================================  现在开始执行 过程三 任务( 结束 )   ==================================="); | ||||
|                     logger.info(""); | ||||
|                 }catch (Throwable e){ | ||||
| //                    e.printStackTrace(); | ||||
| //                    logger.info("装箱单打印Event 出现异常------"+e.toString()); | ||||
|                     logger.info("装箱单打印Event--- 出现异常 : {}",e.getMessage(),e); | ||||
|                 } | ||||
|  | ||||
|             } | ||||
|         },1,1, TimeUnit.SECONDS); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * | ||||
|      * arg: | ||||
|      *      Step1Plc2MesVar 参数类型 | ||||
|      *      targetValue        目的值 | ||||
|      * return: | ||||
|      *      2 s7 访问异常; | ||||
|      *      1 成功; | ||||
|      * */ | ||||
|     private Integer waitingForTarget(Step1Plc2MesVar var, Boolean targetValue) { | ||||
|         Integer res = 0; | ||||
|         while (true){ | ||||
|             try { | ||||
|  | ||||
|                 Boolean now = (Boolean) read(S7Client.S7_DDJ1,var); | ||||
|                 //注意:即使now为null ,这里也不会抛出异常,这里很容易产生 空轮询。 | ||||
|                 if(now == null){ | ||||
|                     throw new Exception(""); | ||||
|                 } | ||||
|                 if(targetValue.equals(now)){ | ||||
|                     res = 1; | ||||
|                     break; | ||||
|                 } | ||||
|                 Thread.sleep(200); | ||||
|             }catch (Throwable e){ | ||||
|                 logger.info("S7 数据采集 异常. 监听 变量 :"+var.getName()+" 为目标值:"+targetValue+"失败"); | ||||
|                 res = 2; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return res; | ||||
|     } | ||||
|     /** | ||||
|      * | ||||
|      * arg: | ||||
|      *      Step2Plc2MesVar 参数类型 | ||||
|      *      targetValue        目的值 | ||||
|      * return: | ||||
|      *      2 s7 访问异常; | ||||
|      *      1 成功; | ||||
|      * */ | ||||
|     private Integer waitingForTarget(Step2Plc2MesVar var, Boolean targetValue) { | ||||
|         Integer res = 0; | ||||
|         while (true){ | ||||
|             try { | ||||
|                 Boolean now = (Boolean) read(S7Client.S7_DDJ1,var); | ||||
|                 if(now == null){ | ||||
|                     throw new Exception(""); | ||||
|                 } | ||||
|                 if(targetValue.equals(now)){ | ||||
|                     res = 1; | ||||
|                     break; | ||||
|                 } | ||||
|                 Thread.sleep(200); | ||||
|             }catch (Throwable e){ | ||||
|                 logger.info("S7 数据采集 异常. 监听 变量 :"+var.getName()+" 为目标值:"+targetValue+"失败"); | ||||
|                 res = 2; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return res; | ||||
|     } | ||||
|     /** | ||||
|      * | ||||
|      * arg: | ||||
|      *      Step3Plc2MesVar 参数类型 | ||||
|      *      targetValue        目的值 | ||||
|      * return: | ||||
|      *      2 s7 访问异常; | ||||
|      *      1 成功; | ||||
|      * */ | ||||
|     private Integer waitingForTarget(Step3Plc2MesVar var, Boolean targetValue) { | ||||
|         Integer res = 0; | ||||
|         while (true){ | ||||
|             try { | ||||
|                 Boolean now = (Boolean) read(S7Client.S7_DDJ1,var); | ||||
|                 if(now == null){ | ||||
|                     throw new Exception(""); | ||||
|                 } | ||||
|                 if(targetValue.equals(now)){ | ||||
|                     res = 1; | ||||
|                     break; | ||||
|                 } | ||||
|                 Thread.sleep(200); | ||||
|             }catch (Throwable e){ | ||||
|                 logger.info("S7 数据采集 异常. 监听 变量 :"+var.getName()+" 为目标值:"+targetValue+"失败"); | ||||
|                 res = 2; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return res; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,306 @@ | ||||
| package com.cnbm.dispatch.line1; | ||||
|  | ||||
| import cn.hutool.core.date.DateUtil; | ||||
| import com.cnbm.dispatch.enums.kuka.step2.Step2Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step2.Step2Plc2MesVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step3.Step3Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step3.Step3Plc2MesVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step4.Step4Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step4.Step4Plc2MesVar; | ||||
| import com.cnbm.packing.entity.WoPowerLevel; | ||||
| import com.cnbm.packing.service.*; | ||||
| import com.cnbm.s7.s7connector.enmuc.S7Client; | ||||
| import com.cnbm.s7.s7connector.type.PlcVar; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.boot.ApplicationArguments; | ||||
| import org.springframework.boot.ApplicationRunner; | ||||
| import org.springframework.core.annotation.Order; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.text.DecimalFormat; | ||||
| import java.text.Format; | ||||
| import java.util.Date; | ||||
| import java.util.concurrent.Executors; | ||||
| import java.util.concurrent.ScheduledExecutorService; | ||||
| import java.util.concurrent.TimeUnit; | ||||
|  | ||||
| /** | ||||
|  * @Desc: "" | ||||
|  * @Author: caixiang | ||||
|  * @DATE: 2022/12/23 12:33 | ||||
|  */ | ||||
| @Component | ||||
| @Order(value = 1) | ||||
| public class KukaEvent4ThreadLine1 implements ApplicationRunner { | ||||
|     private static final Logger logger = LoggerFactory.getLogger("EVENT4NGLine1"); | ||||
|  | ||||
|     @Autowired | ||||
|     DynamicDataSourceService service; | ||||
|     @Autowired | ||||
|     WoPowerLevelServiceBiz levelServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoCompensationPowerServiceBiz compensationPowerServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoPackagingBoxSubstrateServiceBiz substrateServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoPackagingBoxServiceBiz boxServiceBiz; | ||||
|  | ||||
|     public KukaEvent4ThreadLine1(){ | ||||
|         this.kukaStep1 = Executors.newScheduledThreadPool(1); | ||||
|     } | ||||
|  | ||||
|     private ScheduledExecutorService kukaStep1; | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * return | ||||
|      *          成功: 返回相应的object对象 | ||||
|      *          失败: 返回null | ||||
|      * */ | ||||
|     private Object read(S7Client s7Client, Step4Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step4Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private Object read(S7Client s7Client, Step2Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step2Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private Object read(S7Client s7Client, Step3Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step3Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     public String getBoxId(String sapMaterial){ | ||||
|         Integer todayBoxNum = service.getTodayBoxNum()+1; | ||||
|         String nowTime = DateUtil.format(new Date(), "yyMMdd"); | ||||
|  | ||||
|         todayBoxNum+=500; | ||||
|         logger.info("BOXID生成Event-------现在生成boxId ,sapMaterial: "+sapMaterial+",nowTime:"+nowTime+",todayBoxNum:"+formateString(todayBoxNum)); | ||||
|         String res = "301"+sapMaterial+nowTime+formateString(todayBoxNum); | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     public String getErrorBoxId(String sapMaterial){ | ||||
|  | ||||
|         String nowTime = DateUtil.format(new Date(), "yyMMdd"); | ||||
|         String mixBoxError = "001"; | ||||
|         String res = "444"+sapMaterial+nowTime+mixBoxError; | ||||
|         logger.info("BOXID生成Event-------现在生成errBoxId ,sapMaterial: "+sapMaterial+",nowTime:"+nowTime); | ||||
|  | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|     public String removeKG(String str){ | ||||
|         return str.substring(0,17); | ||||
|     } | ||||
|  | ||||
|     public static void main(String[] args) { | ||||
|         Integer a = 102; | ||||
|         Format f1 = new DecimalFormat("000"); | ||||
|         System.out.println(f1.format(a)); | ||||
|     } | ||||
|     public String formateString(Integer a){ | ||||
|         Format f1 = new DecimalFormat("000"); | ||||
|         return f1.format(a); | ||||
|     } | ||||
|  | ||||
|     //return true 出现混档了,return false 没有出现混档 | ||||
|     private boolean isMixLevel(String[] subIds,Integer size){ | ||||
|         String correctLevel = substrateServiceBiz.getBySubId(subIds[0]).getPowerLevel(); | ||||
|         String errMsg = "以下基板ID出现混档:"; | ||||
|         boolean res = false; | ||||
|         for(int i=0;i<size;i++){ | ||||
|             String powerLevel = substrateServiceBiz.getBySubId(subIds[i]).getPowerLevel(); | ||||
|  | ||||
|             if(!powerLevel.equals(correctLevel)){ | ||||
|                 errMsg += "基板ID:"+subIds[i]+" 档位:"+powerLevel+", "; | ||||
|                 res = true; | ||||
|             } | ||||
|         } | ||||
|         if(res){ | ||||
|             logger.error(errMsg); | ||||
|         } | ||||
|  | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     @Override | ||||
|     public void run(ApplicationArguments args) throws Exception { | ||||
|  | ||||
|         kukaStep1.scheduleAtFixedRate(new Runnable() { | ||||
|             @Override | ||||
|             public void run() { | ||||
|                 try { | ||||
|  | ||||
|                     //调度开始 | ||||
|                     Integer subArrived = waitingForTarget(Step4Plc2MesVar.SubArrivedToMes, true); | ||||
|                     logger.info(""); | ||||
|                     logger.info("==================================  现在开始执行 过程四 任务( 开始 )   ==================================="); | ||||
|                     if(subArrived != 1){ | ||||
|                         logger.info("NG口基板Event---  失败"+" --- "+" MES监听 Step4Plc2MesVar.SubArrivedToMes 是否 等于 true 失败"); | ||||
|                     } else if (subArrived == 2) { | ||||
|                         throw new Exception("MES 监听值出现异常。"); | ||||
|                     } | ||||
|                     logger.info("NG口基板Event --- 成功 ---- MES监听到 Step4Plc2MesVar.SubArrivedToMes==true"); | ||||
|  | ||||
|                     //一. 从plc 中获取 subId | ||||
|                     String subId = (String) read(S7Client.S7_DDJ1,Step4Plc2MesVar.SubIdToMes); | ||||
|                     Integer lineNum = 1; | ||||
|                     //把基板ID字符串的空格去掉,因为plc中设置的20位,但实际基板ID就是17位,因为带空格去数据库查询 有问题的。 | ||||
|                     if(subId == null ){ | ||||
|                         logger.info("NG口基板Event---  失败"+" --- "+" MES采集到null值,subId:"+subId); | ||||
|                     } | ||||
|                     subId = removeKG(subId); | ||||
|                     logger.info("NG口基板Event --- 成功 ---- MES 从plu中 read 到基板id:"+subId); | ||||
|  | ||||
|                     //二. MES 业务 | ||||
|                     //===============           MES 业务 开始         ================= | ||||
|                     logger.info("=================  现在开始执行 过程四 任务 ( MES 业务 ) ( 开始 )   =================="); | ||||
|                     //1. 从comline数据库中获取 实际pmpp | ||||
|                     float pmppActual = service.getPMPPBySubId(subId); | ||||
|                     //2. 匹配和计算补偿功率 | ||||
|                     float pmppCompensation = compensationPowerServiceBiz.calculCompensationPMPP(pmppActual,lineNum); | ||||
|                     //3. 依据补偿功率,获取工艺参数,并且把这些工艺参数传给kuka | ||||
|                     WoPowerLevel argByPMPP = levelServiceBiz.getArgByPMPP(pmppCompensation, lineNum); | ||||
|                     write(S7Client.S7_DDJ1,Step4Mes2PlcVar.dLable_Pnom,Integer.valueOf(argByPMPP.getPowerClass())); | ||||
|                     write(S7Client.S7_DDJ1,Step4Mes2PlcVar.dLable_Voc,argByPMPP.getLableVoc()); | ||||
|                     write(S7Client.S7_DDJ1,Step4Mes2PlcVar.dLable_Isc,argByPMPP.getLableIsc()); | ||||
|                     write(S7Client.S7_DDJ1,Step4Mes2PlcVar.dLable_Vmpp,argByPMPP.getLableVmpp()); | ||||
|                     write(S7Client.S7_DDJ1,Step4Mes2PlcVar.dLable_Impp,argByPMPP.getLableImpp()); | ||||
|                     logger.info("NG口基板Event--- 采集到 基板ID: "+subId+", 线边号:"+lineNum+",从camline 获取到实际pmpp"+pmppActual+",计算后 补偿功率:"+pmppCompensation+",dLable_Pnom: "+argByPMPP.getPowerClass() +",dLable_Voc: "+argByPMPP.getLableVoc()+",dLable_Isc: "+argByPMPP.getLableIsc()+",dLable_Vmpp: "+argByPMPP.getLableVmpp()+",dLable_Impp: "+argByPMPP.getLableImpp()); | ||||
|  | ||||
|                     logger.info("=================  现在开始执行 过程四 任务 ( MES 业务 - 数据已经传给PLC ) ( 结束 )   =================="); | ||||
|                     //===============           MES 业务 结束         ================= | ||||
|  | ||||
|                     //三. 当MES完成任务后,把MesToPlc.SubArrivedFinish变量置为true,告诉plc,我操作完成了 | ||||
|                     write(S7Client.S7_DDJ1,Step4Mes2PlcVar.SubArrivedFinish,true); | ||||
|                     logger.info("NG口基板Event--- 基板ID: "+subId+", SubArrivedFinish,置为true 成功"); | ||||
|                     //四. mes 监控 到PlcToMes.SubArrived==false,就把MesToPlc.SubArrivedFinish置为false | ||||
|                     Integer subArrived2 = waitingForTarget(Step4Plc2MesVar.SubArrivedToMes, false); | ||||
|                     if(subArrived2 != 1){ | ||||
|                         logger.info("NG口基板Event--- 失败"+" --- "+"MES监听 Step4Plc2MesVar.SubArrivedToMes 是否 等于 1 失败"); | ||||
|                     }else if (subArrived2 == 2) { | ||||
|                         throw new Exception("MES 监听值出现异常。"); | ||||
|                     } | ||||
|  | ||||
|                     write(S7Client.S7_DDJ1,Step4Mes2PlcVar.SubArrivedFinish,false); | ||||
|                     logger.info("NG口基板Event--- 基板ID: "+subId+", SubArrivedFinish,置为 false 成功"); | ||||
|                     logger.info("==================================  现在开始执行 过程四 任务( 结束 )   ==================================="); | ||||
|                     logger.info(""); | ||||
|                 }catch (Throwable e){ | ||||
|                     logger.info("NG口基板Event--- 出现异常 : {}",e.getMessage(),e); | ||||
|                 } | ||||
|             } | ||||
|         },1,1, TimeUnit.SECONDS); | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * | ||||
|      * arg: | ||||
|      *      Step4Plc2MesVar 参数类型 | ||||
|      *      targetValue        目的值 | ||||
|      * return: | ||||
|      *      2 s7 访问异常; | ||||
|      *      1 成功; | ||||
|      * */ | ||||
|     private Integer waitingForTarget(Step4Plc2MesVar var, Boolean targetValue) { | ||||
|         Integer res = 0; | ||||
|         while (true){ | ||||
|             try { | ||||
|  | ||||
|                 Boolean now = (Boolean) read(S7Client.S7_DDJ1,var); | ||||
|                 //注意:即使now为null ,这里也不会抛出异常,这里很容易产生 空轮询。 | ||||
|                 if(now == null){ | ||||
|                     throw new Exception(""); | ||||
|                 } | ||||
|                 if(targetValue.equals(now)){ | ||||
|                     res = 1; | ||||
|                     break; | ||||
|                 } | ||||
|                 Thread.sleep(200); | ||||
|             }catch (Throwable e){ | ||||
|                 logger.info("S7 数据采集 异常. 监听 变量 :"+var.getName()+" 为目标值:"+targetValue+"失败"); | ||||
|                 res = 2; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,418 @@ | ||||
| package com.cnbm.dispatch.line2; | ||||
|  | ||||
| import cn.hutool.core.date.DateUtil; | ||||
| import com.cnbm.dispatch.enums.kuka.step1.Step1Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step1.Step1Plc2MesVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step2.Step2Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step2.Step2Plc2MesVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step3.Step3Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step3.Step3Plc2MesVar; | ||||
| import com.cnbm.packing.dto.CamlineExtendArgDTO; | ||||
| import com.cnbm.packing.entity.WoPackagingBoxSubstrate; | ||||
| import com.cnbm.packing.entity.WoPowerLevel; | ||||
| import com.cnbm.packing.service.*; | ||||
| import com.cnbm.s7.s7connector.enmuc.S7Client; | ||||
| import com.cnbm.s7.s7connector.type.PlcVar; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.boot.ApplicationArguments; | ||||
| import org.springframework.boot.ApplicationRunner; | ||||
| import org.springframework.core.annotation.Order; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.text.DecimalFormat; | ||||
| import java.text.Format; | ||||
| import java.time.LocalDateTime; | ||||
| import java.util.Date; | ||||
| import java.util.concurrent.Executors; | ||||
| import java.util.concurrent.ScheduledExecutorService; | ||||
| import java.util.concurrent.TimeUnit; | ||||
|  | ||||
| /** | ||||
|  * @Desc: "" | ||||
|  * @Author: caixiang | ||||
|  * @DATE: 2022/12/23 12:33 | ||||
|  */ | ||||
| @Component | ||||
| @Order(value = 1) | ||||
| public class KukaEvent1ThreadLine2 implements ApplicationRunner { | ||||
|     private static final Logger logger = LoggerFactory.getLogger("EVENT1Line2"); | ||||
|  | ||||
|     @Autowired | ||||
|     DynamicDataSourceService service; | ||||
|     @Autowired | ||||
|     WoPowerLevelServiceBiz levelServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoCompensationPowerServiceBiz compensationPowerServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoPackagingBoxSubstrateServiceBiz substrateServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoPackagingBoxServiceBiz boxServiceBiz; | ||||
|  | ||||
|     public KukaEvent1ThreadLine2(){ | ||||
|         this.kukaStep1 = Executors.newScheduledThreadPool(1); | ||||
|     } | ||||
|  | ||||
|     private ScheduledExecutorService kukaStep1; | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * return | ||||
|      *          成功: 返回相应的object对象 | ||||
|      *          失败: 返回null | ||||
|      * */ | ||||
|     private Object read(S7Client s7Client,Step1Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step1Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private Object read(S7Client s7Client, Step2Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step2Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private Object read(S7Client s7Client, Step3Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step3Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     public String getBoxId(String sapMaterial){ | ||||
|         Integer todayBoxNum = service.getTodayBoxNum()+1; | ||||
|         String nowTime = DateUtil.format(new Date(), "yyMMdd"); | ||||
|  | ||||
|         todayBoxNum+=500; | ||||
|         logger.info("BOXID生成Event-------现在生成boxId ,sapMaterial: "+sapMaterial+",nowTime:"+nowTime+",todayBoxNum:"+formateString(todayBoxNum)); | ||||
|         String res = "301"+sapMaterial+nowTime+formateString(todayBoxNum); | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     public String getErrorBoxId(String sapMaterial){ | ||||
|  | ||||
|         String nowTime = DateUtil.format(new Date(), "yyMMdd"); | ||||
|         String mixBoxError = "001"; | ||||
|         String res = "444"+sapMaterial+nowTime+mixBoxError; | ||||
|         logger.info("BOXID生成Event-------现在生成errBoxId ,sapMaterial: "+sapMaterial+",nowTime:"+nowTime); | ||||
|  | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|     public String removeKG(String str){ | ||||
|         return str.substring(0,17); | ||||
|     } | ||||
|  | ||||
|     public static void main(String[] args) { | ||||
|         Integer a = 102; | ||||
|         Format f1 = new DecimalFormat("000"); | ||||
|         System.out.println(f1.format(a)); | ||||
|     } | ||||
|     public String formateString(Integer a){ | ||||
|         Format f1 = new DecimalFormat("000"); | ||||
|         return f1.format(a); | ||||
|     } | ||||
|  | ||||
|     //return true 出现混档了,return false 没有出现混档 | ||||
|     private boolean isMixLevel(String[] subIds,Integer size){ | ||||
|         String correctLevel = substrateServiceBiz.getBySubId(subIds[0]).getPowerLevel(); | ||||
|         String errMsg = "以下基板ID出现混档:"; | ||||
|         boolean res = false; | ||||
|         for(int i=0;i<size;i++){ | ||||
|             String powerLevel = substrateServiceBiz.getBySubId(subIds[i]).getPowerLevel(); | ||||
|  | ||||
|             if(!powerLevel.equals(correctLevel)){ | ||||
|                 errMsg += "基板ID:"+subIds[i]+" 档位:"+powerLevel+", "; | ||||
|                 res = true; | ||||
|             } | ||||
|         } | ||||
|         if(res){ | ||||
|             logger.error(errMsg); | ||||
|         } | ||||
|  | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     @Override | ||||
|     public void run(ApplicationArguments args) throws Exception { | ||||
|  | ||||
|         kukaStep1.scheduleAtFixedRate(new Runnable() { | ||||
|             @Override | ||||
|             public void run() { | ||||
|                 try { | ||||
|  | ||||
|                     //调度开始 | ||||
|                     Integer subArrived = waitingForTarget(Step1Plc2MesVar.SubArrivedToMes, true); | ||||
|                     logger.info(""); | ||||
|                     logger.info("==================================  现在开始执行 过程一 任务( 开始 )   ==================================="); | ||||
|                     if(subArrived != 1){ | ||||
|                         logger.info("标签打印Event---  失败"+" --- "+" MES监听 Step1Plc2MesVar.SubArrivedToMes 是否 等于 1 失败"); | ||||
|                     } else if (subArrived == 2) { | ||||
|                         throw new Exception("MES 监听值出现异常。"); | ||||
|                     } | ||||
|                     logger.info("标签打印Event --- 成功 ---- MES监听到 SubArrivedToMes==true"); | ||||
|  | ||||
|                     //一. 从plc 中获取 subId 和 lineNum | ||||
|                     String subId = (String) read(S7Client.S7_DDJ2,Step1Plc2MesVar.SubIdToMes); | ||||
|                     Integer lineNum = (Integer) read(S7Client.S7_DDJ2,Step1Plc2MesVar.LineNum); | ||||
|                     //把基板ID字符串的空格去掉,因为plc中设置的20位,但实际基板ID就是17位,因为带空格去数据库查询 有问题的。 | ||||
|                     if(subId == null || lineNum == null){ | ||||
|                         logger.info("标签打印Event---  失败"+" --- "+" MES采集到null值,subId:"+subId+",lineNum:"+lineNum); | ||||
|                     } | ||||
|                     subId = removeKG(subId); | ||||
|                     logger.info("标签打印Event --- 成功 ---- MES 从plu中 read 到基板id:"+subId); | ||||
|  | ||||
|                     //二. MES 业务 | ||||
|                     //===============           MES 业务 开始         ================= | ||||
|                     logger.info("=================  现在开始执行 过程一 任务 ( MES 业务 ) ( 开始 )   =================="); | ||||
|                     //1. 从comline数据库中获取 实际pmpp | ||||
|                     float pmppActual = service.getPMPPBySubId(subId); | ||||
|                     //2. 匹配和计算补偿功率 | ||||
|                     float pmppCompensation = compensationPowerServiceBiz.calculCompensationPMPP(pmppActual,lineNum); | ||||
|                     //3. 依据补偿功率,获取工艺参数,并且把这些工艺参数传给kuka | ||||
|                     WoPowerLevel argByPMPP = levelServiceBiz.getArgByPMPP(pmppCompensation, lineNum); | ||||
|                     write(S7Client.S7_DDJ2,Step1Mes2PlcVar.dLable_Pnom,Integer.valueOf(argByPMPP.getPowerClass())); | ||||
|                     write(S7Client.S7_DDJ2,Step1Mes2PlcVar.dLable_Voc,argByPMPP.getLableVoc()); | ||||
|                     write(S7Client.S7_DDJ2,Step1Mes2PlcVar.dLable_Isc,argByPMPP.getLableIsc()); | ||||
|                     write(S7Client.S7_DDJ2,Step1Mes2PlcVar.dLable_Vmpp,argByPMPP.getLableVmpp()); | ||||
|                     write(S7Client.S7_DDJ2,Step1Mes2PlcVar.dLable_Impp,argByPMPP.getLableImpp()); | ||||
|                     logger.info("标签打印Event--- 采集到 基板ID: "+subId+", 线边号:"+lineNum+",从camline 获取到实际pmpp"+pmppActual+",计算后 补偿功率:"+pmppCompensation+",dLable_Pnom: "+argByPMPP.getPowerClass() +",dLable_Voc: "+argByPMPP.getLableVoc()+",dLable_Isc: "+argByPMPP.getLableIsc()+",dLable_Vmpp: "+argByPMPP.getLableVmpp()+",dLable_Impp: "+argByPMPP.getLableImpp()); | ||||
|  | ||||
|  | ||||
|  | ||||
|                     //4. 把基板录到数据库 | ||||
|                     WoPackagingBoxSubstrate woPackagingBoxSubstrate = new WoPackagingBoxSubstrate(); | ||||
|                     woPackagingBoxSubstrate.setLineBody(lineNum); | ||||
|                     woPackagingBoxSubstrate.setPowerLevel(argByPMPP.getPowerClass()); | ||||
|                     woPackagingBoxSubstrate.setSapMaterial(argByPMPP.getSapMaterialNum()); | ||||
|                     woPackagingBoxSubstrate.setWoSubstrateId(subId); | ||||
|                     woPackagingBoxSubstrate.setActualPmpp(pmppActual); | ||||
|                     woPackagingBoxSubstrate.setCreateTime(LocalDateTime.now()); | ||||
|                     //计算后的补偿功率 | ||||
|                     woPackagingBoxSubstrate.setPmpp(pmppCompensation); | ||||
|  | ||||
|  | ||||
|                     //5. 从camline那里获取可变字段 | ||||
|                     CamlineExtendArgDTO extendArgFromCamline = service.getExtendArgFromCamline(subId); | ||||
|                     logger.info("标签打印Event--- 基板ID: "+subId+", 从camline获取PID16~PID22 的实测数据 成功, 数据内容:"+extendArgFromCamline.toString()); | ||||
|                     woPackagingBoxSubstrate.setLastUpdateTime(extendArgFromCamline.getLastUpdateTime()); | ||||
|  | ||||
|                     woPackagingBoxSubstrate.setOrderName(extendArgFromCamline.getOrderName()); | ||||
|                     woPackagingBoxSubstrate.setBinclassFl1(extendArgFromCamline.getBinclassFl1()); | ||||
|                     woPackagingBoxSubstrate.setBinclassFl2(extendArgFromCamline.getBinclassFl2()); | ||||
|                     woPackagingBoxSubstrate.setEtaFl1(extendArgFromCamline.getEtaFl1()); | ||||
|                     woPackagingBoxSubstrate.setEtaFl2(extendArgFromCamline.getEtaFl2()); | ||||
|                     woPackagingBoxSubstrate.setFfFl1(extendArgFromCamline.getFfFl1()); | ||||
|                     woPackagingBoxSubstrate.setFfFl2(extendArgFromCamline.getFfFl2()); | ||||
|                     woPackagingBoxSubstrate.setImppFl1(extendArgFromCamline.getImppFl1()); | ||||
|                     woPackagingBoxSubstrate.setImppFl2(extendArgFromCamline.getImppFl2()); | ||||
|                     woPackagingBoxSubstrate.setInsolflashcontrolFl1(extendArgFromCamline.getInsolflashcontrolFl1()); | ||||
|                     woPackagingBoxSubstrate.setInsolflashcontrolFl2(extendArgFromCamline.getInsolflashcontrolFl2()); | ||||
|                     woPackagingBoxSubstrate.setInsolmppFl1(extendArgFromCamline.getInsolmppFl1()); | ||||
|                     woPackagingBoxSubstrate.setInsolmppFl2(extendArgFromCamline.getInsolmppFl2()); | ||||
|                     woPackagingBoxSubstrate.setInsolvocFl1(extendArgFromCamline.getInsolvocFl1()); | ||||
|                     woPackagingBoxSubstrate.setInsolvocFl2(extendArgFromCamline.getInsolvocFl2()); | ||||
|                     woPackagingBoxSubstrate.setInsolFl1(extendArgFromCamline.getInsolFl1()); | ||||
|                     woPackagingBoxSubstrate.setInsolFl2(extendArgFromCamline.getInsolFl2()); | ||||
|                     woPackagingBoxSubstrate.setIscFl1(extendArgFromCamline.getIscFl1()); | ||||
|                     woPackagingBoxSubstrate.setIscFl2(extendArgFromCamline.getIscFl2()); | ||||
|                     woPackagingBoxSubstrate.setMeasTimeFl1(extendArgFromCamline.getMeasTimeFl1()); | ||||
|                     woPackagingBoxSubstrate.setMeasTimeFl2(extendArgFromCamline.getMeasTimeFl2  ()); | ||||
|                     woPackagingBoxSubstrate.setPmppFl1(extendArgFromCamline.getPmppFl1()); | ||||
|                     woPackagingBoxSubstrate.setPmppFl2(extendArgFromCamline.getPmppFl2()); | ||||
|                     woPackagingBoxSubstrate.setTcellFl1(extendArgFromCamline.getTcellFl1()); | ||||
|                     woPackagingBoxSubstrate.setTcellFl2(extendArgFromCamline.getTcellFl2()); | ||||
|                     woPackagingBoxSubstrate.setTmonicellFl1(extendArgFromCamline.getTmonicellFl1()); | ||||
|                     woPackagingBoxSubstrate.setTmonicellFl2(extendArgFromCamline.getTmonicellFl2()); | ||||
|                     woPackagingBoxSubstrate.setUmppFl1(extendArgFromCamline.getUmppFl1()); | ||||
|                     woPackagingBoxSubstrate.setUmppFl2(extendArgFromCamline.getUmppFl2()); | ||||
|                     woPackagingBoxSubstrate.setUocFl1(extendArgFromCamline.getUocFl1()); | ||||
|                     woPackagingBoxSubstrate.setUocFl1(extendArgFromCamline.getUocFl2()); | ||||
|  | ||||
|                     substrateServiceBiz.insert(woPackagingBoxSubstrate); | ||||
|  | ||||
|                     logger.info("标签打印Event--- 基板ID: "+subId+", 录入数据库成功"); | ||||
|                     logger.info("=================  现在开始执行 过程一 任务 ( MES 业务 ) ( 结束 )   =================="); | ||||
|                     //===============           MES 业务 结束         ================= | ||||
|  | ||||
|                     //三. 当MES完成任务后,把MesToPlc.SubArrivedFinish变量置为true,告诉plc,我操作完成了 | ||||
|                     write(S7Client.S7_DDJ2,Step1Mes2PlcVar.SubArrivedFinish,true); | ||||
|                     logger.info("标签打印Event--- 基板ID: "+subId+", SubArrivedFinish,置为true 成功"); | ||||
|                     //四. mes 监控 到PlcToMes.SubArrived==false,就把MesToPlc.SubArrivedFinish置为false | ||||
|                     Integer subArrived2 = waitingForTarget(Step1Plc2MesVar.SubArrivedToMes, false); | ||||
|                     if(subArrived2 != 1){ | ||||
|                         logger.info("标签打印Event--- 失败"+" --- "+"MES监听 Step1Plc2MesVar.SubArrivedToMes 是否 等于 1 失败"); | ||||
|                     }else if (subArrived2 == 2) { | ||||
|                         throw new Exception("MES 监听值出现异常。"); | ||||
|                     } | ||||
|  | ||||
|                     write(S7Client.S7_DDJ2,Step1Mes2PlcVar.SubArrivedFinish,false); | ||||
|                     logger.info("标签打印Event--- 基板ID: "+subId+", SubArrivedFinish,置为 false 成功"); | ||||
|                     logger.info("==================================  现在开始执行 过程一 任务( 结束 )   ==================================="); | ||||
|                     logger.info(""); | ||||
|                 }catch (Throwable e){ | ||||
|                     logger.info("标签打印Event--- 出现异常 : {}",e.getMessage(),e); | ||||
|                 } | ||||
|             } | ||||
|         },1,1, TimeUnit.SECONDS); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * | ||||
|      * arg: | ||||
|      *      Step1Plc2MesVar 参数类型 | ||||
|      *      targetValue        目的值 | ||||
|      * return: | ||||
|      *      2 s7 访问异常; | ||||
|      *      1 成功; | ||||
|      * */ | ||||
|     private Integer waitingForTarget(Step1Plc2MesVar var, Boolean targetValue) { | ||||
|         Integer res = 0; | ||||
|         while (true){ | ||||
|             try { | ||||
|  | ||||
|                 Boolean now = (Boolean) read(S7Client.S7_DDJ2,var); | ||||
|                 //注意:即使now为null ,这里也不会抛出异常,这里很容易产生 空轮询。 | ||||
|                 if(now == null){ | ||||
|                     throw new Exception(""); | ||||
|                 } | ||||
|                 if(targetValue.equals(now)){ | ||||
|                     res = 1; | ||||
|                     break; | ||||
|                 } | ||||
|                 Thread.sleep(200); | ||||
|             }catch (Throwable e){ | ||||
|                 logger.info("S7 数据采集 异常. 监听 变量 :"+var.getName()+" 为目标值:"+targetValue+"失败"); | ||||
|                 res = 2; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return res; | ||||
|     } | ||||
|     /** | ||||
|      * | ||||
|      * arg: | ||||
|      *      Step2Plc2MesVar 参数类型 | ||||
|      *      targetValue        目的值 | ||||
|      * return: | ||||
|      *      2 s7 访问异常; | ||||
|      *      1 成功; | ||||
|      * */ | ||||
|     private Integer waitingForTarget(Step2Plc2MesVar var, Boolean targetValue) { | ||||
|         Integer res = 0; | ||||
|         while (true){ | ||||
|             try { | ||||
|                 Boolean now = (Boolean) read(S7Client.S7_DDJ2,var); | ||||
|                 if(now == null){ | ||||
|                     throw new Exception(""); | ||||
|                 } | ||||
|                 if(targetValue.equals(now)){ | ||||
|                     res = 1; | ||||
|                     break; | ||||
|                 } | ||||
|                 Thread.sleep(200); | ||||
|             }catch (Throwable e){ | ||||
|                 logger.info("S7 数据采集 异常. 监听 变量 :"+var.getName()+" 为目标值:"+targetValue+"失败"); | ||||
|                 res = 2; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return res; | ||||
|     } | ||||
|     /** | ||||
|      * | ||||
|      * arg: | ||||
|      *      Step3Plc2MesVar 参数类型 | ||||
|      *      targetValue        目的值 | ||||
|      * return: | ||||
|      *      2 s7 访问异常; | ||||
|      *      1 成功; | ||||
|      * */ | ||||
|     private Integer waitingForTarget(Step3Plc2MesVar var, Boolean targetValue) { | ||||
|         Integer res = 0; | ||||
|         while (true){ | ||||
|             try { | ||||
|                 Boolean now = (Boolean) read(S7Client.S7_DDJ2,var); | ||||
|                 if(now == null){ | ||||
|                     throw new Exception(""); | ||||
|                 } | ||||
|                 if(targetValue.equals(now)){ | ||||
|                     res = 1; | ||||
|                     break; | ||||
|                 } | ||||
|                 Thread.sleep(200); | ||||
|             }catch (Throwable e){ | ||||
|                 logger.info("S7 数据采集 异常. 监听 变量 :"+var.getName()+" 为目标值:"+targetValue+"失败"); | ||||
|                 res = 2; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return res; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,481 @@ | ||||
| package com.cnbm.dispatch.line2; | ||||
|  | ||||
| import cn.hutool.core.date.DateUtil; | ||||
| import com.cnbm.dispatch.enums.kuka.step1.Step1Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step1.Step1Plc2MesVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step2.Step2Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step2.Step2Plc2MesVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step3.Step3Mes2PlcVar; | ||||
| import com.cnbm.dispatch.enums.kuka.step3.Step3Plc2MesVar; | ||||
| import com.cnbm.packing.dto.CamlineSubIdDTO; | ||||
| import com.cnbm.packing.entity.WoPackagingBox; | ||||
| import com.cnbm.packing.entity.WoPackagingBoxSubstrate; | ||||
| import com.cnbm.packing.service.*; | ||||
| import com.cnbm.s7.s7connector.enmuc.S7Client; | ||||
| import com.cnbm.s7.s7connector.type.PlcVar; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.boot.ApplicationArguments; | ||||
| import org.springframework.boot.ApplicationRunner; | ||||
| import org.springframework.core.annotation.Order; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.text.DecimalFormat; | ||||
| import java.text.Format; | ||||
| import java.time.LocalDateTime; | ||||
| import java.util.Arrays; | ||||
| import java.util.Date; | ||||
| import java.util.concurrent.Executors; | ||||
| import java.util.concurrent.ScheduledExecutorService; | ||||
| import java.util.concurrent.TimeUnit; | ||||
|  | ||||
| /** | ||||
|  * @Desc: "" | ||||
|  * @Author: caixiang | ||||
|  * @DATE: 2022/12/23 12:33 | ||||
|  */ | ||||
| @Component | ||||
| @Order(value = 1) | ||||
| public class KukaEvent2ThreadLine2 implements ApplicationRunner { | ||||
|  | ||||
|     private static final Logger logger = LoggerFactory.getLogger("EVENT2Line2"); | ||||
|  | ||||
|  | ||||
|     @Autowired | ||||
|     DynamicDataSourceService service; | ||||
|     @Autowired | ||||
|     WoPowerLevelServiceBiz levelServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoCompensationPowerServiceBiz compensationPowerServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoPackagingBoxSubstrateServiceBiz substrateServiceBiz; | ||||
|  | ||||
|     @Autowired | ||||
|     WoPackagingBoxServiceBiz boxServiceBiz; | ||||
|  | ||||
|     public KukaEvent2ThreadLine2(){ | ||||
|  | ||||
|         this.kukaStep2 = Executors.newScheduledThreadPool(1); | ||||
|  | ||||
|     } | ||||
|  | ||||
|  | ||||
|     private ScheduledExecutorService kukaStep2; | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * return | ||||
|      *          成功: 返回相应的object对象 | ||||
|      *          失败: 返回null | ||||
|      * */ | ||||
|     private Object read(S7Client s7Client,Step1Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step1Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private Object read(S7Client s7Client, Step2Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step2Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private Object read(S7Client s7Client, Step3Plc2MesVar var) { | ||||
|         try { | ||||
|             return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType()); | ||||
|         }catch (Throwable e){ | ||||
|             logger.info("host:"+s7Client.getHost()+" ; read 操作出现问题: {}",e.getMessage(),e); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|     private void write(S7Client s7Client, Step3Mes2PlcVar var, Object newValue) { | ||||
|         if(var.getType().equals(PlcVar.STRING_Array)){ | ||||
|             String[] s = (String[])newValue; | ||||
|             String[] ss = (String[])newValue; | ||||
|             if(s.length > var.getLength() ){ | ||||
|                 ss = new String[var.getLength()]; | ||||
|                 for(int i=0;i< var.getLength();i++){ | ||||
|                     ss[i] = s[i]; | ||||
|                 } | ||||
|             } | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss); | ||||
|         }else { | ||||
|             s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     public String getBoxId(String sapMaterial){ | ||||
|         Integer todayBoxNum = service.getTodayBoxNum()+1; | ||||
|         String nowTime = DateUtil.format(new Date(), "yyMMdd"); | ||||
|  | ||||
|         todayBoxNum+=500; | ||||
|         logger.info("BOXID生成Event-------现在生成boxId ,sapMaterial: "+sapMaterial+",nowTime:"+nowTime+",todayBoxNum:"+formateString(todayBoxNum)); | ||||
|         String res = "301"+sapMaterial+nowTime+formateString(todayBoxNum); | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|  | ||||
| //    public String getErrorBoxId(String sapMaterial){ | ||||
| // | ||||
| //        String nowTime = DateUtil.format(new Date(), "yyMMdd"); | ||||
| //        String mixBoxError = "001"; | ||||
| //        String res = "444"+sapMaterial+nowTime+mixBoxError +"02"; | ||||
| //        logger.info("BOXID生成Event-------现在生成errBoxId ,sapMaterial: "+sapMaterial+",nowTime:"+nowTime); | ||||
| // | ||||
| //        return res; | ||||
| //    } | ||||
|  | ||||
|     public String getErrorBoxId(String sapMaterial){ | ||||
|         Integer todayErrBoxNum = service.getTodayErrBoxNum()+1; | ||||
|         String nowTime = DateUtil.format(new Date(), "yyMMdd"); | ||||
|         String mixBoxError = "001"; | ||||
|         String res = "444"+sapMaterial+nowTime+mixBoxError+"02"+todayErrBoxNum; | ||||
|         logger.info("BOXID生成Event-------现在生成errBoxId ,sapMaterial: "+sapMaterial+",nowTime:"+nowTime+",todayErrBoxNum:"+todayErrBoxNum); | ||||
|  | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|     public String removeKG(String str){ | ||||
|         return str.substring(0,17); | ||||
|     } | ||||
|  | ||||
|     public static void main(String[] args) { | ||||
|         Integer a = 102; | ||||
|         Format f1 = new DecimalFormat("000"); | ||||
|         System.out.println(f1.format(a)); | ||||
|     } | ||||
|     public String formateString(Integer a){ | ||||
|         Format f1 = new DecimalFormat("000"); | ||||
|         return f1.format(a); | ||||
|     } | ||||
|  | ||||
|     //return true 出现混档了,return false 没有出现混档 | ||||
| //    private boolean isMixLevel(String[] subIds,Integer size){ | ||||
| //        String correctLevel = substrateServiceBiz.getBySubId(subIds[0]).getPowerLevel(); | ||||
| //        String errMsg = "以下基板ID出现混档:"; | ||||
| //        boolean res = false; | ||||
| //        for(int i=0;i<size;i++){ | ||||
| //            String powerLevel = substrateServiceBiz.getBySubId(subIds[i]).getPowerLevel(); | ||||
| // | ||||
| //            if(!powerLevel.equals(correctLevel)){ | ||||
| //                errMsg += "基板ID:"+subIds[i]+" 档位:"+powerLevel+", "; | ||||
| //                res = true; | ||||
| //            } | ||||
| //        } | ||||
| //        if(res){ | ||||
| //            logger.error(errMsg); | ||||
| //        } | ||||
| // | ||||
| //        return res; | ||||
| //    } | ||||
|  | ||||
|  | ||||
|     private CamlineSubIdDTO getFromCamline(String subId){ | ||||
|         return service.getSubIdByCamline(subId); | ||||
|     } | ||||
|  | ||||
|     private boolean isMixLevel(String[] subIds,Integer size){ | ||||
|         WoPackagingBoxSubstrate bySubId = substrateServiceBiz.getBySubId(subIds[0]); | ||||
|         String correctLevel = null; | ||||
|  | ||||
|         //如果 我们数据库没有  去camline 数据库里面取  --  开始 | ||||
|         if(bySubId == null){ | ||||
|             logger.info("BOXID生成Event-------检查是否混箱时,发现数据库中 无subId:"+ subIds[0]+"现在从camline 系统获取这个基板相关信息"); | ||||
|             //todo | ||||
|             CamlineSubIdDTO subIdByCamline = service.getSubIdByCamline(subIds[0]); | ||||
|             logger.info("BOXID生成Event-------检查是否混箱时,发现数据库中 无subId:"+ subIds[0]+"现在从camline 系统获取这个基板相关信息是:"+subIdByCamline); | ||||
|  | ||||
|             correctLevel = subIdByCamline.getPowerLevel(); | ||||
|         }else { | ||||
|             correctLevel = bySubId.getPowerLevel(); | ||||
|         } | ||||
|  | ||||
|  | ||||
|         String errMsg = "以下基板ID出现混档:"; | ||||
|         boolean res = false; | ||||
|         for(int i=0;i<size;i++){ | ||||
|             WoPackagingBoxSubstrate innerSub = substrateServiceBiz.getBySubId(subIds[i]); | ||||
|             String powerLevel = null; | ||||
|             if(innerSub==null){ | ||||
|                 powerLevel = getFromCamline(subIds[i]).getPowerLevel(); | ||||
|             }else { | ||||
|                 powerLevel = innerSub.getPowerLevel(); | ||||
|             } | ||||
|  | ||||
|             if(!powerLevel.equals(correctLevel)){ | ||||
|                 errMsg += "基板ID:"+subIds[i]+" 档位:"+powerLevel+", "; | ||||
|                 res = true; | ||||
|             } | ||||
|         } | ||||
|         if(res){ | ||||
|             logger.error(errMsg); | ||||
|  | ||||
|         } | ||||
|  | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     @Override | ||||
|     public void run(ApplicationArguments args) throws Exception { | ||||
|         kukaStep2.scheduleAtFixedRate(new Runnable() { | ||||
|             @Override | ||||
|             public void run() { | ||||
|                 try { | ||||
|  | ||||
|  | ||||
|                     //调度开始 | ||||
|                     Integer shelfIsFull = waitingForTarget(Step2Plc2MesVar.ShelfIsFull, true); | ||||
|                     logger.info(""); | ||||
|                     logger.info("==================================  现在开始执行 过程二 任务( 开始 )   ==================================="); | ||||
|                     if(shelfIsFull != 1){ | ||||
|                         logger.info("BOXID生成Event-------失败"+" --- "+"MES监听 Step2Plc2MesVar.ShelfIsFull 是否 等于 1 失败"); | ||||
|                     }else if(shelfIsFull == 2){ | ||||
|                         throw new Exception("MES 监听值出现异常。"); | ||||
|                     } | ||||
|  | ||||
|                     //一. 从plc 中获取 subIdList 和 lineNum | ||||
|                     String[] subIdList = (String[])read(S7Client.S7_DDJ2,Step2Plc2MesVar.SubIdList); | ||||
|                     Integer listSize = (Integer)read(S7Client.S7_DDJ2,Step2Plc2MesVar.PackageNumberSet)-1; | ||||
|  | ||||
|  | ||||
|                     //二. MES 业务 | ||||
|                     //===============           MES 业务 开始         ================= | ||||
|                     //1.MES 生成BoxId | ||||
|                     if(subIdList.length<=0){ | ||||
|                         logger.info("BOXID生成Event-------失败"+" --- "+"从plc里面获取到的基板列表 为空"); | ||||
|                         throw new Exception("BOXID生成Event失败-------kuka机械手 取到了空箱"); | ||||
|                     } | ||||
|                     if(listSize == null){ | ||||
|                         logger.info("BOXID生成Event-------失败"+" --- "+"从plc里面获取到的listSize 为null"); | ||||
|                         throw new Exception("BOXID生成Event失败-------listSize 为null"); | ||||
|                     } | ||||
|  | ||||
|                     //真实的基板ID 就是17位的,plc读取过来,有空格,要把后面3位空格去掉就行了。 | ||||
|                     for(int i=0;i<subIdList.length;i++){ | ||||
|                         subIdList[i] = removeKG(subIdList[i]); | ||||
|                     } | ||||
|                     logger.info("BOXID生成Event-------获取到基板列表:"+ Arrays.toString(subIdList)+",基板数量:"+listSize); | ||||
|  | ||||
|                     WoPackagingBoxSubstrate bySubId = substrateServiceBiz.getBySubId(subIdList[0]); | ||||
|                     logger.info("BOXID生成Event-------依据subId"+subIdList[0]+"去qgs数据库 查询数据,数据内容:"+bySubId); | ||||
|  | ||||
|  | ||||
|                     //如果我们系统中找不到这块基板那么就去camline里面找 | ||||
| //                    if(bySubId == null){ | ||||
| //                        logger.info("BOXID生成Event-------数据库中 无subId:"+ subIdList[0]+"现在从camline 系统获取这个基板相关信息"); | ||||
| //                        //todo | ||||
| //                        CamlineSubIdDTO subIdByCamline = service.getSubIdByCamline(subIdList[0]); | ||||
| //                        bySubId = new WoPackagingBoxSubstrate(); | ||||
| //                        bySubId.setPowerLevel(subIdByCamline.getPowerLevel()); | ||||
| //                        bySubId.setSapMaterial(subIdByCamline.getSapMaterial()); | ||||
| //                        bySubId.setLineBody(2); | ||||
| //                    } | ||||
|                     if(bySubId == null){ | ||||
|                         logger.info("BOXID生成Event-------数据库中 无subId:"+ subIdList[0]); | ||||
|                         throw new Exception("BOXID生成Event-------数据库中 无subId:"+ subIdList[0]); | ||||
|                     } | ||||
|  | ||||
|  | ||||
|                     //校验是否存在混档位情况 | ||||
|                     String boxId = ""; | ||||
|                     if(isMixLevel(subIdList,listSize)){ | ||||
|                         //出现混档 | ||||
|                         logger.info("BOXID生成Event-------subIdList :"+Arrays.asList(subIdList)+"出现混档"); | ||||
|                         boxId = getErrorBoxId(bySubId.getSapMaterial()); | ||||
|  | ||||
|                     }else { | ||||
|                         //正常情况 | ||||
|                         logger.info("BOXID生成Event-------subIdList :"+Arrays.asList(subIdList)+"没有出现混档"); | ||||
|                         boxId = getBoxId(bySubId.getSapMaterial()); | ||||
|                     } | ||||
|                     logger.info("BOXID生成Event-------subIdList :"+Arrays.asList(subIdList)+"isMixLevel 校验结束"); | ||||
|  | ||||
|                     logger.info("BOXID生成Event-------mes 生成的boxId :"+ boxId); | ||||
|                     //2. 依次update 基板表,把boxId 赋予这些基板 | ||||
|                     for(int i=0;i<listSize;i++){ | ||||
|                         substrateServiceBiz.updatePackagingBoxIdAndSlotByWoSubstrateId(boxId,(i+1),subIdList[i]); | ||||
|                     } | ||||
|                     //3.去camline数据库 查询此基板ID 对应的订单 | ||||
|                     String orderNameBySubId = service.getOrderNameBySubId(subIdList[0]); | ||||
|                     //4. box信息录入到box表 | ||||
|                     WoPackagingBox woPackagingBox = new WoPackagingBox(); | ||||
|                     woPackagingBox.setBoxNo(boxId); | ||||
|                     woPackagingBox.setSubstrateQuantity(listSize); | ||||
|                     woPackagingBox.setPackagingTime(LocalDateTime.now()); | ||||
|                     woPackagingBox.setPowerLevel(bySubId.getPowerLevel()); | ||||
|                     woPackagingBox.setLineBody(bySubId.getLineBody()); | ||||
|                     woPackagingBox.setSapMaterial(bySubId.getSapMaterial()); | ||||
|                     woPackagingBox.setOrderNum(orderNameBySubId); | ||||
|                     //1-手动模式,2-自动模式 | ||||
|                     woPackagingBox.setModel(2); | ||||
|                     woPackagingBox.setCreateTime(LocalDateTime.now()); | ||||
|                     woPackagingBox.setPackagingTime(LocalDateTime.now()); | ||||
|                     boxServiceBiz.insert(woPackagingBox); | ||||
|                     logger.info("BOXID生成Event-------boxId :"+ boxId+"写入数据库成功"); | ||||
|                     //===============           MES 业务 结束         ================= | ||||
|  | ||||
|                     //三. 把生成的BoxId 告诉kuka | ||||
|                     write(S7Client.S7_DDJ2,Step2Mes2PlcVar.BoxId,boxId); | ||||
|                     logger.info("BOXID生成Event-------boxId :"+ boxId+"传给PLC 成功"); | ||||
|  | ||||
|                     //四. 当MES完成任务后,把MesToPlc.ShelfIsFullFinish变量置为true,告诉plc,我操作完成了 | ||||
|                     write(S7Client.S7_DDJ2,Step2Mes2PlcVar.ShelfIsFullFinish,true); | ||||
|                     logger.info("BOXID生成Event-------boxId :"+ boxId+"ShelfIsFullFinish 置为true 成功"); | ||||
|                     //四. mes 监控 到PlcToMes.SubArrived==false,就把MesToPlc.SubArrivedFinish置为false | ||||
|                     Integer subArrived2 = waitingForTarget(Step2Plc2MesVar.ShelfIsFull, false); | ||||
|                     if(subArrived2 != 1){ | ||||
|                         logger.info("BOXID生成Event-------失败"+" --- "+"步骤1.  MES监听 Step1Plc2MesVar.SubArrivedToMes 是否 等于 1 失败"); | ||||
|                     }else if(subArrived2 == 2){ | ||||
|                         throw new Exception("MES 监听值出现异常。"); | ||||
|                     } | ||||
|                     write(S7Client.S7_DDJ2,Step2Mes2PlcVar.ShelfIsFullFinish,false); | ||||
|                     logger.info("BOXID生成Event-------boxId :"+ boxId+"ShelfIsFullFinish 置为false 成功,Event2 成功结束"); | ||||
|                     logger.info("==================================  现在开始执行 过程二 任务( 结束 )   ==================================="); | ||||
|                     logger.info(""); | ||||
|  | ||||
|                 }catch (Throwable e){ | ||||
| //                    logger.info("BOXID生成Event-------  出现异常:" + e.toString()); | ||||
|                     logger.info("BOXID生成Event--- 出现异常 : {}",e.getMessage(),e); | ||||
|                 } | ||||
|             } | ||||
|         },1,1, TimeUnit.SECONDS); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * | ||||
|      * arg: | ||||
|      *      Step1Plc2MesVar 参数类型 | ||||
|      *      targetValue        目的值 | ||||
|      * return: | ||||
|      *      2 s7 访问异常; | ||||
|      *      1 成功; | ||||
|      * */ | ||||
|     private Integer waitingForTarget(Step1Plc2MesVar var, Boolean targetValue) { | ||||
|         Integer res = 0; | ||||
|         while (true){ | ||||
|             try { | ||||
|  | ||||
|                 Boolean now = (Boolean) read(S7Client.S7_DDJ2,var); | ||||
|                 //注意:即使now为null ,这里也不会抛出异常,这里很容易产生 空轮询。 | ||||
|                 if(now == null){ | ||||
|                     throw new Exception(""); | ||||
|                 } | ||||
|                 if(targetValue.equals(now)){ | ||||
|                     res = 1; | ||||
|                     break; | ||||
|                 } | ||||
|                 Thread.sleep(200); | ||||
|             }catch (Throwable e){ | ||||
|                 logger.info("S7 数据采集 异常. 监听 变量 :"+var.getName()+" 为目标值:"+targetValue+"失败"); | ||||
|                 res = 2; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return res; | ||||
|     } | ||||
|     /** | ||||
|      * | ||||
|      * arg: | ||||
|      *      Step2Plc2MesVar 参数类型 | ||||
|      *      targetValue        目的值 | ||||
|      * return: | ||||
|      *      2 s7 访问异常; | ||||
|      *      1 成功; | ||||
|      * */ | ||||
|     private Integer waitingForTarget(Step2Plc2MesVar var, Boolean targetValue) { | ||||
|         Integer res = 0; | ||||
|         while (true){ | ||||
|             try { | ||||
|                 Boolean now = (Boolean) read(S7Client.S7_DDJ2,var); | ||||
|                 if(now == null){ | ||||
|                     throw new Exception(""); | ||||
|                 } | ||||
|                 if(targetValue.equals(now)){ | ||||
|                     res = 1; | ||||
|                     break; | ||||
|                 } | ||||
|                 Thread.sleep(200); | ||||
|             }catch (Throwable e){ | ||||
|                 logger.info("S7 数据采集 异常. 监听 变量 :"+var.getName()+" 为目标值:"+targetValue+"失败"); | ||||
|                 res = 2; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return res; | ||||
|     } | ||||
|     /** | ||||
|      * | ||||
|      * arg: | ||||
|      *      Step3Plc2MesVar 参数类型 | ||||
|      *      targetValue        目的值 | ||||
|      * return: | ||||
|      *      2 s7 访问异常; | ||||
|      *      1 成功; | ||||
|      * */ | ||||
|     private Integer waitingForTarget(Step3Plc2MesVar var, Boolean targetValue) { | ||||
|         Integer res = 0; | ||||
|         while (true){ | ||||
|             try { | ||||
|                 Boolean now = (Boolean) read(S7Client.S7_DDJ2,var); | ||||
|                 if(now == null){ | ||||
|                     throw new Exception(""); | ||||
|                 } | ||||
|                 if(targetValue.equals(now)){ | ||||
|                     res = 1; | ||||
|                     break; | ||||
|                 } | ||||
|                 Thread.sleep(200); | ||||
|             }catch (Throwable e){ | ||||
|                 logger.info("S7 数据采集 异常. 监听 变量 :"+var.getName()+" 为目标值:"+targetValue+"失败"); | ||||
|                 res = 2; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return res; | ||||
|     } | ||||
| } | ||||
Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor Daha Fazla Göster
		Yeni konuda referans
	
	Bir kullanıcı engelle