Merge remote-tracking branch 'origin/master'

# Conflicts:
#	ruoyi-modules/pom.xml
master
Yangwl 4 months ago
commit aa6ec6dde6

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-api</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>hwmom-api-mes</artifactId>
<description>
hwmom-api-mes MES接口模块
</description>
<dependencies>
<!-- RuoYi Common Core-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-core</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-excel</artifactId>
</dependency>
</dependencies>
</project>

@ -0,0 +1,21 @@
package org.dromara.mes.api;
import org.dromara.mes.api.model.bo.BaseMaterialInfoBo;
import java.util.List;
/**
*
*
* @author Yinq
*/
public interface RemoteMaterialInfoService {
/**
*
* @param bos
* @return truefalse
*/
Boolean remoteInsertBaseMaterialInfo(List<BaseMaterialInfoBo> bos);
}

@ -0,0 +1,272 @@
package org.dromara.mes.api.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.util.Date;
/**
* base_material_info
*
* @author zangch
* @date 2025-01-07
*/
@Data
public class BaseMaterialInfo {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
private Long materialId;
/**
* ERP
*/
private String erpId;
/**
*
*/
private String materialCode;
/**
*
*/
private String oldMaterialCode;
/**
*
*/
private String materialName;
/**
* ID
*/
private Long materialTypeId;
/**
* (1 2 3)
*/
private String materialCategories;
/**
*
*/
private String materialSubclass;
/**
* (0 1)
*/
private String batchFlag;
/**
*
*/
private Long batchAmount;
/**
* ID
*/
private Long materialUnitId;
/**
*
*/
private String materialUnit;
/**
*
*/
private String materialMatkl;
/**
*
*/
private String materialSpec;
/**
*
*/
private Long netWeight;
/**
*
*/
private Long grossWeight;
/**
* (1 0)
*/
private String alwaysFlag;
/**
*
*/
private Long factoryId;
/**
*
*/
private Long createOrgId;
/**
* 使
*/
private Long useOrgId;
/**
* 线
*/
private Long prodLineId;
/**
* 1 0
*/
private String activeFlag;
/**
* (0 1)
*/
private String deletedFlag;
/**
*
*/
private Long purchasePriceUnitId;
/**
*
*/
private Date approveDate;
/**
* erp
*/
private Date erpModifyDate;
/**
*
*/
private Long maxStockAmount;
/**
*
*/
private Long minStockAmount;
/**
*
*/
private Long safeStockAmount;
/**
* (1 0)
*/
private String applyFlag;
/**
* 1ERP 2 3MES
*/
private String materialClassfication;
/**
* (1 0)
*/
private String autoOutstockFlag;
/**
* (1 0)
*/
private String accessoriesFlag;
/**
* (1 0)
*/
private String lowValueConsumableFlag;
/**
*
*/
private String brand;
/**
*
*/
private String plyrating;
/**
*
*/
private String pattern;
/**
*
*/
private String speedLevel;
/**
*
*/
private String load;
/**
* 1 2 3
*/
private String tireMarkings;
/**
*
*/
private Long minParkingTime;
/**
*
*/
private Long maxParkingTime;
/**
*
*/
private Long standardWeight;
/**
*
*/
private Long weightUpperLimit;
/**
*
*/
private Long weightLowerLimit;
/**
* (0 1)
*/
private String innerTubeFlag;
/**
* (0 1)
*/
private String saleType;
/**
*
*/
private String remark;
/**
*
*/
private String factoryName; //映射字段
/**
*
*/
private String matrialTypeName;//映射字段
}

@ -0,0 +1,256 @@
package org.dromara.mes.api.model.bo;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* base_material_info
*
*/
@Data
public class BaseMaterialInfoBo implements Serializable {
/**
*
*/
private Long materialId;
/**
* ERP
*/
private String erpId;
/**
*
*/
private String materialCode;
/**
*
*/
private String oldMaterialCode;
/**
*
*/
private String materialName;
/**
* ID
*/
private Long materialTypeId;
/**
* (1 2 3)
*/
private String materialCategories;
/**
*
*/
private String materialSubclass;
/**
* (0 1)
*/
private String batchFlag;
/**
*
*/
private Long batchAmount;
/**
* ID
*/
private Long materialUnitId;
/**
*
*/
private String materialUnit;
/**
*
*/
private String materialMatkl;
/**
*
*/
private String materialSpec;
/**
*
*/
private Long netWeight;
/**
*
*/
private Long grossWeight;
/**
* (1 0)
*/
private String alwaysFlag;
/**
*
*/
private Long factoryId;
/**
*
*/
private Long createOrgId;
/**
* 使
*/
private Long useOrgId;
/**
* 线
*/
private Long prodLineId;
/**
* 1 0
*/
private String activeFlag;
/**
* (0 1)
*/
private String deletedFlag;
/**
*
*/
private Long purchasePriceUnitId;
/**
*
*/
private Date approveDate;
/**
* erp
*/
private Date erpModifyDate;
/**
*
*/
private Long maxStockAmount;
/**
*
*/
private Long minStockAmount;
/**
*
*/
private Long safeStockAmount;
/**
* (1 0)
*/
private String applyFlag;
/**
* 1ERP 2 3MES
*/
private String materialClassfication;
/**
* (1 0)
*/
private String autoOutstockFlag;
/**
* (1 0)
*/
private String accessoriesFlag;
/**
* (1 0)
*/
private String lowValueConsumableFlag;
/**
*
*/
private String brand;
/**
*
*/
private String plyrating;
/**
*
*/
private String pattern;
/**
*
*/
private String speedLevel;
/**
*
*/
private String load;
/**
* 1 2 3
*/
private String tireMarkings;
/**
*
*/
private Long minParkingTime;
/**
*
*/
private Long maxParkingTime;
/**
*
*/
private Long standardWeight;
/**
*
*/
private Long weightUpperLimit;
/**
*
*/
private Long weightLowerLimit;
/**
* (0 1)
*/
private String innerTubeFlag;
/**
* (0 1)
*/
private String saleType;
/**
*
*/
private String remark;
}

@ -13,6 +13,7 @@
<module>ruoyi-api-system</module>
<module>ruoyi-api-resource</module>
<module>ruoyi-api-workflow</module>
<module>hwmom-api-mes</module>
</modules>
<artifactId>ruoyi-api</artifactId>

@ -0,0 +1,17 @@
package org.dromara.system.api;
/**
*
*
* @author Yinq
*/
public interface RemoteCodeRuleService {
/**
*
* @param codeRuleCode
* @return currentCode
*/
String selectCodeRuleCode(String codeRuleCode);
}

