Merge branch 'dev_20230216' of E:\futianxiangmu\foton-slrs-system-rest with conflicts.

This commit is contained in:
gaojiabao
2023-03-02 17:21:02 +08:00
parent 413ef5b82e
commit faa7fdd02e
10 changed files with 519 additions and 78 deletions
@@ -3,9 +3,9 @@
# 数据库配置
#=============================================
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://10.100.5.111:3306/foton_slrs?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false
spring.datasource.username = tempuser
spring.datasource.password = Fting&8g35g#geg2
spring.datasource.url = jdbc:mysql://121.36.69.172:3307/foton_slrs_test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false
spring.datasource.username = root
spring.datasource.password = hzwlsoft.com
@@ -18,7 +18,7 @@ application.center=1
#Eureka
eureka.client.allow-redirects=true
eureka.client.register-with-eureka=true
eureka.client.service-url.defaultZone=http://10.100.5.117:4201/eureka/
eureka.client.service-url.defaultZone=http://127.0.0.1:8123/eureka/
#==============================================
# 邮箱配置1
@@ -37,10 +37,10 @@ spring.mail.port=587
#==============================================
# MQ配置
#==============================================
spring.rabbitmq.host=10.100.5.119
spring.rabbitmq.host=121.36.69.172
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=foton@admin
spring.rabbitmq.password=hzwlsoft.com
spring.rabbitmq.listener.simple.acknowledge-mode= manual
# 生产者 默认关闭 发版 需改为 true
spring.rabbitmq.listener.direct.auto-startup=true
@@ -1,161 +1,323 @@
##############################################
# 项目启动模式
# \u9879\u76EE\u542F\u52A8\u6A21\u5F0F
##############################################
spring.profiles.active=dev
##############################################
#公共配置信息
#\u516C\u5171\u914D\u7F6E\u4FE1\u606F
##############################################
server.compression.enabled=true
server.compression.mime-types=application/json,application/xml,text/html,text/plain,text/css,application/x-javascript
# 端口号设置
server.port=4202
#主服务session超时
# \u7AEF\u53E3\u53F7\u8BBE\u7F6E
server.port=10086
#\u4E3B\u670D\u52A1session\u8D85\u65F6
server.servlet.session.timeout =600
#tomcat /resource/local/version-manager 创建tomcat指定临时目录
#tomcat /resource/local/version-manager \u521B\u5EFAtomcat\u6307\u5B9A\u4E34\u65F6\u76EE\u5F55
server.tomcat.basedir=/data/slrs/temp
# http-only
server.session.cookie.http-only=true
spring.mvc.async.request-timeout=20000
# file模块上传文件大小限制
# file\u6A21\u5757\u4E0A\u4F20\u6587\u4EF6\u5927\u5C0F\u9650\u5236
spring.http.multipart.max-request-size=100MB
spring.http.multipart.max-file-size=100MB
#显示sql
#\u663E\u793Asql
logging.level.com.adc=DEBUG
logging.level.org.springframework=info
# 请求前缀
# \u8BF7\u6C42\u524D\u7F00
restPath=/api
#是否将自己注册到Eureka Server上,默认为true
#\u662F\u5426\u5C06\u81EA\u5DF1\u6CE8\u518C\u5230Eureka Server\u4E0A\uFF0C\u9ED8\u8BA4\u4E3Atrue
eureka.client.register-with-eureka=true
##是否从Eureka Server上获取注册信息,默认为true
##\u662F\u5426\u4ECEEureka Server\u4E0A\u83B7\u53D6\u6CE8\u518C\u4FE1\u606F\uFF0C\u9ED8\u8BA4\u4E3Atrue
eureka.client.fetch-registry=true
eureka.instance.prefer-ip-address=true
eureka.client.service-url.defaultZone=http://10.100.5.117:4201/eureka/
# 请求连接的超时时间 默认的时间为 1 秒
# \u8BF7\u6C42\u8FDE\u63A5\u7684\u8D85\u65F6\u65F6\u95F4 \u9ED8\u8BA4\u7684\u65F6\u95F4\u4E3A 1 \u79D2
ribbon.ConnectTimeout=500000
# 请求处理的超时时间
# \u8BF7\u6C42\u5904\u7406\u7684\u8D85\u65F6\u65F6\u95F4
ribbon.ReadTimeout=500000
# ===============================
# = DATA SOURCE
# ===============================
spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
# 下面为连接池的补充设置,应用到上面所有数据源中
# 初始化大小,最小,最大
spring.datasource.druid.initial-size= 5
spring.datasource.druid.min-idle= 5
spring.datasource.druid.max-active= 50
# 配置获取连接等待超时的时间
spring.datasource.druid.max-wait= 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis= 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis= 300000
spring.datasource.druid.validation-query= SELECT 1 FROM DUAL
# 空闲时间监测连接是否优秀奥
spring.datasource.druid.test-while-idle= true
# 数据库连接心跳监测
spring.datasource.druid.keep-alive= true
# 获取链接前检查链接是否有效
spring.datasource.druid.test-on-borrow= true
# 返回连接池时检查链接是否可用
spring.datasource.druid.test-on-return= false
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.druid.pool-prepared-statements= true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size= 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.druid.filters=stat,wall
#合并多个DruidDataSource的监控数据
spring.datasource.druid.use-global-data-source-stat=true
# druid web管理页面开启
spring.datasource.druid.stat-view-servlet.enabled=true
# druid web管理页面白名单
#spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
# druid web管理页面账号
spring.datasource.druid.stat-view-servlet.login-username=druid
# druid web管理页面密码
spring.datasource.druid.stat-view-servlet.login-password=laws1q2w3e4r
# druid web管理页面URL访问前缀地址
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
# ===============================
# = DATA SOURCE
# ===============================
spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
# \u4E0B\u9762\u4E3A\u8FDE\u63A5\u6C60\u7684\u8865\u5145\u8BBE\u7F6E\uFF0C\u5E94\u7528\u5230\u4E0A\u9762\u6240\u6709\u6570\u636E\u6E90\u4E2D
# \u521D\u59CB\u5316\u5927\u5C0F\uFF0C\u6700\u5C0F\uFF0C\u6700\u5927
spring.datasource.druid.initial-size= 5
spring.datasource.druid.min-idle= 5
spring.datasource.druid.max-active= 50
# \u914D\u7F6E\u83B7\u53D6\u8FDE\u63A5\u7B49\u5F85\u8D85\u65F6\u7684\u65F6\u95F4
spring.datasource.druid.max-wait= 60000
# \u914D\u7F6E\u95F4\u9694\u591A\u4E45\u624D\u8FDB\u884C\u4E00\u6B21\u68C0\u6D4B\uFF0C\u68C0\u6D4B\u9700\u8981\u5173\u95ED\u7684\u7A7A\u95F2\u8FDE\u63A5\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2
spring.datasource.druid.time-between-eviction-runs-millis= 60000
# \u914D\u7F6E\u4E00\u4E2A\u8FDE\u63A5\u5728\u6C60\u4E2D\u6700\u5C0F\u751F\u5B58\u7684\u65F6\u95F4\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2
spring.datasource.druid.min-evictable-idle-time-millis= 300000
spring.datasource.druid.validation-query= SELECT 1 FROM DUAL
# \u7A7A\u95F2\u65F6\u95F4\u76D1\u6D4B\u8FDE\u63A5\u662F\u5426\u4F18\u79C0\u5965
spring.datasource.druid.test-while-idle= true
# \u6570\u636E\u5E93\u8FDE\u63A5\u5FC3\u8DF3\u76D1\u6D4B
spring.datasource.druid.keep-alive= true
# \u83B7\u53D6\u94FE\u63A5\u524D\u68C0\u67E5\u94FE\u63A5\u662F\u5426\u6709\u6548
spring.datasource.druid.test-on-borrow= true
# \u8FD4\u56DE\u8FDE\u63A5\u6C60\u65F6\u68C0\u67E5\u94FE\u63A5\u662F\u5426\u53EF\u7528
spring.datasource.druid.test-on-return= false
# \u6253\u5F00PSCache\uFF0C\u5E76\u4E14\u6307\u5B9A\u6BCF\u4E2A\u8FDE\u63A5\u4E0APSCache\u7684\u5927\u5C0F
spring.datasource.druid.pool-prepared-statements= true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size= 20
# \u914D\u7F6E\u76D1\u63A7\u7EDF\u8BA1\u62E6\u622A\u7684filters\uFF0C\u53BB\u6389\u540E\u76D1\u63A7\u754C\u9762sql\u65E0\u6CD5\u7EDF\u8BA1\uFF0C'wall'\u7528\u4E8E\u9632\u706B\u5899
spring.datasource.druid.filters=stat,wall
#\u5408\u5E76\u591A\u4E2ADruidDataSource\u7684\u76D1\u63A7\u6570\u636E
spring.datasource.druid.use-global-data-source-stat=true
# druid web\u7BA1\u7406\u9875\u9762\u5F00\u542F
spring.datasource.druid.stat-view-servlet.enabled=true
# druid web\u7BA1\u7406\u9875\u9762\u767D\u540D\u5355
#spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
# druid web\u7BA1\u7406\u9875\u9762\u8D26\u53F7
spring.datasource.druid.stat-view-servlet.login-username=druid
# druid web\u7BA1\u7406\u9875\u9762\u5BC6\u7801
spring.datasource.druid.stat-view-servlet.login-password=laws1q2w3e4r
# druid web\u7BA1\u7406\u9875\u9762URL\u8BBF\u95EE\u524D\u7F00\u5730\u5740
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
# ===============================
# =======================================
# Mybatis Plus config
# =======================================
mybatis-plus.config-location=classpath:mybatis/mybatis-config.xml
mybatis-plus.mapper-locations=classpath*:mybatis/mapper/**/*.xml
# ========================================
# activiti 配置信息
# activiti \u914D\u7F6E\u4FE1\u606F
# ========================================
#spring.activiti.database-schema=ACT
spring.activiti.database-schema-update=false
spring.activiti.check-process-definitions=false
spring.activiti.job-executor-activate=false
spring.activiti.process-definition-location-prefix=classpath:/mybatis/mapper/activiti/
# =============================================================================
# 邮箱配置
# \u90AE\u7BB1\u914D\u7F6E
# =============================================================================
mail.valid=false
spring.mail.host=smtp.163.com
spring.mail.protocol=smtp
spring.mail.username=xxx@163.com
spring.mail.password=xxx
spring.mail.properties.smtp.auth=true
spring.mail.properties.smtp.starttls.enable=true
spring.mail.properties.smtp.starttls.required=true
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.port=465
#全球标准法规管理系统 十六进制码
#\u5168\u7403\u6807\u51C6\u6CD5\u89C4\u7BA1\u7406\u7CFB\u7EDF \u5341\u516D\u8FDB\u5236\u7801
mail.personName=E585A8E79083E6A087E58786E6B395E8A784E7AEA1E79086E7B3BBE7BB9F
#邮箱内容中嵌入的系统地址
#\u90AE\u7BB1\u5185\u5BB9\u4E2D\u5D4C\u5165\u7684\u7CFB\u7EDF\u5730\u5740
Lawss.address =http://standard.gacrnd.com:60090
# =========================================
# login value
# =========================================
maxLoginErrorCount=3
verifyCodeMode=1
# =============================================================================
# 文件上传管控及配置
# \u6587\u4EF6\u4E0A\u4F20\u7BA1\u63A7\u53CA\u914D\u7F6E
# =============================================================================
# file模块上传文件的服务器地址
# file\u6A21\u5757\u4E0A\u4F20\u6587\u4EF6\u7684\u670D\u52A1\u5668\u5730\u5740
file.path=/data/slrs/file
stand.edit.file.path = /data/slrs/file/
# onlyoffice 预览地址
# onlyoffice \u9884\u89C8\u5730\u5740
file.downloadUrl=https://srms.foton.com.cn/file/
#上传文件白名单-以,分隔
#\u4E0A\u4F20\u6587\u4EF6\u767D\u540D\u5355-\u4EE5,\u5206\u9694
upload.file.white.lists = doc,docx,xls,xlsx,pdf,PDF,png,jpg,pptx,ppt,pdg,rar,zip,dot
# =============================================================================
# elasticsearch 配置
# elasticsearch \u914D\u7F6E
# =============================================================================
elasticsearch.clustername=elasticsearch
elasticsearch.ip=10.100.5.122
elasticsearch.port=9300
elasticsearch.ip=127.0.0.1
elasticsearch.port=9306
elasticsearch.poolSize=5
elas.flag=true
elasticsearch.img=https://srms.foton.com.cn
# 文档转换TCP通讯地址
# 拆分的图片调用 (修改ip时此处也应该被修改)
elasticsearch.img=http://localhost:9090
# \u6587\u6863\u8F6C\u6362TCP\u901A\u8BAF\u5730\u5740
convert.host=127.0.0.1
# =============================================================================
# scheduled 配置
# scheduled \u914D\u7F6E
# =============================================================================
isNotScheduled=true
@@ -416,6 +416,10 @@ public class SarBussionessStandController extends BaseController<SarBussionessSt
}
}
@ApiOperation(value = "|SarBussionessStand|清空附件 重新挂靠")
@GetMapping("/emptyFileAnewStorage")
public ResponseMessage emptyFileAnewStorage (){
return sarBussionessStandEOService.emptyFileAnewStorage();
}
}
@@ -56,7 +56,7 @@ public interface ISarBussionessStandService extends IService<SarBussionessStand>
void checkFileByEncrypt();
//导入
ResponseMessage<SarBussionessStand> importSarBussionessStandFile(MultipartFile file) throws Exception;
ResponseMessage<SarBussionessStand> importSarBussionessStand(List<Map<String, String>> dataList, String filepath)throws Exception;
}
@@ -2695,6 +2695,59 @@ public class SarBussionessStandServiceImpl extends ServiceImpl<SarBussionessStan
row.setAttrInfoMap(getAttrMap);
}
}
/*
//1:数据迁移方案
//方案一:清空附件 重新挂靠
//1.流程:
//a.备份并清空新系统中标准下附件
//识别老系统中原文标签下标准对应新系统标准数据
//b.将老系统中原文附件迁移至新系统存储空间,涉及到文件的复制和转码(其中转码失败率比较高,需要一定时间)
//c.对应的文件路径储存在新系统数据库中,并且对应挂靠新系统中标准的发布稿原文下
//d.搜索中心的刷新
//
//2.关联关系
//新系统中数据表sar_standards_info表的BUILD_ID字段,对应老系统中数据表kmpro_addon34表的lore_doc_id字段
//
//老系统中
//kmpro_addon34表,记录所有标准信息
//lore_depot_sort表中Sign字段可以看出是原文或译文
//lore_attache表中记录附件名称和路径
//
//新系统中
//sar_standards_info表,记录所有海外标准信息
//sar_buss_stand_attr_info表,记录标准对应附件(目前只有发布稿原文的字段,没有发布稿译文的存储字段。。)
//att_file_01——att_file_10表,记录附件对应存储位置
//
:
*/
@Override
public ResponseMessage emptyFileAnewStorage() {
//一: 进行数据备份 包含新系统数据备份,老系统数据备份 以及 本地备份 线上备份。
//二: 对老系统中的三张表 进行迁移
/*
一:在老系统的数据库中的表进行迁移 然后根据迁移的数据
二:查询出老系统的数据
1:查询 出来所有的数据
2: 查询出来以后 进行联查 三表进行联查 关联其中的数据 获得全部数据
3: 查询出 海标标准和国内标准的全部数据 特点是 BUILD_ID 字段不能为空 因为 这个字段代表了和新老数据库的关系
4: 查询出 企业标准的全部数据 特点依旧是 DUILD_Id 字段不能为空
三: 进行数据关联
1:先跟 海外和国内的数据 进行对比 找到 kmpro_addon34表的lore_doc_id字段 与 新系统中数据表sar_standards_info表的BUILD_ID字段,
2:对应老系统中数据表kmpro_addon34表的lore_doc_id字段 相同则进入
四:关联数据的文件存储
1: 判断能不能找到
2: 如果能找到 则重新存入,
3: 鉴定是否是原文 还是 译文 进行分类存储 或者进行标识存储
4: 数据库增加字段,与老系统进行对应
数据存储的时候,建立一种表 这张表存储的数据是 需要转码的文件
五: 数据对应上 以后 要进行换换 线上进行预览 (待)
六: es数据进行同步
*/
return null;
}
}
@@ -0,0 +1,81 @@
package com.adc.da.slrs.sarStandTranslate.controller;
import com.adc.da.base.web.BaseController;
import com.adc.da.slrs.StandardQA.entity.AskUser;
import com.adc.da.slrs.sarStandTranslate.entity.SarStandTranslate;
import com.adc.da.slrs.sarStandTranslate.service.SarStandTranslateService;
import com.adc.da.util.UUIDUtils;
import com.adc.da.util.http.ResponseMessage;
import com.adc.da.util.http.Result;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import net.sf.json.JSONArray;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
/**
* <p>
* 前端控制器
* </p>
*
* @author gjb
* @since 2023/2/23
*/
@RestController
@Api(tags = "流程中心-标准需求(翻译)申请流程")
@RequestMapping("/${restPath}/sarStandTranslate")
@Slf4j
public class SarStandTranslateController extends BaseController<SarStandTranslate> {
@Autowired
private SarStandTranslateService sarStandTranslateService;
/**
* 流程中心,标准需求翻译申请 发起
* @param
* @return
*/
@PostMapping("/addSarStandTranslate")
public ResponseMessage addSarStandTranslate(@RequestBody SarStandTranslate sarStandTranslate){
sarStandTranslate.setId(UUIDUtils.randomUUID20());
if(sarStandTranslateService.save(sarStandTranslate)){
return Result.success("200","添加成功",sarStandTranslate);
}else {
return Result.error("-1","添加失败",null);
}
}
/**
* 流程中心,标准需求翻译审核 回填
* @param
* @return
*/
@PostMapping("/selectSarStandTranslate")
public ResponseMessage selectSarStandTranslate(String id){
SarStandTranslate byId = sarStandTranslateService.getById(id);
if(byId!=null){
return Result.success("200",null,byId);
}else {
return Result.error("-1","失败",null);
}
}
/**
* 流程中心,标准需求翻译申请 审核
* @param
* @return
*/
@PostMapping("/updateSarStandTranslate")
public ResponseMessage updateSarStandTranslate(@RequestBody SarStandTranslate sarStandTranslate){
if(sarStandTranslateService.updateById(sarStandTranslate)){
return Result.success("200","成功",sarStandTranslate);
}else {
return Result.error("-1","失败",null);
}
}
}
@@ -0,0 +1,15 @@
package com.adc.da.slrs.sarStandTranslate.dao;
import com.adc.da.slrs.sarStandTranslate.entity.SarStandTranslate;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author gjb
* @since 2023-02-23
*/
public interface SarStandTranslateDao extends BaseMapper<SarStandTranslate> {
}
@@ -1,4 +1,104 @@
package com.adc.da.slrs.sarStandTranslate.entity;
public class SarStandTranslate {
import com.adc.da.base.entity.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
* 标准需求翻译申请表
* @author gjb
* @since 2023-02-23
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@ApiModel(value="SarStandTranslate对象", description="")
public class SarStandTranslate extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
@TableId("ID")
private String id;
@ApiModelProperty(value = "申请人")
@TableField("PRORPSER_NAME")
private String proposerName;
@ApiModelProperty(value = "申请单位")
@TableField("PRORPSER_UNIT")
private String proposerUnit;
// @ApiModelProperty(value = "联系电话")
// @TableField("PHONE")
// private String phone;
//
// @ApiModelProperty(value = "邮箱")
// @TableField("MAIL")
// private String mail;
@ApiModelProperty(value = "类型")
@TableField("TYPE")
private String type;
@ApiModelProperty(value = "标准编号")
@TableField("STAND_NUMBER")
private String standNumber;
@ApiModelProperty(value = "标准名称")
@TableField("STAND_NAME")
private String standName;
@ApiModelProperty(value = "需求时间")
@TableField("NEED_TIME")
private String needTime;
@ApiModelProperty(value = "页数/字数")
@TableField("NUMBER_WORDS")
private String numberWords;
@ApiModelProperty(value = "原语言")
@TableField("INITIAL_LANGUAGE")
private String initialLanguage;
@ApiModelProperty(value = "目标语言")
@TableField("GOAL_LANGUAGE")
private String goalLanguage;
@ApiModelProperty(value = "费用出资项目目的项目名称")
@TableField("COST_GOAL_PROECT_NAME")
private String costGoalProectName;
@ApiModelProperty(value = "费用出资项目目的项目编号科目")
@TableField("COST_GOAL_PROECT_NUMBER")
private String costGoalProectNumber;
@ApiModelProperty(value = "是否批准")
@TableField("RATIFY")
private String ratify;
@ApiModelProperty(value = "申请理由")
@TableField("REASON")
private String reason;
@ApiModelProperty(value = "驳回理由")
@TableField("NOT_REASON")
private String notReason;
@ApiModelProperty(value = "费用")
@TableField("COST")
private String cost;
@ApiModelProperty(value = "审核人")
@TableField("AUDIT")
private String audit;
}
@@ -0,0 +1,7 @@
package com.adc.da.slrs.sarStandTranslate.service;
import com.adc.da.slrs.sarStandTranslate.entity.SarStandTranslate;
import com.baomidou.mybatisplus.extension.service.IService;
public interface SarStandTranslateService extends IService<SarStandTranslate> {
}
@@ -0,0 +1,19 @@
package com.adc.da.slrs.sarStandTranslate.service.impl;
import com.adc.da.slrs.sarStandTranslate.dao.SarStandTranslateDao;
import com.adc.da.slrs.sarStandTranslate.entity.SarStandTranslate;
import com.adc.da.slrs.sarStandTranslate.service.SarStandTranslateService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional(value = "transactionManager", readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
public class SarStandTranslateServiceImpl extends ServiceImpl<SarStandTranslateDao, SarStandTranslate> implements SarStandTranslateService {
@Autowired
private SarStandTranslateDao sarStandTranslateDao;
}