@@ -0,0 +1,68 @@ | |||
package com.ningdatech.pmapi.common.util; | |||
import org.apache.commons.codec.binary.Hex; | |||
import javax.crypto.Mac; | |||
import javax.crypto.SecretKey; | |||
import javax.crypto.spec.SecretKeySpec; | |||
import java.nio.charset.Charset; | |||
import java.nio.charset.StandardCharsets; | |||
import java.security.MessageDigest; | |||
import java.security.NoSuchAlgorithmException; | |||
/** | |||
* 加密工具 | |||
* @author hank | |||
*/ | |||
public class CryptUtils { | |||
/** | |||
* 默认的算法 | |||
*/ | |||
private static final String DE_KEY_MAC = "HmacMD5"; | |||
/** | |||
* 默认的字符集 | |||
*/ | |||
private static final Charset DE_CHARSET = StandardCharsets.UTF_8; | |||
/** | |||
* 使用默认的算法(HmacMD5) 得到hmac 16进制字符串 | |||
* @param inputStr 需要加密的串 | |||
* @param key key | |||
* @return 16进制字符串 | |||
* @throws Exception | |||
*/ | |||
public static String encryptHMAC(String inputStr, String key) throws Exception { | |||
return encryptHMAC(inputStr, key, DE_KEY_MAC); | |||
} | |||
/** | |||
* 使用指定的算法得到hmac 16进制字符串 | |||
* @param inputStr 需要加密的串 | |||
* @param key key | |||
* @param keyMac hmac算法 | |||
* @return 16进制字符串 | |||
* @throws Exception | |||
*/ | |||
public static String encryptHMAC(String inputStr, String key, String keyMac) throws Exception { | |||
return Hex.encodeHexString(encryptHMAC(inputStr.getBytes(DE_CHARSET), key, keyMac)); | |||
} | |||
public static String MD5Encode(String origin) throws NoSuchAlgorithmException { | |||
MessageDigest md = MessageDigest.getInstance("MD5"); | |||
return Hex.encodeHexString(md.digest(origin.getBytes(DE_CHARSET))); | |||
} | |||
private static byte[] encryptHMAC(byte[] data, String key, String keyMac) throws Exception { | |||
SecretKey secretKey = new SecretKeySpec(key.getBytes(DE_CHARSET), keyMac); | |||
Mac mac = Mac.getInstance(secretKey.getAlgorithm()); | |||
mac.init(secretKey); | |||
return mac.doFinal(data); | |||
} | |||
public static void main(String[] args) throws Exception{ | |||
System.out.println("HMACStr:\n" + encryptHMAC("a", "hank")); | |||
} | |||
} |
@@ -0,0 +1,82 @@ | |||
package com.ningdatech.pmapi.common.util; | |||
import javafx.util.Pair; | |||
import javax.crypto.Mac; | |||
import javax.crypto.spec.SecretKeySpec; | |||
import javax.xml.bind.DatatypeConverter; | |||
import java.io.UnsupportedEncodingException; | |||
import java.net.URI; | |||
import java.net.URLEncoder; | |||
import java.text.DateFormat; | |||
import java.text.SimpleDateFormat; | |||
import java.util.*; | |||
import java.util.stream.Collectors; | |||
public class HmacAuthUtil { | |||
/** | |||
* 构造http请求 header | |||
* | |||
* @param url 请求url,全路径格式,比如:https://bcdsg.zj.gov.cn/api/p/v1/user.get | |||
* @param requestMethod 请求方法,大写格式,如:GET, POST | |||
* @param accessKey 应用的 AK | |||
* @param secretKey 应用的 SK | |||
* @return | |||
*/ | |||
public static Map<String, String> generateHeader(String url, String requestMethod, String accessKey, String secretKey) { | |||
Map<String, String> header = new HashMap<>(); | |||
try { | |||
DateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US); | |||
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); | |||
String date = dateFormat.format(new Date()); | |||
URI uri = URI.create(url); | |||
String canonicalQueryString = getCanonicalQueryString(uri.getQuery()); | |||
String message = requestMethod.toUpperCase() + "\n" + uri.getPath() + "\n" + canonicalQueryString + "\n" + accessKey + "\n" + date + "\n"; | |||
Mac mac = Mac.getInstance("HmacSHA256"); | |||
mac.init(new SecretKeySpec(secretKey.getBytes(), "HmacSHA256")); | |||
byte[] hash = mac.doFinal(message.getBytes()); | |||
// to lowercase hexits | |||
DatatypeConverter.printHexBinary(hash); | |||
// to base64 | |||
String sign = DatatypeConverter.printBase64Binary(hash); | |||
header.put("X-BG-HMAC-SIGNATURE", sign); | |||
header.put("X-BG-HMAC-ALGORITHM", "hmac-sha256"); | |||
header.put("X-BG-HMAC-ACCESS-KEY", accessKey); | |||
header.put("X-BG-DATE-TIME", date); | |||
System.out.println(date); | |||
} catch (Exception e) { | |||
throw new RuntimeException("generate jc brain header error", e); | |||
} | |||
return header; | |||
} | |||
private static String getCanonicalQueryString(String query) { | |||
if (query == null || query.trim().length() == 0) { | |||
return ""; | |||
} | |||
List<Pair<String, String>> queryParamList = new ArrayList<>(); | |||
String[] params = query.split("&"); | |||
for (String param : params) { | |||
String[] keyValue = param.split("="); | |||
Pair<String, String> pair = new Pair<String, String>(keyValue[0], keyValue.length > 1 ? keyValue[1] : ""); | |||
queryParamList.add(pair); | |||
} | |||
List<Pair<String, String>> sortedParamList = queryParamList.stream().sorted(Comparator.comparing(param -> param.getKey() + "=" + Optional.ofNullable(param.getValue()).orElse(""))).collect(Collectors.toList()); | |||
List<Pair<String, String>> encodeParamList = new ArrayList<>(); | |||
sortedParamList.stream().forEach(param -> { | |||
try { | |||
String key = URLEncoder.encode(param.getKey(), "utf-8"); | |||
String value = URLEncoder.encode(Optional.ofNullable(param.getValue()).orElse(""), "utf-8"); | |||
encodeParamList.add(new Pair<>(key, value)); | |||
} catch (UnsupportedEncodingException e) { | |||
throw new RuntimeException("encoding error"); | |||
} | |||
}); | |||
StringBuilder queryParamString = new StringBuilder(64); | |||
for (Pair<String, String> encodeParam : encodeParamList) { | |||
queryParamString.append(encodeParam.getKey()).append("=").append(Optional.ofNullable(encodeParam.getValue()).orElse("")); | |||
queryParamString.append("&"); | |||
} | |||
return queryParamString.substring(0, queryParamString.length() - 1); | |||
} | |||
} |
@@ -0,0 +1,217 @@ | |||
package com.ningdatech.pmapi.common.util; | |||
import org.apache.http.HttpEntity; | |||
import org.apache.http.NameValuePair; | |||
import org.apache.http.client.config.RequestConfig; | |||
import org.apache.http.client.entity.UrlEncodedFormEntity; | |||
import org.apache.http.client.methods.CloseableHttpResponse; | |||
import org.apache.http.client.methods.HttpGet; | |||
import org.apache.http.client.methods.HttpPost; | |||
import org.apache.http.conn.ssl.DefaultHostnameVerifier; | |||
import org.apache.http.conn.util.PublicSuffixMatcher; | |||
import org.apache.http.conn.util.PublicSuffixMatcherLoader; | |||
import org.apache.http.entity.StringEntity; | |||
import org.apache.http.impl.client.CloseableHttpClient; | |||
import org.apache.http.impl.client.HttpClients; | |||
import org.apache.http.message.BasicNameValuePair; | |||
import org.apache.http.util.EntityUtils; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import java.io.IOException; | |||
import java.net.URL; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import java.util.Map; | |||
public class HttpUtil { | |||
private Logger logger = LoggerFactory.getLogger(getClass()); | |||
private RequestConfig requestConfig = RequestConfig.custom() | |||
.setSocketTimeout(15000) | |||
.setConnectTimeout(15000) | |||
.setConnectionRequestTimeout(15000) | |||
.build(); | |||
private static HttpUtil instance = null; | |||
private HttpUtil(){} | |||
public static HttpUtil getInstance(){ | |||
if (instance == null) { | |||
instance = new HttpUtil(); | |||
} | |||
return instance; | |||
} | |||
/** | |||
* 发送 post 请求 | |||
* @param httpUrl 地址 | |||
*/ | |||
public String sendHttpPost(String httpUrl) { | |||
HttpPost httpPost= new HttpPost(httpUrl);// 创建 httpPost | |||
return sendHttpPost(httpPost); | |||
} | |||
/** | |||
* 发送 post 请求 | |||
* @param httpUrl 地址 | |||
* @param params 参数(格式:key1=value1&key2=value2) | |||
*/ | |||
public String sendHttpPost(String httpUrl, String params) { | |||
HttpPost httpPost= new HttpPost(httpUrl);// 创建 httpPost | |||
try { | |||
//设置参数 | |||
StringEntity stringEntity = new StringEntity(params, "UTF-8"); | |||
stringEntity.setContentType("application/x-www-form-urlencoded"); | |||
httpPost.setEntity(stringEntity); | |||
} catch (Exception e) { | |||
logger.error(e.getMessage(),e); | |||
} | |||
return sendHttpPost(httpPost); | |||
} | |||
/** | |||
* 发送 post 请求 | |||
* @param httpUrl 地址 | |||
* @param maps 参数 | |||
*/ | |||
public String sendHttpPost(String httpUrl, Map<String, String> maps) { | |||
HttpPost httpPost= new HttpPost(httpUrl);// 创建 httpPost | |||
// 创建参数队列 | |||
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); | |||
for (String key : maps.keySet()) { | |||
nameValuePairs.add(new BasicNameValuePair(key, maps.get(key))); | |||
} | |||
try { | |||
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8")); | |||
} catch (Exception e) { | |||
logger.error(e.getMessage(),e); | |||
} | |||
return sendHttpPost(httpPost); | |||
} | |||
/** | |||
* 发送 Post请求 | |||
* @param httpPost | |||
*@return | |||
*/ | |||
private String sendHttpPost(HttpPost httpPost) { | |||
CloseableHttpClient httpClient = null; | |||
CloseableHttpResponse response = null; | |||
HttpEntity entity = null; | |||
String responseContent = null; | |||
try { | |||
// 创建默认的 httpClient 实例. | |||
httpClient = HttpClients.createDefault(); | |||
httpPost.setConfig(requestConfig); | |||
// 执行请求 | |||
response = httpClient.execute(httpPost); | |||
entity = response.getEntity(); | |||
responseContent = EntityUtils.toString(entity, "UTF-8"); | |||
} catch (Exception e) { | |||
logger.error(e.getMessage(),e); | |||
} finally { | |||
try { | |||
// 关闭连接,释放资源 | |||
if (response != null) { | |||
response.close(); | |||
} | |||
if (httpClient != null) { | |||
httpClient.close(); | |||
} | |||
} catch (IOException e) { | |||
logger.error(e.getMessage(),e); | |||
} | |||
} | |||
return responseContent; | |||
} | |||
/** | |||
* 发送 get 请求 | |||
* @param httpUrl | |||
*/ | |||
public String sendHttpGet(String httpUrl) { | |||
HttpGet httpGet = new HttpGet(httpUrl);// 创建 get 请求 | |||
return sendHttpGet(httpGet); | |||
} | |||
/** | |||
* 发送 get请求 Https | |||
* @param httpUrl | |||
*/ | |||
public String sendHttpsGet(String httpUrl) { | |||
HttpGet httpGet = new HttpGet(httpUrl);// 创建 get 请求 | |||
return sendHttpsGet(httpGet); | |||
} | |||
/** | |||
* 发送 Get请求 | |||
* @param httpGet | |||
*@return | |||
*/ | |||
private String sendHttpGet(HttpGet httpGet) { | |||
CloseableHttpClient httpClient = null; | |||
CloseableHttpResponse response = null; | |||
HttpEntity entity = null; | |||
String responseContent = null; | |||
try { | |||
// 创建默认的 httpClient 实例. | |||
httpClient = HttpClients.createDefault(); | |||
httpGet.setConfig(requestConfig); | |||
// 执行请求 | |||
response = httpClient.execute(httpGet); | |||
entity = response.getEntity(); | |||
responseContent = EntityUtils.toString(entity, "UTF-8"); | |||
} catch (Exception e) { | |||
logger.error(e.getMessage(),e); | |||
} finally { | |||
try { | |||
// 关闭连接,释放资源 | |||
if (response != null) { | |||
response.close(); | |||
} | |||
if (httpClient != null) { | |||
httpClient.close(); | |||
} | |||
} catch (IOException e) { | |||
logger.error(e.getMessage(),e); | |||
} | |||
} | |||
return responseContent; | |||
} | |||
/** | |||
* 发送 Get请求 Https | |||
*@return | |||
*/ | |||
private String sendHttpsGet(HttpGet httpGet) { | |||
CloseableHttpClient httpClient = null; | |||
CloseableHttpResponse response = null; | |||
HttpEntity entity = null; | |||
String responseContent = null; | |||
try { | |||
// 创建默认的 httpClient 实例. | |||
PublicSuffixMatcher publicSuffixMatcher = PublicSuffixMatcherLoader.load(new | |||
URL(httpGet.getURI().toString())); | |||
DefaultHostnameVerifier hostnameVerifier = new DefaultHostnameVerifier(publicSuffixMatcher); | |||
httpClient = HttpClients.custom().setSSLHostnameVerifier(hostnameVerifier).build(); | |||
httpGet.setConfig(requestConfig); | |||
// 执行请求 | |||
response = httpClient.execute(httpGet); | |||
entity = response.getEntity(); | |||
responseContent = EntityUtils.toString(entity, "UTF-8"); | |||
} catch (Exception e) { | |||
logger.error(e.getMessage(),e); | |||
} finally { | |||
try { | |||
// 关闭连接,释放资源 | |||
if (response != null) { | |||
response.close(); | |||
} | |||
if (httpClient != null) { | |||
httpClient.close(); | |||
} | |||
} catch (IOException e) { | |||
logger.error(e.getMessage(),e); | |||
} | |||
} | |||
return responseContent; | |||
} | |||
} |
@@ -0,0 +1,46 @@ | |||
package com.ningdatech.pmapi.common.util; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import java.security.MessageDigest; | |||
public class Md5Utils { | |||
private static final Logger LOGGER = LoggerFactory.getLogger(Md5Utils.class); | |||
public static byte[] md5(String s) { | |||
MessageDigest algorithm; | |||
try { | |||
algorithm = MessageDigest.getInstance("MD5"); | |||
algorithm.reset(); | |||
algorithm.update(s.getBytes("UTF-8")); | |||
byte[] messageDigest = algorithm.digest(); | |||
return messageDigest; | |||
} catch (Exception e) { | |||
LOGGER.error("MD5 Error...", e); | |||
} | |||
return null; | |||
} | |||
private static final String toHex(byte hash[]) { | |||
if (hash == null) { | |||
return null; | |||
} | |||
StringBuffer buf = new StringBuffer(hash.length * 2); | |||
int i; | |||
for (i = 0; i < hash.length; i++) { | |||
if ((hash[i] & 0xff) < 0x10) { | |||
buf.append("0"); | |||
} | |||
buf.append(Long.toString(hash[i] & 0xff, 16)); | |||
} | |||
return buf.toString(); | |||
} | |||
public static String hash(String s) { | |||
try { | |||
return new String(toHex(md5(s)).getBytes("UTF-8"), "UTF-8"); | |||
} catch (Exception e) { | |||
LOGGER.error("not supported charset...{}", e); | |||
return s; | |||
} | |||
} | |||
} |
@@ -0,0 +1,34 @@ | |||
package com.ningdatech.pmapi.common.util; | |||
import com.alibaba.fastjson.JSON; | |||
import com.alibaba.fastjson.JSONObject; | |||
import lombok.extern.slf4j.Slf4j; | |||
import java.util.Objects; | |||
/** | |||
* @Classname RefreshKeyUtil | |||
* @Description | |||
* @Date 2023/6/27 10:03 | |||
* @Author PoffyZhang | |||
*/ | |||
@Slf4j | |||
public class RefreshKeyUtil { | |||
public static String getRequestSecret(String appKey, String appSecret) { | |||
Long requestTime = System.currentTimeMillis(); | |||
// 刷新秘钥 | |||
HttpUtil httpUtil = HttpUtil.getInstance(); | |||
log.info("请求密钥" + appSecret); | |||
String refreshSign = Md5Utils.hash (appKey + appSecret + requestTime); | |||
String refreshUrl = String.format ("http://59.202.38.178/gateway/app/refreshTokenByKey.htm" + | |||
"?appKey=%s&requestTime=%s&sign=%s", appKey, requestTime +"",refreshSign); | |||
log.info(refreshUrl); | |||
String result = httpUtil.sendHttpGet(refreshUrl); | |||
log.info(result); | |||
JSONObject dataJson = JSON.parseObject(result).getJSONObject("datas"); | |||
if(Objects.nonNull(dataJson)){ | |||
return dataJson.getString("requestSecret"); | |||
} | |||
return result; | |||
} | |||
} |
@@ -81,6 +81,7 @@ public class IndicatorTemplateManage { | |||
template.setUpdateOn(LocalDateTime.now()); | |||
template.setUpdateBy(user.getUsername()); | |||
if(indicatorTemplateService.saveOrUpdate(template)){ | |||
//保存 模板的详情 | |||
return "保存成功"; | |||
} | |||
@@ -32,4 +32,7 @@ public class PerformanceIndicatorProjectTemplateSaveDTO implements Serializable | |||
@ApiModelProperty("项目资金范围 1.500万元以下、2.500-2000万元,3.2000万元及以上") | |||
private Integer amountRange; | |||
@ApiModelProperty("绩效指标详情") | |||
private ProjectTemplateDetailDTO templateDetail; | |||
} |
@@ -0,0 +1,45 @@ | |||
package com.ningdatech.pmapi.performance.model.dto; | |||
import com.baomidou.mybatisplus.annotation.IdType; | |||
import com.baomidou.mybatisplus.annotation.TableId; | |||
import com.baomidou.mybatisplus.annotation.TableName; | |||
import io.swagger.annotations.ApiModel; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import java.io.Serializable; | |||
import java.time.LocalDateTime; | |||
/** | |||
* @Classname PerformanceIndicatorProjectTemplateDetail | |||
* @Description 绩效评价考核项目指标模板 | |||
* @Date 2023/6/19 14:02 | |||
* @Author PoffyZhang | |||
*/ | |||
@Data | |||
@ApiModel(value = "绩效评价考核项目指标模板详情保存树", description = "绩效评价考核项目指标模板详情保存树") | |||
public class ProjectTemplateDetailDTO implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
@ApiModelProperty("关联模板ID") | |||
private Long templateId; | |||
@ApiModelProperty("指标名称") | |||
private String name; | |||
@ApiModelProperty("指标类型 0阶段 1一级指标 2二级指标 3三级指标") | |||
private Integer type; | |||
@ApiModelProperty("父级指标id") | |||
private Long parentId; | |||
@ApiModelProperty("分数 3级指标才有") | |||
private Integer score; | |||
@ApiModelProperty("分数细则 3级指标才有") | |||
private String scoreRubric; | |||
@ApiModelProperty("子指标") | |||
private ProjectTemplateDetailDTO children; | |||
} |
@@ -0,0 +1,53 @@ | |||
package com.ningdatech.pmapi.performance.model.entity; | |||
import com.baomidou.mybatisplus.annotation.IdType; | |||
import com.baomidou.mybatisplus.annotation.TableId; | |||
import com.baomidou.mybatisplus.annotation.TableName; | |||
import io.swagger.annotations.ApiModel; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import java.io.Serializable; | |||
import java.time.LocalDateTime; | |||
/** | |||
* @Classname PerformanceIndicatorProjectTemplateDetail | |||
* @Description 绩效评价考核项目指标模板 | |||
* @Date 2023/6/19 14:02 | |||
* @Author PoffyZhang | |||
*/ | |||
@Data | |||
@TableName("nd_performance_indicator_project_template_detail") | |||
@ApiModel(value = "绩效评价考核项目指标模板详情", description = "绩效评价考核项目指标模板详情") | |||
public class PerformanceIndicatorProjectTemplateDetail implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
@ApiModelProperty("主键") | |||
@TableId(type = IdType.AUTO) | |||
private Long id; | |||
private LocalDateTime createOn; | |||
private LocalDateTime updateOn; | |||
private String createBy; | |||
private String updateBy; | |||
@ApiModelProperty("关联模板ID") | |||
private Long templateId; | |||
@ApiModelProperty("指标名称") | |||
private String name; | |||
@ApiModelProperty("指标类型 0阶段 1一级指标 2二级指标 3三级指标") | |||
private Integer type; | |||
@ApiModelProperty("父级指标id") | |||
private Long parentId; | |||
@ApiModelProperty("分数 3级指标才有") | |||
private Integer score; | |||
@ApiModelProperty("分数细则 3级指标才有") | |||
private String scoreRubric; | |||
} |
@@ -0,0 +1,41 @@ | |||
package com.ningdatech.pmapi.projectlib.controller; | |||
import com.ningdatech.log.annotation.WebLog; | |||
import com.ningdatech.pmapi.projectlib.manage.ApplicationManage; | |||
import com.ningdatech.pmapi.projectlib.model.dto.ApplicationAppCodeSaveDTO; | |||
import io.swagger.annotations.Api; | |||
import io.swagger.annotations.ApiOperation; | |||
import lombok.RequiredArgsConstructor; | |||
import org.springframework.web.bind.annotation.*; | |||
import javax.validation.Valid; | |||
/** | |||
* @Classname ProjectApplicationController | |||
* @Description | |||
* @Date 2023/6/27 11:32 | |||
* @Author PoffyZhang | |||
*/ | |||
@RestController | |||
@RequiredArgsConstructor | |||
@Api(tags = "项目应用控制器") | |||
@RequestMapping("/api/v1/application") | |||
public class ProjectApplicationController { | |||
private final ApplicationManage applicationManage; | |||
@GetMapping("/get-report") | |||
@ApiOperation("获取应用 试运行报告") | |||
@WebLog("获取应用 试运行报告") | |||
public String getReport(@Valid @RequestBody ApplicationAppCodeSaveDTO dto) { | |||
return applicationManage.getReport(dto); | |||
} | |||
@PostMapping("/save-appcode") | |||
@ApiOperation("保存应用注册的appCode") | |||
@WebLog("保存应用注册的appCode") | |||
public String saveAppCode(@Valid @RequestBody ApplicationAppCodeSaveDTO dto) { | |||
return applicationManage.saveAppCode(dto); | |||
} | |||
} |
@@ -0,0 +1,53 @@ | |||
package com.ningdatech.pmapi.projectlib.manage; | |||
import com.ningdatech.basic.function.VUtils; | |||
import com.ningdatech.pmapi.projectlib.model.dto.ApplicationAppCodeSaveDTO; | |||
import com.ningdatech.pmapi.projectlib.model.entity.ProjectApplication; | |||
import com.ningdatech.pmapi.projectlib.service.IProjectApplicationService; | |||
import com.ningdatech.pmapi.user.util.LoginUserUtil; | |||
import lombok.RequiredArgsConstructor; | |||
import lombok.extern.slf4j.Slf4j; | |||
import org.springframework.stereotype.Component; | |||
import java.time.LocalDateTime; | |||
import java.util.Objects; | |||
/** | |||
* <p> | |||
* ApplicationManage | |||
* </p> | |||
* | |||
* @author ZPF | |||
* @since 14:19 2023/2/1 | |||
*/ | |||
@Component | |||
@RequiredArgsConstructor | |||
@Slf4j | |||
public class ApplicationManage { | |||
private final IProjectApplicationService applicationService; | |||
/** | |||
* 保存 appCode | |||
* @param dto | |||
* @return | |||
*/ | |||
public String saveAppCode(ApplicationAppCodeSaveDTO dto) { | |||
Long userId = LoginUserUtil.getUserId(); | |||
ProjectApplication app = applicationService.getById(dto.getId()); | |||
VUtils.isTrue(Objects.isNull(app)).throwMessage("该应用不存在"); | |||
app.setAppCode(dto.getAppCode()); | |||
app.setUpdateOn(LocalDateTime.now()); | |||
app.setUpdateBy(userId); | |||
if(applicationService.updateById(app)){ | |||
return "保存成功"; | |||
} | |||
return "保存失败"; | |||
} | |||
public String getReport(ApplicationAppCodeSaveDTO dto) { | |||
return null; | |||
} | |||
} |
@@ -0,0 +1,32 @@ | |||
package com.ningdatech.pmapi.projectlib.model.dto; | |||
import io.swagger.annotations.ApiModel; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import javax.validation.constraints.NotBlank; | |||
import javax.validation.constraints.NotNull; | |||
import java.io.Serializable; | |||
/** | |||
* <p> | |||
* 项目应用保存appCode | |||
* </p> | |||
* | |||
* @author ZPF | |||
* @since 2023-06-21 | |||
*/ | |||
@Data | |||
@ApiModel(value = "ProjectApplicationSaveDTO", description = "项目应用保存appCode") | |||
public class ApplicationAppCodeSaveDTO implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
@ApiModelProperty("应用的id") | |||
@NotNull(message = "应用id必填") | |||
private Long id; | |||
@ApiModelProperty("应用编码") | |||
@NotBlank(message = "请输入应用编码") | |||
private String appCode; | |||
} |
@@ -31,6 +31,9 @@ public class ProjectApplication implements Serializable { | |||
@ApiModelProperty("项目ID") | |||
private Long projectId; | |||
@ApiModelProperty("应用编码") | |||
private String appCode; | |||
@ApiModelProperty("是否初次建设 0否 1是") | |||
private Integer isFirst; | |||
@@ -27,6 +27,9 @@ public class ProjectApplicationVO implements Serializable { | |||
@ApiModelProperty("项目ID") | |||
private Long projectId; | |||
@ApiModelProperty("应用编码") | |||
private String appCode; | |||
@ApiModelProperty("是否初次建设 0否 1是") | |||
private Integer isFirst; | |||