@ -107,6 +107,22 @@ public class TokenController {
return R.ok(loginVo);
}
// @ApiEncrypt
@PostMapping("/pdaLogin")
public R<LoginVo> pdaLogin(@RequestBody String body) {
LoginBody loginBody = JsonUtils.parseObject(body, LoginBody.class);
// 授权类型和客户端id
String clientId = "428a8310cd442757ae699df5d894f051";
String grantType = "pda";
RemoteClientVo clientVo = remoteClientService.queryByClientId(clientId);
System.out.println(clientVo.toString());
// 校验租户
sysLoginService.checkTenant(loginBody.getTenantId());
// 登录
LoginVo loginVo = IAuthStrategy.login(body, clientVo, grantType);
return R.ok(loginVo);
}
/**
*
*
@ -114,8 +130,7 @@ public class TokenController {
* @return
*/
@GetMapping("/binding/{source}")
public R<String> authBinding(@PathVariable("source") String source,
@RequestParam String tenantId, @RequestParam String domain) {
public R<String> authBinding(@PathVariable("source") String source, @RequestParam String tenantId, @RequestParam String domain) {
SocialLoginConfigProperties obj = socialProperties.getType().get(source);
if (ObjectUtil.isNull(obj)) {
return R.fail(source + "平台账号暂不支持");
@ -138,9 +153,7 @@ public class TokenController {
@PostMapping("/social/callback")
public R<Void> socialCallback(@RequestBody SocialLoginBody loginBody) {
// 获取第三方登录信息
AuthResponse<AuthUser> response = SocialUtils.loginAuth(
loginBody.getSource(), loginBody.getSocialCode(),
loginBody.getSocialState(), socialProperties);
AuthResponse<AuthUser> response = SocialUtils.loginAuth(loginBody.getSource(), loginBody.getSocialCode(), loginBody.getSocialState(), socialProperties);
AuthUser authUserData = response.getData();
// 判断授权响应是否成功
if (!response.ok()) {
@ -222,8 +235,7 @@ public class TokenController {
host = new URL(request.getRequestURL().toString()).getHost();
}
// 根据域名进行筛选
List<TenantListVo> list = StreamUtils.filter(voList, vo ->
StringUtils.equals(vo.getDomain(), host));
List<TenantListVo> list = StreamUtils.filter(voList, vo -> StringUtils.equals(vo.getDomain(), host));
result.setVoList(CollUtil.isNotEmpty(list) ? list : voList);
return R.ok(result);
}

@ -1,6 +1,7 @@
package org.dromara.auth.service;
import org.dromara.auth.domain.vo.LoginVo;
import org.dromara.auth.service.impl.PdaAuthStrategy;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.system.api.domain.vo.RemoteClientVo;
@ -29,6 +30,8 @@ public interface IAuthStrategy {
throw new ServiceException("授权类型不正确!");
}
IAuthStrategy instance = SpringUtils.getBean(beanName);
System.out.println("真实类型="+beanName);
System.out.println(instance instanceof PdaAuthStrategy);
return instance.login(body, client);
}

@ -0,0 +1,108 @@
package org.dromara.auth.service.impl;
import cn.dev33.satoken.secure.BCrypt;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.StpUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.auth.domain.vo.LoginVo;
import org.dromara.auth.form.PasswordLoginBody;
import org.dromara.auth.properties.CaptchaProperties;
import org.dromara.auth.service.IAuthStrategy;
import org.dromara.auth.service.SysLoginService;
import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.constant.GlobalConstants;
import org.dromara.common.core.enums.LoginType;
import org.dromara.common.core.exception.user.CaptchaException;
import org.dromara.common.core.exception.user.CaptchaExpireException;
import org.dromara.common.core.utils.MessageUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.system.api.RemoteUserService;
import org.dromara.system.api.domain.vo.RemoteClientVo;
import org.dromara.system.api.model.LoginUser;
import org.springframework.stereotype.Service;
/**
*
*
* @author Michelle.Chung
*/
@Slf4j
@Service("pdaAuthStrategy")
@RequiredArgsConstructor
public class PdaAuthStrategy implements IAuthStrategy {
private final CaptchaProperties captchaProperties;
private final SysLoginService loginService;
@DubboReference
private RemoteUserService remoteUserService;
@Override
public LoginVo login(String body, RemoteClientVo client) {
System.out.println("PDA service");
PasswordLoginBody loginBody = JsonUtils.parseObject(body, PasswordLoginBody.class);
ValidatorUtils.validate(loginBody);
String tenantId = loginBody.getTenantId();
String username = loginBody.getUsername();
String password = loginBody.getPassword();
String code = loginBody.getCode();
String uuid = loginBody.getUuid();
// 验证码开关
// if (captchaProperties.getEnabled()) {
// validateCaptcha(tenantId, username, code, uuid);
// }
LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
LoginUser user = remoteUserService.getUserInfo(username, tenantId);
loginService.checkLogin(LoginType.PASSWORD, tenantId, username, () -> !BCrypt.checkpw(password, user.getPassword()));
return user;
});
loginUser.setClientKey(client.getClientKey());
loginUser.setDeviceType(client.getDeviceType());
SaLoginModel model = new SaLoginModel();
model.setDevice(client.getDeviceType());
// 自定义分配 不同用户体系 不同 token 授权时间 不设置默认走全局 yml 配置
// 例如: 后台用户30分钟过期 app用户1天过期
model.setTimeout(client.getTimeout());
model.setActiveTimeout(client.getActiveTimeout());
model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId());
// 生成token
LoginHelper.login(loginUser, model);
LoginVo loginVo = new LoginVo();
loginVo.setAccessToken(StpUtil.getTokenValue());
loginVo.setExpireIn(StpUtil.getTokenTimeout());
loginVo.setClientId(client.getClientId());
return loginVo;
}
/**
*
*
* @param username
* @param code
* @param uuid
*/
private void validateCaptcha(String tenantId, String username, String code, String uuid) {
String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + StringUtils.blankToDefault(uuid, "");
String captcha = RedisUtils.getCacheObject(verifyKey);
RedisUtils.deleteObject(verifyKey);
if (captcha == null) {
loginService.recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
throw new CaptchaExpireException();
}
if (!code.equalsIgnoreCase(captcha)) {
loginService.recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"));
throw new CaptchaException();
}
}
}

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>hwmom-common-mom</artifactId>
<description>
hwmom-common-mom 通用功能
</description>
<dependencies>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-satoken</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-json</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

@ -0,0 +1,43 @@
package org.dromara.common.annotation;
import org.dromara.common.enums.OperatorType;
import java.lang.annotation.*;
/**
*
*
* @author xins
*/
@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataSyncPublish {
/**
*
*/
String tableName() default "";
/**
*
*/
OperatorType operatorType() default OperatorType.INSERT;
// /**
// * 是否保存请求的参数
// */
// boolean isSaveRequestData() default true;
//
// /**
// * 是否保存响应的参数
// */
// boolean isSaveResponseData() default true;
//
//
// /**
// * 排除指定的请求参数
// */
// String[] excludeParamNames() default {};
}

@ -0,0 +1,215 @@
package org.dromara.common.aspect;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.StopWatch;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.dromara.common.annotation.DataSyncPublish;
import org.dromara.common.json.utils.JsonUtils;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.validation.BindingResult;
import org.springframework.web.multipart.MultipartFile;
import java.util.Collection;
import java.util.Map;
import java.util.StringJoiner;
/**
*
*
* @author xins
*/
@Slf4j
@Aspect
@AutoConfiguration
public class DataSyncPublishAspect {
/**
*
*/
public static final String[] EXCLUDE_PROPERTIES = { "password", "oldPassword", "newPassword", "confirmPassword" };
/**
* key
*/
private static final ThreadLocal<StopWatch> KEY_CACHE = new ThreadLocal<>();
/**
*
*/
@Before(value = "@annotation(dataSyncPublish)")
public void doBefore(JoinPoint joinPoint, DataSyncPublish dataSyncPublish) {
StopWatch stopWatch = new StopWatch();
KEY_CACHE.set(stopWatch);
stopWatch.start();
}
/**
*
*
* @param joinPoint
*/
@AfterReturning(pointcut = "@annotation(dataSyncPublish)", returning = "jsonResult")
public void doAfterReturning(JoinPoint joinPoint, DataSyncPublish dataSyncPublish, Object jsonResult) {
handleDataSyncPublish(joinPoint, dataSyncPublish, null, jsonResult);
}
/**
*
*
* @param joinPoint
* @param e
*/
@AfterThrowing(value = "@annotation(dataSyncPublish)", throwing = "e")
public void doAfterThrowing(JoinPoint joinPoint, DataSyncPublish dataSyncPublish, Exception e) {
handleDataSyncPublish(joinPoint, dataSyncPublish, e, null);
}
protected void handleDataSyncPublish(final JoinPoint joinPoint, DataSyncPublish dataSyncPublish, final Exception e, Object jsonResult) {
try {
System.out.println("dbname:"+dataSyncPublish.tableName());
System.out.println("operationType:"+dataSyncPublish.operatorType().ordinal());
String params = this.argsArrayToString(joinPoint.getArgs());
System.out.println("params:"+params);
// // *========数据库日志=========*//
// OperLogEvent operLog = new OperLogEvent();
// operLog.setTenantId(LoginHelper.getTenantId());
// operLog.setStatus(BusinessStatus.SUCCESS.ordinal());
// // 请求的地址
// String ip = ServletUtils.getClientIP();
// operLog.setOperIp(ip);
// operLog.setOperUrl(StringUtils.substring(ServletUtils.getRequest().getRequestURI(), 0, 255));
// LoginUser loginUser = LoginHelper.getLoginUser();
// operLog.setOperName(loginUser.getUsername());
// operLog.setDeptName(loginUser.getDeptName());
//
// if (e != null) {
// operLog.setStatus(BusinessStatus.FAIL.ordinal());
// operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000));
// }
// // 设置方法名称
// String className = joinPoint.getTarget().getClass().getName();
// String methodName = joinPoint.getSignature().getName();
// operLog.setMethod(className + "." + methodName + "()");
// // 设置请求方式
// operLog.setRequestMethod(ServletUtils.getRequest().getMethod());
// // 处理设置注解上的参数
// getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult);
// // 设置消耗时间
// StopWatch stopWatch = KEY_CACHE.get();
// stopWatch.stop();
// operLog.setCostTime(stopWatch.getTime());
// // 发布事件保存数据库
// SpringUtils.context().publishEvent(operLog);
} catch (Exception exp) {
// 记录本地异常日志
log.error("异常信息:{}", exp.getMessage());
exp.printStackTrace();
} finally {
KEY_CACHE.remove();
}
}
/**
* Controller
*
* @param log
* @param operLog
* @throws Exception
*/
// public void getControllerMethodDescription(JoinPoint joinPoint, DataSyncPublish dataSyncPublish, Object jsonResult) throws Exception {
// // 设置action动作
// operLog.setBusinessType(log.businessType().ordinal());
// // 设置标题
// operLog.setTitle(log.title());
// // 设置操作人类别
// operLog.setOperatorType(log.operatorType().ordinal());
// // 是否需要保存request参数和值
// if (log.isSaveRequestData()) {
// // 获取参数的信息,传入到数据库中。
// setRequestValue(joinPoint, operLog, log.excludeParamNames());
// }
// // 是否需要保存response参数和值
// if (log.isSaveResponseData() && ObjectUtil.isNotNull(jsonResult)) {
// operLog.setJsonResult(StringUtils.substring(JsonUtils.toJsonString(jsonResult), 0, 2000));
// }
// }
/**
* log
*
* @param operLog
* @throws Exception
*/
// private void setRequestValue(JoinPoint joinPoint, OperLogEvent operLog, String[] excludeParamNames) throws Exception {
// Map<String, String> paramsMap = ServletUtils.getParamMap(ServletUtils.getRequest());
// String requestMethod = operLog.getRequestMethod();
// if (MapUtil.isEmpty(paramsMap) && StringUtils.equalsAny(requestMethod, HttpMethod.PUT.name(), HttpMethod.POST.name(), HttpMethod.DELETE.name())) {
// String params = argsArrayToString(joinPoint.getArgs(), excludeParamNames);
// operLog.setOperParam(StringUtils.substring(params, 0, 2000));
// } else {
// MapUtil.removeAny(paramsMap, EXCLUDE_PROPERTIES);
// MapUtil.removeAny(paramsMap, excludeParamNames);
// operLog.setOperParam(StringUtils.substring(JsonUtils.toJsonString(paramsMap), 0, 2000));
// }
// }
/**
*
*/
private String argsArrayToString(Object[] paramsArray) {
StringJoiner params = new StringJoiner(" ");
if (ArrayUtil.isEmpty(paramsArray)) {
return params.toString();
}
for (Object o : paramsArray) {
if (ObjectUtil.isNotNull(o) && !isFilterObject(o)) {
String str = JsonUtils.toJsonString(o);
Dict dict = JsonUtils.parseMap(str);
if (MapUtil.isNotEmpty(dict)) {
MapUtil.removeAny(dict, EXCLUDE_PROPERTIES);
str = JsonUtils.toJsonString(dict);
}
params.add(str);
}
}
return params.toString();
}
/**
*
*
* @param o
* @return truefalse
*/
@SuppressWarnings("rawtypes")
public boolean isFilterObject(final Object o) {
Class<?> clazz = o.getClass();
if (clazz.isArray()) {
return MultipartFile.class.isAssignableFrom(clazz.getComponentType());
} else if (Collection.class.isAssignableFrom(clazz)) {
Collection collection = (Collection) o;
for (Object value : collection) {
return value instanceof MultipartFile;
}
} else if (Map.class.isAssignableFrom(clazz)) {
Map map = (Map) o;
for (Object value : map.values()) {
return value instanceof MultipartFile;
}
}
return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse
|| o instanceof BindingResult;
}
}

@ -0,0 +1,16 @@
package org.dromara.common.constant;
/**
*
*
* @author ruoyi
*/
public interface DatabaseConstants {
/**
*
*/
String TABLE_NAME_PROD_PLAN_INFO_PREFIX = "prod_plan_info";
}

@ -0,0 +1,23 @@
package org.dromara.common.enums;
/**
*
*
* @author xins
*/
public enum OperatorType {
/**
*
*/
INSERT,
/**
*
*/
UPDATE,
/**
*
*/
DELETE
}

@ -0,0 +1,34 @@
package org.dromara.common.event;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
*
*
* @author xins
*/
@Data
public class DataSyncPublishEvent implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
private String tableName;
/**
*
*/
private String operationType;
/**
* createtimeupdatetime
*/
private String filterTime;
}

@ -0,0 +1,29 @@
package org.dromara.common.event;
import cn.hutool.core.bean.BeanUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.system.api.RemoteLogService;
import org.dromara.system.api.domain.bo.RemoteOperLogBo;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class DataSyncPublishListener {
@DubboReference
private RemoteLogService remoteLogService;
/**
*
*/
@EventListener
public void dataSyncPublish(DataSyncPublishEvent dataSyncPublishEvent) {
// tableName,类型时间删除的id
}
}

@ -0,0 +1,13 @@
package org.dromara.common.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.provider.DynamicBaseSqlProvider;
@Mapper
public interface DynamicBaseSqlMapper<T> extends BaseMapper<T> {
// 自定义动态插入方法,接收表名和对象作为参数
@InsertProvider(type = DynamicBaseSqlProvider.class, method = "dynamicInsert")
int dynamicInsert(@Param("tableName") String tableName, @Param("tableNamePrefix") String tableNamePrefix,@Param("entity") T entity);
}

@ -0,0 +1,32 @@
package org.dromara.common.provider;
import org.apache.ibatis.jdbc.SQL;
import java.util.Map;
public class DynamicBaseSqlProvider {
public String dynamicInsert(Map<String, Object> params) {
String tableName = (String) params.get("tableName");
// Object entity = params.get("entity");
String tableNamePrefix = (String) params.get("tableNamePrefix");
SQL sql = new SQL();
sql.INSERT_INTO(tableName);
switch(tableNamePrefix){
case "prod_plan_info":
sql.INTO_COLUMNS("plan_code", "material_id", "material_bom_id","plan_amount","dispatch_amount");
sql.INTO_VALUES("#{entity.planCode}", "#{entity.materialId}", "#{entity.materialBomId}", "#{entity.planAmount}", "#{entity.dispatchAmount}");
break;
}
return sql.toString();
}
public String selectByDynamicTableName(Map<String, Object> params) {
String tableName = (String) params.get("tableName");
return new SQL() {{
SELECT("*");
FROM(tableName);
}}.toString();
}
}

@ -0,0 +1,2 @@
org.dromara.common.aspect.DataSyncPublishAspect
org.dromara.common.event.DataSyncPublishListener

@ -45,6 +45,7 @@
<module>ruoyi-common-nacos</module>
<module>ruoyi-common-bus</module>
<module>ruoyi-common-sse</module>
<module>hwmom-common-mom</module>
</modules>
<artifactId>ruoyi-common</artifactId>

@ -0,0 +1,21 @@
package org.dromara.common.core.constant;
/**
* SYS
*
* @author ruoyi
*/
public interface SysConstants {
/**
* SYS(1)
*/
String SYS_RENEW_FLAG_NO = "1";
/**
* SYS(2)
*/
String SYS_RENEW_FLAG_DAY = "2";
}

@ -320,4 +320,26 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
.collect(Collectors.toList());
}
/**
* *
*
* @param object Object
* @return true false
*/
public static boolean isNull(Object object)
{
return object == null;
}
/**
* *
*
* @param object Object
* @return true false
*/
public static boolean isNotNull(Object object)
{
return !isNull(object);
}
}

@ -0,0 +1,49 @@
package org.dromara.common.core.utils.uuid;
/**
* ID
*
* @author ruoyi
*/
public class IdUtils
{
/**
* UUID
*
* @return UUID
*/
public static String randomUUID()
{
return UUID.randomUUID().toString();
}
/**
* UUID线
*
* @return UUID线
*/
public static String simpleUUID()
{
return UUID.randomUUID().toString(true);
}
/**
* UUID使ThreadLocalRandomUUID
*
* @return UUID
*/
public static String fastUUID()
{
return UUID.fastUUID().toString();
}
/**
* UUID线使ThreadLocalRandomUUID
*
* @return UUID线
*/
public static String fastSimpleUUID()
{
return UUID.fastUUID().toString(true);
}
}

@ -0,0 +1,134 @@
package org.dromara.common.core.utils.uuid;
import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.StringUtils;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author ruoyi
*/
public class Seq {
// 通用序列类型
public static final String commSeqType = "COMMON";
// 上传序列类型
public static final String uploadSeqType = "UPLOAD";
// 通用接口序列数
private static AtomicInteger commSeq = new AtomicInteger(1);
// 上传接口序列数
private static AtomicInteger uploadSeq = new AtomicInteger(1);
// 机器标识
private static final String machineCode = "A";
// 计划编号记录标识
public static final String mesPlanCodeSeqType = "MES_PLAN_CODE";
// 计划编号序列数
private static AtomicInteger mesPlanCodeSeq = new AtomicInteger(1);
// 计划编号标识
public static final String mesPlanCodeCode = "PL";
/**
*
*
* @return
*/
public static String getId() {
return getId(commSeqType);
}
/**
* 16 yyMMddHHmmss + + 3
*
* @return
*/
public static String getId(String type) {
AtomicInteger atomicInt = commSeq;
if (uploadSeqType.equals(type)) {
atomicInt = uploadSeq;
}
return getId(atomicInt, 3);
}
/**
* yyMMddHHmmss + + length
*
* @param atomicInt
* @param length
* @return
*/
public static String getId(AtomicInteger atomicInt, int length) {
String result = DateUtils.dateTimeNow();
result += machineCode;
result += getSeq(atomicInt, length);
return result;
}
/**
* [1, 10 (length)), 0length
*
* @return
*/
private synchronized static String getSeq(AtomicInteger atomicInt, int length) {
// 先取值再+1
int value = atomicInt.getAndIncrement();
// 如果更新后值>=10 的 (length)幂次方则重置为1
int maxSeq = (int) Math.pow(10, length);
if (atomicInt.get() >= maxSeq) {
atomicInt.set(1);
}
// 转字符串用0左补齐
return StringUtils.padl(value, length);
}
/**
* 16 yyMMddHHmmss + + 3
*
* @return
*/
public static String getId(String type,String code) {
AtomicInteger atomicInt = commSeq;
if (mesPlanCodeSeqType.equals(type)) {
atomicInt = mesPlanCodeSeq;
}
return getId(atomicInt, 4, code);
}
/**
* yyMMddHHmmss + + length
*
* @param atomicInt
* @param length
* @return
*/
public static String getId(AtomicInteger atomicInt, int length, String code) {
String result = DateUtils.dateTimeNow();
result += code;
result += getSeq(atomicInt, length);
return result;
}
/**
* +yyMMdd + length
*
* @param atomicInt
* @param length
* @return
*/
public static String getNewId(AtomicInteger atomicInt, int length, String code) {
String result = code;
result += DateUtils.dateTime();
result += getSeq(atomicInt, length);
return result;
}
}

@ -0,0 +1,486 @@
package org.dromara.common.core.utils.uuid;
import cn.hutool.core.exceptions.UtilException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
/**
* universally unique identifierUUID
*
* @author ruoyi
*/
public final class UUID implements java.io.Serializable, Comparable<UUID>
{
private static final long serialVersionUID = -1185015143654744140L;
/**
* SecureRandom
*
*/
private static class Holder
{
static final SecureRandom numberGenerator = getSecureRandom();
}
/** 此UUID的最高64有效位 */
private final long mostSigBits;
/** 此UUID的最低64有效位 */
private final long leastSigBits;
/**
*
*
* @param data
*/
private UUID(byte[] data)
{
long msb = 0;
long lsb = 0;
assert data.length == 16 : "data must be 16 bytes in length";
for (int i = 0; i < 8; i++)
{
msb = (msb << 8) | (data[i] & 0xff);
}
for (int i = 8; i < 16; i++)
{
lsb = (lsb << 8) | (data[i] & 0xff);
}
this.mostSigBits = msb;
this.leastSigBits = lsb;
}
/**
* 使 UUID
*
* @param mostSigBits {@code UUID} 64
* @param leastSigBits {@code UUID} 64
*/
public UUID(long mostSigBits, long leastSigBits)
{
this.mostSigBits = mostSigBits;
this.leastSigBits = leastSigBits;
}
/**
* 4UUID
*
* @return {@code UUID}
*/
public static UUID fastUUID()
{
return randomUUID(false);
}
/**
* 4UUID 使 UUID
*
* @return {@code UUID}
*/
public static UUID randomUUID()
{
return randomUUID(true);
}
/**
* 4UUID 使 UUID
*
* @param isSecure 使{@link SecureRandom}
* @return {@code UUID}
*/
public static UUID randomUUID(boolean isSecure)
{
final Random ng = isSecure ? Holder.numberGenerator : getRandom();
byte[] randomBytes = new byte[16];
ng.nextBytes(randomBytes);
randomBytes[6] &= 0x0f; /* clear version */
randomBytes[6] |= 0x40; /* set to version 4 */
randomBytes[8] &= 0x3f; /* clear variant */
randomBytes[8] |= 0x80; /* set to IETF variant */
return new UUID(randomBytes);
}
/**
* 3UUID
*
* @param name UUID
*
* @return {@code UUID}
*/
public static UUID nameUUIDFromBytes(byte[] name)
{
MessageDigest md;
try
{
md = MessageDigest.getInstance("MD5");
}
catch (NoSuchAlgorithmException nsae)
{
throw new InternalError("MD5 not supported");
}
byte[] md5Bytes = md.digest(name);
md5Bytes[6] &= 0x0f; /* clear version */
md5Bytes[6] |= 0x30; /* set to version 3 */
md5Bytes[8] &= 0x3f; /* clear variant */
md5Bytes[8] |= 0x80; /* set to IETF variant */
return new UUID(md5Bytes);
}
/**
* {@link #toString()} {@code UUID}
*
* @param name {@code UUID}
* @return {@code UUID}
* @throws IllegalArgumentException name {@link #toString}
*
*/
public static UUID fromString(String name)
{
String[] components = name.split("-");
if (components.length != 5)
{
throw new IllegalArgumentException("Invalid UUID string: " + name);
}
for (int i = 0; i < 5; i++)
{
components[i] = "0x" + components[i];
}
long mostSigBits = Long.decode(components[0]).longValue();
mostSigBits <<= 16;
mostSigBits |= Long.decode(components[1]).longValue();
mostSigBits <<= 16;
mostSigBits |= Long.decode(components[2]).longValue();
long leastSigBits = Long.decode(components[3]).longValue();
leastSigBits <<= 48;
leastSigBits |= Long.decode(components[4]).longValue();
return new UUID(mostSigBits, leastSigBits);
}
/**
* UUID 128 64
*
* @return UUID 128 64
*/
public long getLeastSignificantBits()
{
return leastSigBits;
}
/**
* UUID 128 64
*
* @return UUID 128 64
*/
public long getMostSignificantBits()
{
return mostSigBits;
}
/**
* {@code UUID} . {@code UUID}
* <p>
* :
* <ul>
* <li>1 UUID
* <li>2 DCE UUID
* <li>3 UUID
* <li>4 UUID
* </ul>
*
* @return {@code UUID}
*/
public int version()
{
// Version is bits masked by 0x000000000000F000 in MS long
return (int) ((mostSigBits >> 12) & 0x0f);
}
/**
* {@code UUID} {@code UUID}
* <p>
*
* <ul>
* <li>0 NCS
* <li>2 <a href="http://www.ietf.org/rfc/rfc4122.txt">IETF&nbsp;RFC&nbsp;4122</a>(Leach-Salz),
* <li>6
* <li>7 使
* </ul>
*
* @return {@code UUID}
*/
public int variant()
{
// This field is composed of a varying number of bits.
// 0 - - Reserved for NCS backward compatibility
// 1 0 - The IETF aka Leach-Salz variant (used by this class)
// 1 1 0 Reserved, Microsoft backward compatibility
// 1 1 1 Reserved for future definition.
return (int) ((leastSigBits >>> (64 - (leastSigBits >>> 62))) & (leastSigBits >> 63));
}
/**
* UUID
*
* <p>
* 60 {@code UUID} time_lowtime_mid time_hi <br>
* 100 UTC 1582 10 15
*
* <p>
* UUID version 1<br>
* {@code UUID} UUID UnsupportedOperationException
*
* @throws UnsupportedOperationException {@code UUID} version 1 UUID
*/
public long timestamp() throws UnsupportedOperationException
{
checkTimeBase();
return (mostSigBits & 0x0FFFL) << 48//
| ((mostSigBits >> 16) & 0x0FFFFL) << 32//
| mostSigBits >>> 32;
}
/**
* UUID
*
* <p>
* 14 UUID clock_seq clock_seq UUID
* <p>
* {@code clockSequence} UUID version 1 UUID UUID
* UnsupportedOperationException
*
* @return {@code UUID}
*
* @throws UnsupportedOperationException UUID version 1
*/
public int clockSequence() throws UnsupportedOperationException
{
checkTimeBase();
return (int) ((leastSigBits & 0x3FFF000000000000L) >>> 48);
}
/**
* UUID
*
* <p>
* 48 UUID node IEEE 802 UUID
* <p>
* UUID version 1<br>
* UUID UUID UnsupportedOperationException
*
* @return {@code UUID}
*
* @throws UnsupportedOperationException UUID version 1
*/
public long node() throws UnsupportedOperationException
{
checkTimeBase();
return leastSigBits & 0x0000FFFFFFFFFFFFL;
}
/**
* {@code UUID}
*
* <p>
* UUID BNF
*
* <pre>
* {@code
* UUID = <time_low>-<time_mid>-<time_high_and_version>-<variant_and_sequence>-<node>
* time_low = 4*<hexOctet>
* time_mid = 2*<hexOctet>
* time_high_and_version = 2*<hexOctet>
* variant_and_sequence = 2*<hexOctet>
* node = 6*<hexOctet>
* hexOctet = <hexDigit><hexDigit>
* hexDigit = [0-9a-fA-F]
* }
* </pre>
*
* </blockquote>
*
* @return {@code UUID}
* @see #toString(boolean)
*/
@Override
public String toString()
{
return toString(false);
}
/**
* {@code UUID}
*
* <p>
* UUID BNF
*
* <pre>
* {@code
* UUID = <time_low>-<time_mid>-<time_high_and_version>-<variant_and_sequence>-<node>
* time_low = 4*<hexOctet>
* time_mid = 2*<hexOctet>
* time_high_and_version = 2*<hexOctet>
* variant_and_sequence = 2*<hexOctet>
* node = 6*<hexOctet>
* hexOctet = <hexDigit><hexDigit>
* hexDigit = [0-9a-fA-F]
* }
* </pre>
*
* </blockquote>
*
* @param isSimple '-'UUID
* @return {@code UUID}
*/
public String toString(boolean isSimple)
{
final StringBuilder builder = new StringBuilder(isSimple ? 32 : 36);
// time_low
builder.append(digits(mostSigBits >> 32, 8));
if (false == isSimple)
{
builder.append('-');
}
// time_mid
builder.append(digits(mostSigBits >> 16, 4));
if (false == isSimple)
{
builder.append('-');
}
// time_high_and_version
builder.append(digits(mostSigBits, 4));
if (false == isSimple)
{
builder.append('-');
}
// variant_and_sequence
builder.append(digits(leastSigBits >> 48, 4));
if (false == isSimple)
{
builder.append('-');
}
// node
builder.append(digits(leastSigBits, 12));
return builder.toString();
}
/**
* UUID
*
* @return UUID
*/
@Override
public int hashCode()
{
long hilo = mostSigBits ^ leastSigBits;
return ((int) (hilo >> 32)) ^ (int) hilo;
}
/**
*
* <p>
* {@code null} UUID UUID varriant {@code true}
*
* @param obj
*
* @return {@code true} {@code false}
*/
@Override
public boolean equals(Object obj)
{
if ((null == obj) || (obj.getClass() != UUID.class))
{
return false;
}
UUID id = (UUID) obj;
return (mostSigBits == id.mostSigBits && leastSigBits == id.leastSigBits);
}
// Comparison Operations
/**
* UUID UUID
*
* <p>
* UUID UUID UUID UUID UUID
*
* @param val UUID UUID
*
* @return UUID val -10 1
*
*/
@Override
public int compareTo(UUID val)
{
// The ordering is intentionally set up so that the UUIDs
// can simply be numerically compared as two numbers
return (this.mostSigBits < val.mostSigBits ? -1 : //
(this.mostSigBits > val.mostSigBits ? 1 : //
(this.leastSigBits < val.leastSigBits ? -1 : //
(this.leastSigBits > val.leastSigBits ? 1 : //
0))));
}
// -------------------------------------------------------------------------------------------------------------------
// Private method start
/**
* hex
*
* @param val
* @param digits
* @return
*/
private static String digits(long val, int digits)
{
long hi = 1L << (digits * 4);
return Long.toHexString(hi | (val & (hi - 1))).substring(1);
}
/**
* time-basedUUID
*/
private void checkTimeBase()
{
if (version() != 1)
{
throw new UnsupportedOperationException("Not a time-based UUID");
}
}
/**
* {@link SecureRandom} (RNG)
*
* @return {@link SecureRandom}
*/
public static SecureRandom getSecureRandom()
{
try
{
return SecureRandom.getInstance("SHA1PRNG");
}
catch (NoSuchAlgorithmException e)
{
throw new UtilException(e);
}
}
/**
* <br>
* ThreadLocalRandomJDK 7线
*
* @return {@link ThreadLocalRandom}
*/
public static ThreadLocalRandom getRandom()
{
return ThreadLocalRandom.current();
}
}

@ -45,4 +45,7 @@ public @interface Log {
*/
String[] excludeParamNames() default {};
String tableName() default "";
}

@ -113,7 +113,13 @@ public class LogAspect {
// 设置消耗时间
StopWatch stopWatch = KEY_CACHE.get();
stopWatch.stop();
operLog.setCostTime(stopWatch.getTime());
operLog.setCostTime(stopWatch.getTime());//毫秒1毫秒=1000000纳秒nano
operLog.setSimpleClassName(joinPoint.getTarget().getClass().getSimpleName());
operLog.setTableName(controllerLog.tableName());
// 发布事件保存数据库
SpringUtils.context().publishEvent(operLog);
} catch (Exception exp) {

@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil;
import com.alibaba.fastjson2.JSONObject;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
@ -11,6 +12,9 @@ import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.utils.ServletUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ip.AddressUtils;
import org.dromara.common.log.enums.BusinessStatus;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.RemoteClientService;
import org.dromara.system.api.RemoteLogService;
@ -20,6 +24,10 @@ import org.dromara.system.api.domain.vo.RemoteClientVo;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
*
*
@ -34,6 +42,11 @@ public class LogEventListener {
@DubboReference
private RemoteClientService remoteClientService;
public static final Map<String, String> TABLE_ID_MAP = new HashMap<>();
static {
TABLE_ID_MAP.put("base_class_team_info", "class_team_id");
}
/**
*
*/
@ -41,6 +54,45 @@ public class LogEventListener {
public void saveLog(OperLogEvent operLogEvent) {
RemoteOperLogBo sysOperLog = BeanUtil.toBean(operLogEvent, RemoteOperLogBo.class);
remoteLogService.saveLog(sysOperLog);
this.dataSyncPublish(operLogEvent);
}
private void dataSyncPublish(OperLogEvent operLogEvent) {
/**
* redis
*/
Integer status = operLogEvent.getStatus();
Integer businessType = operLogEvent.getBusinessType();
if (status.equals(BusinessStatus.SUCCESS.ordinal())
&& !businessType.equals(BusinessType.OTHER.ordinal()) && !businessType.equals(BusinessType.EXPORT.ordinal())
&& !businessType.equals(BusinessType.GENCODE.ordinal()) && !businessType.equals(BusinessType.FORCE.ordinal())) {
JSONObject daySyncPublishJson = new JSONObject();
String tableName = operLogEvent.getTableName();
if (StringUtils.isEmpty(tableName)) {
String simpleClassName = operLogEvent.getSimpleClassName();
simpleClassName = simpleClassName.replaceFirst("Controller", "");
tableName = camelToSnake(simpleClassName);
}
long costTime = operLogEvent.getCostTime();
long filterTimeL = System.currentTimeMillis() - costTime - 60000;//多减1分钟
daySyncPublishJson.put("tableName", "["+tableName+"]");
daySyncPublishJson.put("filterTime", filterTimeL);
daySyncPublishJson.put("businessType", operLogEvent.getBusinessType());
if (businessType.equals(BusinessType.DELETE.ordinal())) {
String tableId = TABLE_ID_MAP.get(tableName);
if (StringUtils.isNotEmpty(tableId)) {
daySyncPublishJson.put(tableId, operLogEvent.getOperParam());
}
}
RedisUtils.setCacheObject("publish", daySyncPublishJson.toString());
}
}
/**
@ -100,4 +152,31 @@ public class LogEventListener {
return "[" + msg + "]";
}
public static String camelToSnake(String str) {
if (str == null || str.isEmpty()) {
return str;
}
StringBuilder result = new StringBuilder();
char[] charArray = str.toCharArray();
for (int i = 0; i < charArray.length; i++) {
char ch = charArray[i];
if (Character.isUpperCase(ch)) {
// 如果不是字符串的第一个字符,则在前面加上下划线
if (i != 0) {
result.append("_");
}
// 将大写字母转为小写并追加到结果中
result.append(Character.toLowerCase(ch));
} else {
// 直接追加非大写的字符
result.append(ch);
}
}
return result.toString();
}
}

@ -112,4 +112,15 @@ public class OperLogEvent implements Serializable {
*
*/
private Long costTime;
/**
* package
*/
private String simpleClassName;
/**
*
*/
private String tableName;
}

@ -0,0 +1,149 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-modules</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>hwmom-api</artifactId>
<description>
hwmom-api系统模块
</description>
<dependencies>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-nacos</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sentinel</artifactId>
</dependency>
<!-- RuoYi Common Log -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-log</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-dict</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-doc</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-web</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-seata</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-idempotent</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-tenant</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-security</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-translation</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sensitive</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-encrypt</artifactId>
</dependency>
<!-- RuoYi Api System -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-api-system</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-api-resource</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.mysql</groupId>-->
<!-- <artifactId>mysql-connector-j</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>hwmom-api-mes</artifactId>
<version>2.2.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-job</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

@ -0,0 +1,22 @@
package org.dromara.api;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
/**
*
*
* @author ruoyi
*/
@EnableDubbo
@SpringBootApplication
public class HwMomApiApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(HwMomApiApplication.class);
application.setApplicationStartup(new BufferingApplicationStartup(2048));
application.run(args);
System.out.println("(♥◠‿◠)ノ゙ HwApi启动成功 ლ(´ڡ`ლ)゙ ");
}
}

@ -0,0 +1,41 @@
package org.dromara.api.controller;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.api.service.IBaseMaterialInfoApiService;
import org.dromara.mes.api.RemoteMaterialInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
/**
*
* 访:/mes/baseWorkshopInfo
*
* @author Yinq
* @date 2025-01-02
*/
@Slf4j
@RequiredArgsConstructor
@RestController
@RequestMapping("/materialInfoApi")
public class BaseMaterialInfoApiController extends BaseController {
@Autowired
private final IBaseMaterialInfoApiService materialInfoApiService;
/**
*
*/
@PostMapping ("/test")
public String test(String requestBody) {
return materialInfoApiService.insertApi(requestBody);
}
}

@ -0,0 +1,56 @@
package org.dromara.api.domain.sap;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @Author YinQ
* @create 2023-09-26 14:46
*/
public class SAPPortDto {
private static final long serialVersionUID = 1L;
/**
*
*/
@JsonProperty(value = "NDATE")
private String startDate;
/**
*
*/
@JsonProperty(value = "EDATE")
private String endDate;
/**
*
*/
@JsonProperty(value = "WERKS")
private WERKSDto factoryCodes;
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
public WERKSDto getFactoryCodes() {
return factoryCodes;
}
public void setFactoryCodes(WERKSDto factoryCodes) {
this.factoryCodes = factoryCodes;
}
}

@ -0,0 +1,33 @@
package org.dromara.api.domain.sap;
import java.util.HashMap;
import java.util.List;
/**
* @Author YinQ
* @create 2023-09-26 15:13
*/
public class WERKSDto {
/**
* Map
*/
List<HashMap<String, String>> item;
public List<HashMap<String, String>> getItem() {
return item;
}
public void setItem(List<HashMap<String, String>> item) {
this.item = item;
}
@Override
public String toString() {
return "WERKSDto{" +
"item=" + item +
'}';
}
}

@ -0,0 +1,61 @@
package org.dromara.api.domain.sap.vo;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.dromara.api.domain.sap.WERKSDto;
import java.util.HashMap;
import java.util.List;
/**
*
*
* @Author YinQ
* @create 2023-09-27 13:37
*/
public class SAPResultVo {
@JsonProperty(value = "O_TAB")
private HashMap<String, List<HashMap<String, String>>> O_TAB;
@JsonProperty(value = "WERKS")
private WERKSDto WERKS;
@JsonProperty(value = "O_RETURN")
private WERKSDto O_RETURN;
public HashMap<String, List<HashMap<String, String>>> getO_TAB() {
return O_TAB;
}
public void setO_TAB(HashMap<String, List<HashMap<String, String>>> o_TAB) {
O_TAB = o_TAB;
}
public WERKSDto getWERKS() {
return WERKS;
}
public void setWERKS(WERKSDto WERKS) {
this.WERKS = WERKS;
}
public WERKSDto getO_RETURN() {
return O_RETURN;
}
public void setO_RETURN(WERKSDto o_RETURN) {
O_RETURN = o_RETURN;
}
public SAPResultVo() {
}
@Override
public String toString() {
return "SAPResultVo{" +
"O_TAB=" + O_TAB +
", WERKS='" + WERKS + '\'' +
", O_RETURN=" + O_RETURN +
'}';
}
}

@ -0,0 +1,14 @@
package org.dromara.api.service;
/**
* APIService
*
* @author Yinq
* @date 2025-01-02
*/
public interface IBaseMaterialInfoApiService {
String insertApi(String requestBody);
}

@ -0,0 +1,23 @@
package org.dromara.api.service;
import org.dromara.api.domain.sap.SAPPortDto;
import org.dromara.mes.api.model.bo.BaseMaterialInfoBo;
import java.util.List;
/**
* APIService
*
* @author Yinq
* @date 2025-01-02
*/
public interface ICommonApiService {
String getSAPData(SAPPortDto sapPortDto);
List<BaseMaterialInfoBo> convertSAPToMaterialEntity(String json);
}

@ -0,0 +1,53 @@
package org.dromara.api.service.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.api.domain.sap.SAPPortDto;
import org.dromara.api.domain.sap.vo.SAPResultVo;
import org.dromara.api.service.IBaseMaterialInfoApiService;
import lombok.RequiredArgsConstructor;
import org.dromara.api.service.ICommonApiService;
import org.dromara.api.utils.SAPApiUtils;
import org.dromara.api.utils.SAPConstants;
import org.dromara.mes.api.RemoteMaterialInfoService;
import org.dromara.mes.api.model.bo.BaseMaterialInfoBo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* APIService
*
* @author Yinq
* @date 2025-01-02
*/
@RequiredArgsConstructor
@Service
public class BaseMaterialInfoApiServiceImpl implements IBaseMaterialInfoApiService {
@Autowired
private final ICommonApiService commonApiService;
@DubboReference
private final RemoteMaterialInfoService remoteMaterialInfoService;
@Override
public String insertApi(String requestBody) {
SAPPortDto sapPortDto = new SAPPortDto();
//请求API接口获取数据
String json = commonApiService.getSAPData(sapPortDto);
//解析数据,存储实体类
List<BaseMaterialInfoBo> list = commonApiService.convertSAPToMaterialEntity(json);
remoteMaterialInfoService.remoteInsertBaseMaterialInfo(list);
return "success";
}
}

@ -0,0 +1,77 @@
package org.dromara.api.service.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.dromara.api.domain.sap.SAPPortDto;
import org.dromara.api.domain.sap.vo.SAPResultVo;
import org.dromara.api.service.ICommonApiService;
import org.dromara.api.utils.SAPApiUtils;
import org.dromara.api.utils.SAPConstants;
import org.dromara.mes.api.model.bo.BaseMaterialInfoBo;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* APIService
*
* @author Yinq
* @date 2025-01-02
*/
@Service
public class CommonApiServiceImpl implements ICommonApiService {
@Override
public String getSAPData(SAPPortDto sapPortDto) {
String requestParam = null;
String result = null;
try {
//获取物料API
// 创建ObjectMapper实例 对象转JSON字符串
ObjectMapper objectMapper = new ObjectMapper();
// 格式化输出
objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
requestParam = objectMapper.writeValueAsString(sapPortDto);
result = SAPApiUtils.sendSAPHttpPost(SAPConstants.SAP_PREFIX_URL + SAPConstants.MATERIAL_URL, requestParam);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return result;
}
@Override
public List<BaseMaterialInfoBo> convertSAPToMaterialEntity(String json) {
SAPResultVo resultVo = null;
try {
// 处理接口返回消息
ObjectMapper resultMapper = new ObjectMapper();
// 将 JSON 字符串 转换为 Java 对象
resultVo = resultMapper.readValue(json, SAPResultVo.class);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
List<BaseMaterialInfoBo> materialInfoArrayList = new ArrayList<>();
assert resultVo != null;
List<HashMap<String, String>> itemList = resultVo.getO_TAB().get("item");
for (HashMap<String, String> map : itemList) {
BaseMaterialInfoBo materialInfo = new BaseMaterialInfoBo();
materialInfo.setMaterialCode(map.get("MATNR"));
materialInfo.setMaterialName(map.get("MAKTX"));
materialInfo.setMaterialUnit(map.get("MEINS"));
materialInfo.setMaterialMatkl(map.get("MATKL"));
materialInfoArrayList.add(materialInfo);
}
return materialInfoArrayList;
}
}

@ -0,0 +1,30 @@
package org.dromara.api.snailjob;
import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
import com.aizuda.snailjob.client.job.core.dto.JobArgs;
import com.aizuda.snailjob.client.model.ExecuteResult;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.aizuda.snailjob.common.log.SnailJobLog;
import org.dromara.api.service.IBaseMaterialInfoApiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author opensnail
* @date 2024-05-17
*/
@Component
@JobExecutor(name = "materialInfoJobExecutor")
public class MaterialInfoJobExecutor {
@Autowired
IBaseMaterialInfoApiService baseMaterialInfoApiService;
public ExecuteResult jobExecute(JobArgs jobArgs) {
String jobParams = String.valueOf(jobArgs.getJobParams());
String result = baseMaterialInfoApiService.insertApi(jobParams);
SnailJobLog.LOCAL.info("materialInfoJobExecutor.jobArgs:{}", JsonUtil.toJsonString(jobArgs));
return ExecuteResult.success(result);
}
}

@ -0,0 +1,43 @@
package org.dromara.api.utils;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import java.util.Base64;
/**
* @Author YinQ
* @create 2023-10-12 10:52
*/
public class SAPApiUtils {
/**
* POSTjson
* @param apiUrl
* @param jsonData
* @return
*/
public static String sendSAPHttpPost(String apiUrl, String jsonData) {
try {
// 构建POST请求
HttpRequest request = HttpRequest.post(apiUrl)
.header("Authorization", "Basic " + Base64.getUrlEncoder().
encodeToString((SAPConstants.USER_NAME + ":" + SAPConstants.PASS_WORD).getBytes()))
.body(jsonData) // 设置JSON格式的请求体
.contentType("application/json") // 设置Content-Type为application/json
.setConnectionTimeout(1000 * 10) // 设置请求连接超时时间
;
// 发送POST请求
HttpResponse httpResponse = request.execute();
// 获取响应内容
return httpResponse.body();
} catch (Exception e) {
// 捕获异常并重新抛出自定义异常
throw new RuntimeException("Failed to send SAP HTTP POST request: " + e.getMessage(), e);
}
}
}

@ -0,0 +1,70 @@
package org.dromara.api.utils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @Author YinQ
* @create 2023-09-26 15:39
*/
@Component
public class SAPConstants {
/**
* SAP-URL
*/
public static String SAP_PREFIX_URL;
/**
* SAP-
*/
public static String USER_NAME;
/**
* SAP-
*/
public static String PASS_WORD;
/**
* (MES2019)
*/
public static final String MATERIAL_URL = "/SdGetSB/SdSapGetMaterialToMesSvcRSProxy/merge";
/**
* (MES2019)
*/
public static final String PRODUCTION_ORDERS_URL = "/SdGetSB/SdSapGetPOToMesSvcRSProxy/merge";
/**
* (MES2019)
*/
public static final String EQUIPMENT_URL = "/SdGetSB/SdSapGetEQToMesSvcRSProxy/merge";
/**
* BOM(MES2019)
*/
public static final String PRODUCTS_BOM_URL = "/SdGetSB/SdSapGetBomToMesSvcRSProxy/merge";
/**
*
*/
public static final String FACTORY_CODE = "1301";
// @Value("${sap.prefix}")
public void setPrefix(String value) {
SAP_PREFIX_URL = value;
}
// @Value("${sap.username}")
public void setUserName(String value) {
USER_NAME = value;
}
// @Value("${sap.password}")
public void setPassWord(String value) {
PASS_WORD = value;
}
}

@ -0,0 +1,34 @@
# Tomcat
server:
port: 6016
# Spring
spring:
application:
# 应用名称
name: hwmom-api
profiles:
# 环境配置
active: @profiles.active@
--- # nacos 配置
spring:
cloud:
nacos:
# nacos 服务地址
server-addr: @nacos.server@
username: @nacos.username@
password: @nacos.password@
discovery:
# 注册组
group: @nacos.discovery.group@
namespace: ${spring.profiles.active}
config:
# 配置组
group: @nacos.config.group@
namespace: ${spring.profiles.active}
config:
import:
- optional:nacos:application-common.yml
- optional:nacos:datasource.yml
- optional:nacos:${spring.application.name}.yml

@ -0,0 +1,8 @@
Spring Boot Version: ${spring-boot.version}
Spring Application Name: ${spring.application.name}
__ _
/ /_ _ ______ ___ ____ ____ ___ ____ _____ (_)
/ __ \ | /| / / __ `__ \/ __ \/ __ `__ \______/ __ `/ __ \/ /
/ / / / |/ |/ / / / / / / /_/ / / / / / /_____/ /_/ / /_/ / /
/_/ /_/|__/|__/_/ /_/ /_/\____/_/ /_/ /_/ \__,_/ .___/_/
/_/

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 日志存放路径 -->
<property name="log.path" value="logs/${project.artifactId}" />
<!-- 日志输出格式 -->
<property name="console.log.pattern"
value="%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${console.log.pattern}</pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<include resource="logback-common.xml" />
<include resource="logback-logstash.xml" />
<!-- 开启 skywalking 日志收集 -->
<include resource="logback-skylog.xml" />
<!--系统操作日志-->
<root level="info">
<appender-ref ref="console" />
</root>
</configuration>

@ -0,0 +1,3 @@
java包使用 `.` 分割 resource 目录使用 `/` 分割
<br>
此文件目的 防止文件夹粘连找不到 `xml` 文件

@ -115,6 +115,19 @@
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>hwmom-common-mom</artifactId>
<version>2.2.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>hwmom-api-mes</artifactId>
<version>2.2.2</version>
<scope>compile</scope>
</dependency>
</dependencies>

@ -114,4 +114,14 @@ public class BaseClassTeamInfoController extends BaseController {
public R<List<BaseClassTeamInfoVo>>selectClassTeamList(BaseClassTeamInfoBo bo, PageQuery pageQuery) {
return R.ok(baseClassTeamInfoService.queryList(bo));
}
/**
*
*/
@GetMapping("getBaseClassTeamInfoList")
public R<List<BaseClassTeamInfoVo>> getBaseClassTeamInfolist(BaseClassTeamInfoBo bo) {
List<BaseClassTeamInfoVo> list = baseClassTeamInfoService.queryList(bo);
return R.ok(list);
}
}

@ -110,7 +110,7 @@ public class BaseMaterialInfoController extends BaseController {
*/
@GetMapping("getBaseMaterialInfoList")
public R<List<BaseMaterialInfoVo>> getBaseMaterialInfolist(BaseMaterialInfoBo bo) {
public R<List<BaseMaterialInfoVo>> getBaseMaterialInfoList(BaseMaterialInfoBo bo) {
List<BaseMaterialInfoVo> list = baseMaterialInfoService.queryList(bo);
return R.ok(list);
}

@ -0,0 +1,117 @@
package org.dromara.mes.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.mes.domain.vo.BaseStructureBomVo;
import org.dromara.mes.domain.bo.BaseStructureBomBo;
import org.dromara.mes.service.IBaseStructureBomService;
/**
* BOM
* 访:/mes/baseStructureBom
*
* @author zangch
* @date 2025-01-20
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/baseStructureBom")
public class BaseStructureBomController extends BaseController {
private final IBaseStructureBomService baseStructureBomService;
/**
* BOM
*/
@SaCheckPermission("mes:baseStructureBom:list")
@GetMapping("/list")
public R<List<BaseStructureBomVo>> list(BaseStructureBomBo bo) {
List<BaseStructureBomVo> list = baseStructureBomService.queryList(bo);
return R.ok(list);
}
/**
* BOM
*/
@SaCheckPermission("mes:baseStructureBom:export")
@Log(title = "结构BOM信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BaseStructureBomBo bo, HttpServletResponse response) {
List<BaseStructureBomVo> list = baseStructureBomService.queryList(bo);
ExcelUtil.exportExcel(list, "结构BOM信息", BaseStructureBomVo.class, response);
}
/**
* BOM
*
* @param structureBomId
*/
@SaCheckPermission("mes:baseStructureBom:query")
@GetMapping("/{structureBomId}")
public R<BaseStructureBomVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long structureBomId) {
return R.ok(baseStructureBomService.queryById(structureBomId));
}
/**
* BOM
*/
@SaCheckPermission("mes:baseStructureBom:add")
@Log(title = "结构BOM信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BaseStructureBomBo bo) {
return toAjax(baseStructureBomService.insertByBo(bo));
}
/**
* BOM
*/
@SaCheckPermission("mes:baseStructureBom:edit")
@Log(title = "结构BOM信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BaseStructureBomBo bo) {
return toAjax(baseStructureBomService.updateByBo(bo));
}
/**
* BOM
*
* @param structureBomIds
*/
@SaCheckPermission("mes:baseStructureBom:remove")
@Log(title = "结构BOM信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{structureBomIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] structureBomIds) {
return toAjax(baseStructureBomService.deleteWithValidByIds(List.of(structureBomIds), true));
}
/**
* BOM
*/
@GetMapping("getBaseStructureBomList")
public R<List<BaseStructureBomVo>> getBaseStructureBomlist(BaseStructureBomBo bo) {
List<BaseStructureBomVo> list = baseStructureBomService.queryList(bo);
return R.ok(list);
}
}

@ -0,0 +1,117 @@
package org.dromara.mes.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.mes.domain.vo.ProdBaseMachineInfoVo;
import org.dromara.mes.domain.bo.ProdBaseMachineInfoBo;
import org.dromara.mes.service.IProdBaseMachineInfoService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
*
* 访:/mes/prodBaseMachineInfo
*
* @author zangch
* @date 2025-01-20
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/prodBaseMachineInfo")
public class ProdBaseMachineInfoController extends BaseController {
private final IProdBaseMachineInfoService prodBaseMachineInfoService;
/**
*
*/
@SaCheckPermission("mes:prodBaseMachineInfo:list")
@GetMapping("/list")
public TableDataInfo<ProdBaseMachineInfoVo> list(ProdBaseMachineInfoBo bo, PageQuery pageQuery) {
return prodBaseMachineInfoService.queryPageList(bo, pageQuery);
}
/**
*
*/
@SaCheckPermission("mes:prodBaseMachineInfo:export")
@Log(title = "机台信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ProdBaseMachineInfoBo bo, HttpServletResponse response) {
List<ProdBaseMachineInfoVo> list = prodBaseMachineInfoService.queryList(bo);
ExcelUtil.exportExcel(list, "机台信息", ProdBaseMachineInfoVo.class, response);
}
/**
*
*
* @param machineId
*/
@SaCheckPermission("mes:prodBaseMachineInfo:query")
@GetMapping("/{machineId}")
public R<ProdBaseMachineInfoVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long machineId) {
return R.ok(prodBaseMachineInfoService.queryById(machineId));
}
/**
*
*/
@SaCheckPermission("mes:prodBaseMachineInfo:add")
@Log(title = "机台信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ProdBaseMachineInfoBo bo) {
return toAjax(prodBaseMachineInfoService.insertByBo(bo));
}
/**
*
*/
@SaCheckPermission("mes:prodBaseMachineInfo:edit")
@Log(title = "机台信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ProdBaseMachineInfoBo bo) {
return toAjax(prodBaseMachineInfoService.updateByBo(bo));
}
/**
*
*
* @param machineIds
*/
@SaCheckPermission("mes:prodBaseMachineInfo:remove")
@Log(title = "机台信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{machineIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] machineIds) {
return toAjax(prodBaseMachineInfoService.deleteWithValidByIds(List.of(machineIds), true));
}
/**
*
*/
@GetMapping("getProdBaseMachineInfoList")
public R<List<ProdBaseMachineInfoVo>> getProdBaseMachineInfolist(ProdBaseMachineInfoBo bo) {
List<ProdBaseMachineInfoVo> list = prodBaseMachineInfoService.queryList(bo);
return R.ok(list);
}
}

@ -95,11 +95,22 @@ public class ProdBaseProcessInfoController extends BaseController {
@SaCheckPermission("mes:baseProcessInfo:edit")
@Log(title = "工序信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
@PutMapping("/edit")
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ProdBaseProcessInfoBo bo) {
return toAjax(prodBaseProcessInfoService.updateByBo(bo));
}
/**
*
*/
@SaCheckPermission("mes:baseProcessInfo:edit")
@Log(title = "工序信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/editUser")
public R<Void> editUser(@Validated(EditGroup.class) @RequestBody ProdBaseProcessInfoBo bo) {
return toAjax(prodBaseProcessInfoService.updateByBoUser(bo));
}
/**
*
*

@ -0,0 +1,117 @@
package org.dromara.mes.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.mes.domain.vo.ProdBaseProcessProdLineVo;
import org.dromara.mes.domain.bo.ProdBaseProcessProdLineBo;
import org.dromara.mes.service.IProdBaseProcessProdLineService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 线
* 访:/mes/prodBaseProcessProdLine
*
* @author LionLi
* @date 2025-01-09
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/prodBaseProcessProdLine")
public class ProdBaseProcessProdLineController extends BaseController {
private final IProdBaseProcessProdLineService prodBaseProcessProdLineService;
/**
* 线
*/
@SaCheckPermission("mes:prodBaseProcessProdLine:list")
@GetMapping("/list")
public TableDataInfo<ProdBaseProcessProdLineVo> list(ProdBaseProcessProdLineBo bo, PageQuery pageQuery) {
return prodBaseProcessProdLineService.queryPageList(bo, pageQuery);
}
/**
* 线
*/
@SaCheckPermission("mes:prodBaseProcessProdLine:export")
@Log(title = "工序关联产线", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ProdBaseProcessProdLineBo bo, HttpServletResponse response) {
List<ProdBaseProcessProdLineVo> list = prodBaseProcessProdLineService.queryList(bo);
ExcelUtil.exportExcel(list, "工序关联产线", ProdBaseProcessProdLineVo.class, response);
}
/**
* 线
*
* @param processId
*/
@SaCheckPermission("mes:prodBaseProcessProdLine:query")
@GetMapping("/{processId}")
public R<ProdBaseProcessProdLineVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long processId) {
return R.ok(prodBaseProcessProdLineService.queryById(processId));
}
/**
* 线
*/
@SaCheckPermission("mes:prodBaseProcessProdLine:add")
@Log(title = "工序关联产线", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ProdBaseProcessProdLineBo bo) {
return toAjax(prodBaseProcessProdLineService.insertByBo(bo));
}
/**
* 线
*/
@SaCheckPermission("mes:prodBaseProcessProdLine:edit")
@Log(title = "工序关联产线", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ProdBaseProcessProdLineBo bo) {
return toAjax(prodBaseProcessProdLineService.updateByBo(bo));
}
/**
* 线
*
* @param processIds
*/
@SaCheckPermission("mes:prodBaseProcessProdLine:remove")
@Log(title = "工序关联产线", businessType = BusinessType.DELETE)
@DeleteMapping("/{processIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] processIds) {
return toAjax(prodBaseProcessProdLineService.deleteWithValidByIds(List.of(processIds), true));
}
/**
* 线
*/
@GetMapping("getProdBaseProcessProdLineList")
public R<List<ProdBaseProcessProdLineVo>> getProdBaseProcessProdLinelist(ProdBaseProcessProdLineBo bo) {
List<ProdBaseProcessProdLineVo> list = prodBaseProcessProdLineService.queryList(bo);
return R.ok(list);
}
}

@ -0,0 +1,117 @@
package org.dromara.mes.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.mes.domain.vo.ProdBaseProcessUserVo;
import org.dromara.mes.domain.bo.ProdBaseProcessUserBo;
import org.dromara.mes.service.IProdBaseProcessUserService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
*
* 访:/mes/prodBaseProcessUser
*
* @author zangch
* @date 2025-01-09
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/prodBaseProcessUser")
public class ProdBaseProcessUserController extends BaseController {
private final IProdBaseProcessUserService prodBaseProcessUserService;
/**
*
*/
@SaCheckPermission("mes:prodBaseProcessUser:list")
@GetMapping("/list")
public TableDataInfo<ProdBaseProcessUserVo> list(ProdBaseProcessUserBo bo, PageQuery pageQuery) {
return prodBaseProcessUserService.queryPageList(bo, pageQuery);
}
/**
*
*/
@SaCheckPermission("mes:prodBaseProcessUser:export")
@Log(title = "工序关联人员", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ProdBaseProcessUserBo bo, HttpServletResponse response) {
List<ProdBaseProcessUserVo> list = prodBaseProcessUserService.queryList(bo);
ExcelUtil.exportExcel(list, "工序关联人员", ProdBaseProcessUserVo.class, response);
}
/**
*
*
* @param processId
*/
@SaCheckPermission("mes:prodBaseProcessUser:query")
@GetMapping("/{processId}")
public R<ProdBaseProcessUserVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long processId) {
return R.ok(prodBaseProcessUserService.queryById(processId));
}
/**
*
*/
@SaCheckPermission("mes:prodBaseProcessUser:add")
@Log(title = "工序关联人员", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ProdBaseProcessUserBo bo) {
return toAjax(prodBaseProcessUserService.insertByBo(bo));
}
/**
*
*/
@SaCheckPermission("mes:prodBaseProcessUser:edit")
@Log(title = "工序关联人员", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ProdBaseProcessUserBo bo) {
return toAjax(prodBaseProcessUserService.updateByBo(bo));
}
/**
*
*
* @param processIds
*/
@SaCheckPermission("mes:prodBaseProcessUser:remove")
@Log(title = "工序关联人员", businessType = BusinessType.DELETE)
@DeleteMapping("/{processIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] processIds) {
return toAjax(prodBaseProcessUserService.deleteWithValidByIds(List.of(processIds), true));
}
/**
*
*/
@GetMapping("getProdBaseProcessUserList")
public R<List<ProdBaseProcessUserVo>> getProdBaseProcessUserlist(ProdBaseProcessUserBo bo) {
List<ProdBaseProcessUserVo> list = prodBaseProcessUserService.queryList(bo);
return R.ok(list);
}
}

@ -107,9 +107,21 @@ public class ProdMaterialBomController extends BaseController {
/**
* BOM
*/
@GetMapping("getProdMaterialBomList")
@GetMapping("/getProdMaterialBomList")
public R<List<ProdMaterialBomVo>> getProdMaterialBomlist(ProdMaterialBomBo bo) {
List<ProdMaterialBomVo> list = prodMaterialBomService.queryList(bo);
return R.ok(list);
}
/**
* BOMBOM
*/
@SaCheckPermission("mes:materialBom:add")
@Log(title = "物料BOM信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/addBatchMaterialBom")
public R<Void> addBatchMaterialBom(@RequestBody List<ProdMaterialBomBo> boList) {
//不是单纯的批量新增是新增BOM对话框参考结构BOM批量新增物料BOM
return toAjax(prodMaterialBomService.insertBatchByBoList(boList));
}
}

@ -6,6 +6,9 @@ import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.mes.domain.ProdBaseRouteProcess;
import org.dromara.mes.domain.vo.MesProductPlanEditVo;
import org.dromara.mes.service.IProdBaseRouteProcessService;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -37,6 +40,8 @@ public class ProdPlanInfoController extends BaseController {
private final IProdPlanInfoService prodPlanInfoService;
private final IProdBaseRouteProcessService prodBaseRouteProcessService;
/**
*
*/
@ -114,4 +119,47 @@ public class ProdPlanInfoController extends BaseController {
List<ProdPlanInfoVo> list = prodPlanInfoService.queryList(bo);
return R.ok(list);
}
/**
*
*
* @return orderCode
*/
@GetMapping(value = "/getDispatchCode")
public R<Void> getDispatchCode() {
return R.ok(prodPlanInfoService.getDispatchCode());
}
/**
*
*
* @param prodBaseRouteProcess
* @return
*/
@GetMapping(value = "/getBaseRouteProcesses")
public R<List<ProdBaseRouteProcess>> getBaseRouteProcesses(ProdBaseRouteProcess prodBaseRouteProcess) {
return R.ok(prodBaseRouteProcessService.selectProdBaseRouteProcessJoinList(prodBaseRouteProcess));
}
/**
* List
*
* @param bo
* @return
*/
@GetMapping("/selectProductPlans")
public R<List<ProdPlanInfoVo>> selectProductPlans(ProdPlanInfoBo bo) {
List<ProdPlanInfoVo> list = prodPlanInfoService.selectProdPlanInfoJoinProcessList(bo);
return R.ok(list);
}
/**
* List
*/
@PostMapping("/orderAddProductPlanList")
@RepeatSubmit(message = "正在提交,请稍后")
public R<Void> orderAddProductPlanList(@RequestBody MesProductPlanEditVo productPlanEditVo) {
return toAjax(prodPlanInfoService.orderAddMesProductPlanList(productPlanEditVo));
}
}

@ -0,0 +1,117 @@
package org.dromara.mes.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.mes.domain.vo.ProdTechnologyInfoVo;
import org.dromara.mes.domain.bo.ProdTechnologyInfoBo;
import org.dromara.mes.service.IProdTechnologyInfoService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
*
* 访:/mes/technologyInfo
*
* @author Yinq
* @date 2025-01-21
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/technologyInfo")
public class ProdTechnologyInfoController extends BaseController {
private final IProdTechnologyInfoService prodTechnologyInfoService;
/**
*
*/
@SaCheckPermission("mes:technologyInfo:list")
@GetMapping("/list")
public TableDataInfo<ProdTechnologyInfoVo> list(ProdTechnologyInfoBo bo, PageQuery pageQuery) {
return prodTechnologyInfoService.queryPageList(bo, pageQuery);
}
/**
*
*/
@SaCheckPermission("mes:technologyInfo:export")
@Log(title = "工序工艺信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ProdTechnologyInfoBo bo, HttpServletResponse response) {
List<ProdTechnologyInfoVo> list = prodTechnologyInfoService.queryList(bo);
ExcelUtil.exportExcel(list, "工序工艺信息", ProdTechnologyInfoVo.class, response);
}
/**
*
*
* @param technologyId
*/
@SaCheckPermission("mes:technologyInfo:query")
@GetMapping("/{technologyId}")
public R<ProdTechnologyInfoVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long technologyId) {
return R.ok(prodTechnologyInfoService.queryById(technologyId));
}
/**
*
*/
@SaCheckPermission("mes:technologyInfo:add")
@Log(title = "工序工艺信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ProdTechnologyInfoBo bo) {
return toAjax(prodTechnologyInfoService.insertByBo(bo));
}
/**
*
*/
@SaCheckPermission("mes:technologyInfo:edit")
@Log(title = "工序工艺信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ProdTechnologyInfoBo bo) {
return toAjax(prodTechnologyInfoService.updateByBo(bo));
}
/**
*
*
* @param technologyIds
*/
@SaCheckPermission("mes:technologyInfo:remove")
@Log(title = "工序工艺信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{technologyIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] technologyIds) {
return toAjax(prodTechnologyInfoService.deleteWithValidByIds(List.of(technologyIds), true));
}
/**
*
*/
@GetMapping("getProdTechnologyInfoList")
public R<List<ProdTechnologyInfoVo>> getProdTechnologyInfolist(ProdTechnologyInfoBo bo) {
List<ProdTechnologyInfoVo> list = prodTechnologyInfoService.queryList(bo);
return R.ok(list);
}
}

@ -0,0 +1,117 @@
package org.dromara.mes.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.mes.domain.vo.ProdTechnologyStepInfoVo;
import org.dromara.mes.domain.bo.ProdTechnologyStepInfoBo;
import org.dromara.mes.service.IProdTechnologyStepInfoService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
*
* 访:/mes/technologyStepInfo
*
* @author Yinq
* @date 2025-01-21
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/technologyStepInfo")
public class ProdTechnologyStepInfoController extends BaseController {
private final IProdTechnologyStepInfoService prodTechnologyStepInfoService;
/**
*
*/
@SaCheckPermission("mes:technologyStepInfo:list")
@GetMapping("/list")
public TableDataInfo<ProdTechnologyStepInfoVo> list(ProdTechnologyStepInfoBo bo, PageQuery pageQuery) {
return prodTechnologyStepInfoService.queryPageList(bo, pageQuery);
}
/**
*
*/
@SaCheckPermission("mes:technologyStepInfo:export")
@Log(title = "工艺步序信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ProdTechnologyStepInfoBo bo, HttpServletResponse response) {
List<ProdTechnologyStepInfoVo> list = prodTechnologyStepInfoService.queryList(bo);
ExcelUtil.exportExcel(list, "工艺步序信息", ProdTechnologyStepInfoVo.class, response);
}
/**
*
*
* @param stepId
*/
@SaCheckPermission("mes:technologyStepInfo:query")
@GetMapping("/{stepId}")
public R<ProdTechnologyStepInfoVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long stepId) {
return R.ok(prodTechnologyStepInfoService.queryById(stepId));
}
/**
*
*/
@SaCheckPermission("mes:technologyStepInfo:add")
@Log(title = "工艺步序信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ProdTechnologyStepInfoBo bo) {
return toAjax(prodTechnologyStepInfoService.insertByBo(bo));
}
/**
*
*/
@SaCheckPermission("mes:technologyStepInfo:edit")
@Log(title = "工艺步序信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ProdTechnologyStepInfoBo bo) {
return toAjax(prodTechnologyStepInfoService.updateByBo(bo));
}
/**
*
*
* @param stepIds
*/
@SaCheckPermission("mes:technologyStepInfo:remove")
@Log(title = "工艺步序信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{stepIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] stepIds) {
return toAjax(prodTechnologyStepInfoService.deleteWithValidByIds(List.of(stepIds), true));
}
/**
*
*/
@GetMapping("getProdTechnologyStepInfoList")
public R<List<ProdTechnologyStepInfoVo>> getProdTechnologyStepInfolist(ProdTechnologyStepInfoBo bo) {
List<ProdTechnologyStepInfoVo> list = prodTechnologyStepInfoService.queryList(bo);
return R.ok(list);
}
}

@ -72,18 +72,24 @@ public class BaseClassTeamInfo extends TenantEntity {
* BaseShiftInfo
*/
@TableField(exist = false)
private String shiftName;
private String shiftName;//映射字段
/**
* ProdBaseStationInfo
*/
@TableField(exist = false)
private String stationName;
private String stationName;//映射字段
/**
* ProdBaseProcessInfo
*/
@TableField(exist = false)
private String processName;
private String processName;//映射字段
/**
*
*/
@TableField(exist = false)
private String teamHeadName;//映射字段
}

@ -270,4 +270,11 @@ public class BaseMaterialInfo extends TenantEntity {
*/
@TableField(exist = false)
private String factoryName; //映射字段
/**
*
*/
@TableField(exist = false)
private String matrialTypeName;//映射字段
}

@ -0,0 +1,81 @@
package org.dromara.mes.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* BOM base_structure_bom
*
* @author zangch
* @date 2025-01-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("base_structure_bom")
public class BaseStructureBom extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "structure_bom_id", type = IdType.AUTO)
private Long structureBomId;
/**
*
*/
private Long parentId;
/**
* ID
*/
private String materialTypeId;
/**
*
*/
private String materialTypeName;
/**
* BOM
*/
private String structureBomDesc;
/**
* BOM
*/
private String structureBomVersion;
/**
*
*/
private String ancestors;
/**
*
*/
private Long level;
/**
* (1 0)
*/
private Long topFlag;
/**
* 1 0
*/
private String activeFlag;
/**
*
*/
private String remark;
}

@ -0,0 +1,76 @@
package org.dromara.mes.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* prod_base_machine_info
*
* @author zangch
* @date 2025-01-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("prod_base_machine_info")
public class ProdBaseMachineInfo extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "machine_id", type = IdType.AUTO)
private Long machineId;
/**
*
*/
private String machineCode;
/**
*
*/
private String machineName;
/**
*
*/
private String assetNumber;
/**
*
*/
private String machineLocation;
/**
*
*/
private String machineType;
/**
*
*/
private String machineSpec;
/**
*
*/
private String supplierId;
/**
* (0 1 2)
*/
private String machineStatus;
/**
*
*/
private String remark;
}

@ -6,6 +6,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.util.List;
/**
* prod_base_process_info
@ -62,5 +63,18 @@ public class ProdBaseProcessInfo extends TenantEntity {
*/
private String remark;
/**
* 线
*/
@TableField(exist = false)
private List<ProdBaseProcessProdLine> prodBaseProcessProdlineList;//工序关联产线信息,映射字段
/** 工序关联人员信息 */
@TableField(exist = false)
private List<ProdBaseProcessUser> prodBaseProcessUserList;//工序关联人员信息,映射字段
@TableField(exist = false)
private String processPercentage;//映射字段
}

@ -0,0 +1,69 @@
package org.dromara.mes.domain;
import com.fasterxml.jackson.annotation.JsonInclude;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 线 prod_base_process_prod_line
*
* @author LionLi
* @date 2025-01-09
*/
@Data
@EqualsAndHashCode()
@TableName("prod_base_process_prod_line")
public class ProdBaseProcessProdLine {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
private Long processId;
/**
* 线ID
*/
private Long prodLineId;
/*删除继承BaseEntity*/
/**
*
*/
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@TableField(exist = false)
private Map<String, Object> params = new HashMap<>();
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private Long createDept;
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
*
*/
private String tenantId;
}

@ -0,0 +1,73 @@
package org.dromara.mes.domain;
import com.fasterxml.jackson.annotation.JsonInclude;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* prod_base_process_user
*
* @author zangch
* @date 2025-01-09
*/
@Data
@EqualsAndHashCode()
@TableName("prod_base_process_user")
public class ProdBaseProcessUser {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
private Long processId;
/**
* ID
*/
private Long userId;
/**
*
*/
private String userName;
/*删除继承BaseEntity*/
/**
*
*/
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@TableField(exist = false)
private Map<String, Object> params = new HashMap<>();
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private Long createDept;
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
*
*/
private String tenantId;
}

@ -48,4 +48,18 @@ public class ProdBaseRouteProcess extends BaseEntity {
private String remark;
/**
*
*/
@TableField(exist = false)
private String processName;//映射字段
/**
* 1 2
*/
@TableField(exist = false)
private String processType;//映射字段
}

@ -72,8 +72,14 @@ public class ProdBaseStationInfo extends TenantEntity {
*/
private String remark;
/**
* ID
*/
private Long machineId;
@TableField(exist = false)
private String processName;//字段映射
@TableField(exist = false)
private String machineName;//字段映射
}

@ -165,4 +165,27 @@ public class ProdOrderInfo extends TenantEntity {
private String remark;
/**
*
*/
@TableField(exist = false)
private String materialCode;//映射字段
/**
*
*/
@TableField(exist = false)
private String materialName;//映射字段
/**
*
*/
@TableField(exist = false)
private String dispatchName;//映射字段
/**
* 线
*/
@TableField(exist = false)
private String routeName;//映射字段
}

@ -179,5 +179,26 @@ public class ProdPlanInfo extends TenantEntity {
*/
private String remark;
/**
* 1 2
*/
@TableField(exist = false)
private String processType;//映射字段
/**
*
*/
@TableField(exist = false)
private String processName;//映射字段
/**
* ()
*/
@TableField(exist = false)
private Long processProductionTime;//映射字段
@TableField(exist = false)
private String releaseName;//映射字段
}

@ -0,0 +1,75 @@
package org.dromara.mes.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* prod_technology_info
*
* @author Yinq
* @date 2025-01-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("prod_technology_info")
public class ProdTechnologyInfo extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "technology_id", type = IdType.AUTO)
private Long technologyId;
/**
* ID
*/
private Long processId;
/**
* ID
*/
private Long materialId;
/**
* 1 2
*/
private String machineType;
/**
* 1 2
*/
private String technologyType;
/**
*
*/
private String technologyVersion;
/**
*
*/
private Long standardTime;
/**
* 1 0
*/
private String activeFlag;
/**
*
*/
private String remark;
@TableField(exist = false)
private String processName;
@TableField(exist = false)
private String materialName;
}

@ -0,0 +1,71 @@
package org.dromara.mes.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* prod_technology_step_info
*
* @author Yinq
* @date 2025-01-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("prod_technology_step_info")
public class ProdTechnologyStepInfo extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "step_id", type = IdType.AUTO)
private Long stepId;
/**
* ID
*/
private Long technologyId;
/**
*
*/
private Long stepCode;
/**
*
*/
private String stepName;
/**
*
*/
private Long stepTime;
/**
*
*/
private String stepParameter;
/**
*
*/
private String valueState;
/**
* 1 0
*/
private String activeFlag;
/**
*
*/
private String remark;
}

@ -30,7 +30,7 @@ public class BaseMaterialInfoBo extends BaseEntity {
/**
* ERP
*/
@NotBlank(message = "ERP信息不能为空", groups = { AddGroup.class, EditGroup.class })
/* @NotBlank(message = "ERP信息不能为空", groups = { AddGroup.class, EditGroup.class })*/
private String erpId;
/**

@ -0,0 +1,80 @@
package org.dromara.mes.domain.bo;
import org.dromara.mes.domain.BaseStructureBom;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* BOM base_structure_bom
*
* @author zangch
* @date 2025-01-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = BaseStructureBom.class, reverseConvertGenerate = false)
public class BaseStructureBomBo extends BaseEntity {
/**
*
*/
private Long structureBomId;
/**
*
*/
private Long parentId;
/**
* ID
*/
@NotBlank(message = "物料类型ID不能为空", groups = { AddGroup.class, EditGroup.class })
private String materialTypeId;
/**
*
*/
private String materialTypeName;
/**
* BOM
*/
private String structureBomDesc;
/**
* BOM
*/
private String structureBomVersion;
/**
*
*/
private String ancestors;
/**
*
*/
private Long level;
/**
* (1 0)
*/
private Long topFlag;
/**
* 1 0
*/
private String activeFlag;
/**
*
*/
private String remark;
}

@ -0,0 +1,80 @@
package org.dromara.mes.domain.bo;
import org.dromara.mes.domain.ProdBaseMachineInfo;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* prod_base_machine_info
*
* @author zangch
* @date 2025-01-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ProdBaseMachineInfo.class, reverseConvertGenerate = false)
public class ProdBaseMachineInfoBo extends BaseEntity {
/**
*
*/
private Long machineId;
/**
*
*/
@NotBlank(message = "机台编号不能为空", groups = { AddGroup.class, EditGroup.class })
private String machineCode;
/**
*
*/
@NotBlank(message = "机台名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String machineName;
/**
*
*/
private String assetNumber;
/**
*
*/
private String machineLocation;
/**
*
*/
private String machineType;
/**
*
*/
private String machineSpec;
/**
*
*/
private String supplierId;
/**
* (0 1 2)
*/
private String machineStatus;
/**
*
*/
private String remark;
/**
*
*/
private Long processId;
}

@ -1,5 +1,6 @@
package org.dromara.mes.domain.bo;
import com.baomidou.mybatisplus.annotation.TableField;
import org.dromara.mes.domain.ProdBaseProcessInfo;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
@ -8,6 +9,10 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.mes.domain.ProdBaseProcessProdLine;
import org.dromara.mes.domain.ProdBaseProcessUser;
import java.util.List;
/**
* prod_base_process_info
@ -65,4 +70,14 @@ public class ProdBaseProcessInfoBo extends BaseEntity {
private String remark;
/**
* 线
*/
private List<ProdBaseProcessProdLineBo> prodBaseProcessProdlineBoList;//工序关联产线信息,映射字段
/** 工序关联人员信息 */
private List<ProdBaseProcessUserBo> prodBaseProcessUserBoList;//工序关联人员信息,映射字段
private String processPercentageBo;//映射字段
}

@ -0,0 +1,83 @@
package org.dromara.mes.domain.bo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import org.dromara.mes.domain.ProdBaseProcessProdLine;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 线 prod_base_process_prod_line
*
* @author LionLi
* @date 2025-01-09
*/
@Data
@EqualsAndHashCode()
@AutoMapper(target = ProdBaseProcessProdLine.class, reverseConvertGenerate = false)
public class ProdBaseProcessProdLineBo {
/**
* ID
*/
@NotNull(message = "工序ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long processId;
/**
* 线ID
*/
@NotNull(message = "所属产线ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long prodLineId;
/**
*
*/
@JsonIgnore
@TableField(exist = false)
private String searchValue;
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private Long createDept;
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
*
*/
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@TableField(exist = false)
private Map<String, Object> params = new HashMap<>();
/**
*
*/
@TableField(exist = false)
private String tenantId;
}

@ -0,0 +1,81 @@
package org.dromara.mes.domain.bo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import org.dromara.mes.domain.ProdBaseProcessUser;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* prod_base_process_user
*
* @author zangch
* @date 2025-01-09
*/
@Data
@EqualsAndHashCode()
@AutoMapper(target = ProdBaseProcessUser.class, reverseConvertGenerate = false)
public class ProdBaseProcessUserBo {
/**
* ID
*/
@NotNull(message = "工序ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long processId;
/**
* ID
*/
@NotNull(message = "用户ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long userId;
/**
*
*/
private String userName;
/**
*
*/
@JsonIgnore
@TableField(exist = false)
private String searchValue;
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private Long createDept;
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
*
*/
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@TableField(exist = false)
private Map<String, Object> params = new HashMap<>();
}

@ -74,5 +74,5 @@ public class ProdBaseStationInfoBo extends BaseEntity {
*/
private String remark;
private Long machineId;
}

@ -32,7 +32,6 @@ public class ProdOrderInfoBo extends BaseEntity {
/**
*
*/
@NotBlank(message = "订单编号不能为空", groups = {AddGroup.class, EditGroup.class})
private String orderCode;
/**

@ -45,7 +45,7 @@ public class ProdPlanInfoBo extends BaseEntity {
/**
*
*/
@NotBlank(message = "工单编号不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "工单编号不能为空", groups = { AddGroup.class, EditGroup.class })
private String planCode;
/**
@ -56,13 +56,13 @@ public class ProdPlanInfoBo extends BaseEntity {
/**
* ID;ID
*/
@NotNull(message = "物料ID;成品ID不能为空", groups = { AddGroup.class, EditGroup.class })
@NotNull(message = "物料不能为空", groups = { AddGroup.class, EditGroup.class })
private Long materialId;
/**
* BOM_ID
*/
@NotNull(message = "物料BOM_ID不能为空", groups = { AddGroup.class, EditGroup.class })
@NotNull(message = "物料BOM不能为空", groups = { AddGroup.class, EditGroup.class })
private Long materialBomId;
/**
@ -109,7 +109,7 @@ public class ProdPlanInfoBo extends BaseEntity {
/**
*
*/
@NotNull(message = "派工数量不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotNull(message = "派工数量不能为空", groups = { AddGroup.class, EditGroup.class })
private Long dispatchAmount;
/**
@ -182,5 +182,7 @@ public class ProdPlanInfoBo extends BaseEntity {
*/
private String remark;
private Long workshopId;
}

@ -0,0 +1,75 @@
package org.dromara.mes.domain.bo;
import org.dromara.mes.domain.ProdTechnologyInfo;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.mes.domain.ProdTechnologyStepInfo;
import java.util.List;
/**
* prod_technology_info
*
* @author Yinq
* @date 2025-01-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ProdTechnologyInfo.class, reverseConvertGenerate = false)
public class ProdTechnologyInfoBo extends BaseEntity {
/**
*
*/
private Long technologyId;
/**
* ID
*/
@NotNull(message = "工序ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long processId;
/**
* ID
*/
@NotNull(message = "物料ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long materialId;
/**
* 1 2
*/
private String machineType;
/**
* 1 2
*/
private String technologyType;
/**
*
*/
private String technologyVersion;
/**
*
*/
private Long standardTime;
/**
* 1 0
*/
private String activeFlag;
/**
*
*/
private String remark;
private List<ProdTechnologyStepInfo> prodTechnologyStepInfoList;
}

@ -0,0 +1,72 @@
package org.dromara.mes.domain.bo;
import org.dromara.mes.domain.ProdTechnologyStepInfo;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* prod_technology_step_info
*
* @author Yinq
* @date 2025-01-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ProdTechnologyStepInfo.class, reverseConvertGenerate = false)
public class ProdTechnologyStepInfoBo extends BaseEntity {
/**
*
*/
private Long stepId;
/**
* ID
*/
@NotNull(message = "工艺ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long technologyId;
/**
*
*/
@NotNull(message = "步序编号不能为空", groups = { AddGroup.class, EditGroup.class })
private Long stepCode;
/**
*
*/
@NotBlank(message = "步序名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String stepName;
/**
*
*/
private Long stepTime;
/**
*
*/
private String stepParameter;
/**
*
*/
private String valueState;
/**
* 1 0
*/
private String activeFlag;
/**
*
*/
private String remark;
}

@ -116,23 +116,29 @@ public class BaseClassTeamInfoVo implements Serializable {
*
*/
@ExcelProperty(value = "更新时间")
private Date updateTime;
private Date updateTime;//映射字段
/**
*
*/
@ExcelProperty(value = "班次名称")
private String shiftName;
private String shiftName;//映射字段
/**
*
*/
@ExcelProperty(value = "工位名称")
private String stationName;
private String stationName;//映射字段
/**
*
*/
@ExcelProperty(value = "工序名称")
private String processName;
private String processName;//映射字段
/**
*
*/
@ExcelProperty(value = "班组负责人名称")
private String teamHeadName;//映射字段
}

@ -373,6 +373,12 @@ public class BaseMaterialInfoVo implements Serializable {
*
*/
@ExcelProperty(value = "所属工厂")
private String factoryName;
private String factoryName;//映射字段
/**
*
*/
@ExcelProperty(value = "物料类型名称")
private String matrialTypeName;//映射字段
}

@ -131,7 +131,7 @@ public class BaseMaterialTypeVo implements Serializable {
*
*/
@ExcelProperty(value = "工序名称")
private String processName;
private String processName;//工序名称
}

@ -0,0 +1,136 @@
package org.dromara.mes.domain.vo;
import org.dromara.mes.domain.BaseStructureBom;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* BOM base_structure_bom
*
* @author zangch
* @date 2025-01-20
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = BaseStructureBom.class)
public class BaseStructureBomVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "主键标识")
private Long structureBomId;
/**
*
*/
@ExcelProperty(value = "租户编号")
private String tenantId;
/**
*
*/
@ExcelProperty(value = "父级标识")
private Long parentId;
/**
* ID
*/
@ExcelProperty(value = "物料类型ID")
private String materialTypeId;
/**
*
*/
@ExcelProperty(value = "物料类型名称")
private String materialTypeName;
/**
* BOM
*/
@ExcelProperty(value = "结构BOM说明")
private String structureBomDesc;
/**
* BOM
*/
@ExcelProperty(value = "结构BOM版本")
private String structureBomVersion;
/**
*
*/
@ExcelProperty(value = "祖级列表")
private String ancestors;
/**
*
*/
@ExcelProperty(value = "层级")
private Long level;
/**
* (1 0)
*/
@ExcelProperty(value = "顶级标识(1是 0否)", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "top_flag")
private Long topFlag;
/**
* 1 0
*/
@ExcelProperty(value = "激活标识", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "active_flag")
private String activeFlag;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
/**
*
*/
@ExcelProperty(value = "创建部门")
private Long createDept;
/**
*
*/
@ExcelProperty(value = "创建人")
private Long createBy;
/**
*
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
*
*/
@ExcelProperty(value = "更新人")
private Long updateBy;
/**
*
*/
@ExcelProperty(value = "更新时间")
private Date updateTime;
}

@ -0,0 +1,25 @@
package org.dromara.mes.domain.vo;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import org.dromara.mes.domain.ProdPlanInfo;
import org.dromara.mes.domain.bo.ProdPlanInfoBo;
import java.util.List;
@Data
public class MesProductPlanEditVo {
//生产工单ID
@NotBlank(message = "生产工单Id必须输入")
private Long productOrderId;
//此次生产派工数量
private Long dispatchAmount;
//保存的生产计划
@NotBlank(message = "没有修改的生产派工提交")
private List<ProdPlanInfoBo> mesProductPlanList;
//待删除的生产计划ID
private Long[] toDeletedPlanIds;
}

@ -0,0 +1,129 @@
package org.dromara.mes.domain.vo;
import org.dromara.mes.domain.ProdBaseMachineInfo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* prod_base_machine_info
*
* @author zangch
* @date 2025-01-20
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ProdBaseMachineInfo.class)
public class ProdBaseMachineInfoVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "主键标识")
private Long machineId;
/**
*
*/
@ExcelProperty(value = "租户编号")
private String tenantId;
/**
*
*/
@ExcelProperty(value = "机台编号")
private String machineCode;
/**
*
*/
@ExcelProperty(value = "机台名称")
private String machineName;
/**
*
*/
@ExcelProperty(value = "资产编号")
private String assetNumber;
/**
*
*/
@ExcelProperty(value = "机台位置")
private String machineLocation;
/**
*
*/
@ExcelProperty(value = "机台类型")
private String machineType;
/**
*
*/
@ExcelProperty(value = "机台规格")
private String machineSpec;
/**
*
*/
@ExcelProperty(value = "供应商")
private String supplierId;
/**
* (0 1 2)
*/
@ExcelProperty(value = "机台状态(0停用 1启用 2报废)", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "machine_status")
private String machineStatus;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
/**
*
*/
@ExcelProperty(value = "创建部门")
private Long createDept;
/**
*
*/
@ExcelProperty(value = "创建人")
private Long createBy;
/**
*
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
*
*/
@ExcelProperty(value = "更新人")
private Long updateBy;
/**
*
*/
@ExcelProperty(value = "更新时间")
private Date updateTime;
}

@ -1,5 +1,7 @@
package org.dromara.mes.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.baomidou.mybatisplus.annotation.TableField;
import org.dromara.mes.domain.ProdBaseProcessInfo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@ -7,11 +9,13 @@ import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.mes.domain.ProdBaseProcessProdLine;
import org.dromara.mes.domain.ProdBaseProcessUser;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
@ -115,5 +119,17 @@ public class ProdBaseProcessInfoVo implements Serializable {
@ExcelProperty(value = "更新时间")
private Date updateTime;
/**
* 线
*/
@ExcelIgnore
private List<ProdBaseProcessProdLineVo> prodBaseProcessProdlineVoList;//工序关联产线信息,映射字段
/** 工序关联人员信息 */
@ExcelIgnore
private List<ProdBaseProcessUserVo> prodBaseProcessUserVoList;//工序关联人员信息,映射字段
@ExcelIgnore
private String processPercentageVo;//映射字段
}

@ -0,0 +1,62 @@
package org.dromara.mes.domain.vo;
import org.dromara.mes.domain.ProdBaseProcessProdLine;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 线 prod_base_process_prod_line
*
* @author LionLi
* @date 2025-01-09
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ProdBaseProcessProdLine.class)
public class ProdBaseProcessProdLineVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "工序ID")
private Long processId;
/**
* 线ID
*/
@ExcelProperty(value = "所属产线ID")
private Long prodLineId;
/**
*
*/
@ExcelProperty(value = "租户编号")
private String tenantId;
/**
*
*/
@ExcelProperty(value = "创建人")
private String createBy;
/**
*
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
}

@ -0,0 +1,68 @@
package org.dromara.mes.domain.vo;
import org.dromara.mes.domain.ProdBaseProcessUser;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* prod_base_process_user
*
* @author zangch
* @date 2025-01-09
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ProdBaseProcessUser.class)
public class ProdBaseProcessUserVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "工序ID")
private Long processId;
/**
* ID
*/
@ExcelProperty(value = "用户ID")
private Long userId;
/**
*
*/
@ExcelProperty(value = "租户编号")
private String tenantId;
/**
*
*/
@ExcelProperty(value = "用户名称")
private String userName;
/**
*
*/
@ExcelProperty(value = "创建人")
private String createBy;
/**
*
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
}

@ -59,4 +59,19 @@ public class ProdBaseRouteProcessVo implements Serializable {
private String remark;
/**
*
*/
@ExcelProperty(value = "工序名称")
private String processName;
/**
* 1 2
*/
@ExcelProperty(value = "工序类别", converter = ExcelDictConvert.class)
private String processType;
}

@ -1,5 +1,6 @@
package org.dromara.mes.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnore;
import org.dromara.mes.domain.ProdBaseRoute;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@ -95,6 +96,10 @@ public class ProdBaseRouteVo implements Serializable {
@ExcelProperty(value = "更新时间")
private Date updateTime;
/**
* 线
*/
@ExcelIgnore
private List<ProdBaseRouteProcessVo> routeProcessVoList;

@ -131,5 +131,11 @@ public class ProdBaseStationInfoVo implements Serializable {
@ExcelProperty(value = "更新时间")
private Date updateTime;
private Long machineId;
/**
*
*/
@ExcelProperty(value = "机台名称")
private String machineName;
}

@ -36,6 +36,13 @@ public class ProdOrderInfoVo implements Serializable {
@ExcelProperty(value = "主键标识")
private Long productOrderId;
/**
*
*/
@ExcelProperty(value = "租户编号")
private String tenantId;
/**
*
*/
@ -205,5 +212,55 @@ public class ProdOrderInfoVo implements Serializable {
@ExcelProperty(value = "备注")
private String remark;
/**
*
*/
@ExcelProperty(value = "创建部门")
private Long createDept;
/**
*
*/
@ExcelProperty(value = "创建人")
private Long createBy;
/**
*
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
*
*/
@ExcelProperty(value = "更新人")
private Long updateBy;
/**
*
*/
@ExcelProperty(value = "更新时间")
private Date updateTime;
/**
*
*/
@ExcelProperty(value = "物料名称")
private String materialName;//映射字段
/**
*
*/
@ExcelProperty(value = "物料编码")
private String materialCode;//映射字段
/**
* 线
*/
@ExcelProperty(value = "工艺路线名称")
private String dispatchName;//映射字段
}

@ -1,6 +1,8 @@
package org.dromara.mes.domain.vo;
import java.util.Date;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.mes.domain.ProdPlanInfo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
@ -222,5 +224,21 @@ public class ProdPlanInfoVo implements Serializable {
@ExcelProperty(value = "备注")
private String remark;
private String materialCode;
private String materialName;
private String processName;
private String shiftName;
private String teamName;
private String materialBomName;
private String releaseName;
/**
* 1 2
*/
@ExcelIgnore
private String processType;
@ExcelIgnore
private Long processProductionTime;
}

@ -0,0 +1,96 @@
package org.dromara.mes.domain.vo;
import org.dromara.mes.domain.ProdTechnologyInfo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.mes.domain.ProdTechnologyStepInfo;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* prod_technology_info
*
* @author Yinq
* @date 2025-01-21
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ProdTechnologyInfo.class)
public class ProdTechnologyInfoVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "主键标识")
private Long technologyId;
/**
* ID
*/
@ExcelProperty(value = "工序ID")
private Long processId;
/**
* ID
*/
@ExcelProperty(value = "物料ID")
private Long materialId;
/**
* 1 2
*/
@ExcelProperty(value = "机台类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "mes_machine_type")
private String machineType;
/**
* 1 2
*/
@ExcelProperty(value = "工艺类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "mes_technology_type")
private String technologyType;
/**
*
*/
@ExcelProperty(value = "工艺版本")
private String technologyVersion;
/**
*
*/
@ExcelProperty(value = "硫化标准时间", converter = ExcelDictConvert.class)
private Long standardTime;
/**
* 1 0
*/
@ExcelProperty(value = "激活标识", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "active_flag")
private String activeFlag;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
@ExcelProperty(value = "工序名称")
private String processName;
@ExcelProperty(value = "物料名称")
private String materialName;
private List<ProdTechnologyStepInfo> prodTechnologyStepInfoList;
}

@ -0,0 +1,87 @@
package org.dromara.mes.domain.vo;
import org.dromara.mes.domain.ProdTechnologyStepInfo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* prod_technology_step_info
*
* @author Yinq
* @date 2025-01-21
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ProdTechnologyStepInfo.class)
public class ProdTechnologyStepInfoVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "主键标识")
private Long stepId;
/**
* ID
*/
@ExcelProperty(value = "工艺ID")
private Long technologyId;
/**
*
*/
@ExcelProperty(value = "步序编号")
private Long stepCode;
/**
*
*/
@ExcelProperty(value = "步序名称")
private String stepName;
/**
*
*/
@ExcelProperty(value = "步序时间", converter = ExcelDictConvert.class)
private Long stepTime;
/**
*
*/
@ExcelProperty(value = "步序参数")
private String stepParameter;
/**
*
*/
@ExcelProperty(value = "阀门状态")
private String valueState;
/**
* 1 0
*/
@ExcelProperty(value = "激活标识", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "active_flag")
private String activeFlag;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
}

@ -0,0 +1,49 @@
package org.dromara.mes.dubbo;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.mes.api.RemoteMaterialInfoService;
import org.dromara.mes.api.model.bo.BaseMaterialInfoBo;
import org.dromara.mes.domain.BaseMaterialInfo;
import org.dromara.mes.mapper.BaseMaterialInfoMapper;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
*
*
* @author Yinq
*/
@RequiredArgsConstructor
@Service
@DubboService
public class RemoteMaterialInfoServiceImpl implements RemoteMaterialInfoService {
private final BaseMaterialInfoMapper materialInfoMapper;
/**
*
* @param bos
* @return truefalse
*/
@Override
public Boolean remoteInsertBaseMaterialInfo(List<BaseMaterialInfoBo> bos) {
List<BaseMaterialInfo> list = new ArrayList<>();
for (BaseMaterialInfoBo bo : bos) {
//校验物料是否已存在,若存在则更新数据
BaseMaterialInfo add = MapstructUtils.convert(bo, BaseMaterialInfo.class);
list.add(add);
}
if (list.size() == 0){
return false;
}
return materialInfoMapper.insertBatch(list);
}
}

@ -0,0 +1,15 @@
package org.dromara.mes.mapper;
import org.dromara.mes.domain.BaseStructureBom;
import org.dromara.mes.domain.vo.BaseStructureBomVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* BOMMapper
*
* @author zangch
* @date 2025-01-20
*/
public interface BaseStructureBomMapper extends BaseMapperPlus<BaseStructureBom, BaseStructureBomVo> {
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save