Commit f5a933de authored by 姬鋆屾's avatar 姬鋆屾
parents c6d6a13a 9ef22e94
-- ---------------------------- -- ----------------------------
2023-9-11 -- 2023-9-11
-- ---------------------------- -- ----------------------------
ALTER TABLE mortals_xhx_user ADD COLUMN `staffId` varchar(64) COMMENT '员工Id,关联用户员工表'; ALTER TABLE mortals_xhx_user ADD COLUMN `staffId` varchar(64) COMMENT '员工Id,关联用户员工表';
ALTER TABLE mortals_xhx_user ADD COLUMN `openId` varchar(64) COMMENT '微信openId'; ALTER TABLE mortals_xhx_user ADD COLUMN `openId` varchar(64) COMMENT '微信openId';
...@@ -108,3 +108,10 @@ CREATE TABLE mortals_xhx_news_up( ...@@ -108,3 +108,10 @@ CREATE TABLE mortals_xhx_news_up(
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
,KEY `upName` (`upName`) USING BTREE ,KEY `upName` (`upName`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='新闻点赞记录信息'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='新闻点赞记录信息';
-- ----------------------------
-- 2024-12-5
-- ----------------------------
ALTER TABLE mortals_xhx_company ADD COLUMN `background` varchar(256) default '' COMMENT '背景图片';
...@@ -14,6 +14,22 @@ ...@@ -14,6 +14,22 @@
<version>1.0.0-SNAPSHOT</version> <version>1.0.0-SNAPSHOT</version>
</parent> </parent>
<properties>
<!-- 默认值 -->
<profiles.server.debug></profiles.server.debug>
<profiles.server.path>/enterprise</profiles.server.path>
<profiles.log.path>/home/mortals/app/logs</profiles.log.path>
<profiles.log.level>info</profiles.log.level>
<profiles.publish.path>/home/publish</profiles.publish.path>
<profiles.filepath>/mortals/app/data</profiles.filepath>
<profiles.nacos.group>DEFAULT_GROUP</profiles.nacos.group>
<profiles.nacos.namespace>smart-gov</profiles.nacos.namespace>
<profiles.req.json.check>false</profiles.req.json.check>
<profiles.trustedReferer></profiles.trustedReferer>
<package.environment>build</package.environment>
<skipUi>true</skipUi>
</properties>
<profiles> <profiles>
<profile> <profile>
<id>develop</id> <id>develop</id>
...@@ -42,6 +58,7 @@ ...@@ -42,6 +58,7 @@
<profiles.active>test</profiles.active> <profiles.active>test</profiles.active>
<profiles.platform.type>standalone</profiles.platform.type> <profiles.platform.type>standalone</profiles.platform.type>
<profiles.server.port>21086</profiles.server.port> <profiles.server.port>21086</profiles.server.port>
<profiles.server.debug>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6519</profiles.server.debug>
<profiles.server.path>/enterprise</profiles.server.path> <profiles.server.path>/enterprise</profiles.server.path>
<profiles.publish.path>/home/publish</profiles.publish.path> <profiles.publish.path>/home/publish</profiles.publish.path>
<profiles.nacos.server-addr>192.168.0.252:8848</profiles.nacos.server-addr> <profiles.nacos.server-addr>192.168.0.252:8848</profiles.nacos.server-addr>
...@@ -55,36 +72,25 @@ ...@@ -55,36 +72,25 @@
<profiles.log.path>/home/mortals/app/logs</profiles.log.path> <profiles.log.path>/home/mortals/app/logs</profiles.log.path>
<profiles.log.level>INFO</profiles.log.level> <profiles.log.level>INFO</profiles.log.level>
<package.environment>test</package.environment> <package.environment>test</package.environment>
<skipUi>false</skipUi> <skipUi>true</skipUi>
</properties> </properties>
</profile> </profile>
<profile> <profile>
<id>product</id> <id>product</id>
<properties> <properties>
<profiles.active>product</profiles.active> <profiles.active>product</profiles.active>
<profiles.platform.type>cloud</profiles.platform.type> <profiles.platform.type>standalone</profiles.platform.type>
<profiles.server.port>11086</profiles.server.port> <profiles.server.port>21086</profiles.server.port>
<profiles.server.path>/office</profiles.server.path> <profiles.nacos.server-addr>127.0.0.1:8848</profiles.nacos.server-addr>
<profiles.nacos.server-addr>172.15.28.120:8848</profiles.nacos.server-addr>
<profiles.nacos.group>DEFAULT_GROUP</profiles.nacos.group> <profiles.nacos.group>DEFAULT_GROUP</profiles.nacos.group>
<profiles.nacos.namespace>smart-gov</profiles.nacos.namespace> <profiles.nacos.namespace>smart-gov</profiles.nacos.namespace>
<profiles.rabbitmq.host>172.15.28.115</profiles.rabbitmq.host> <package.environment>build:prod</package.environment>
<profiles.rabbitmq.port>5672</profiles.rabbitmq.port> <skipDeploy>true</skipDeploy>
<profiles.rabbitmq.username>taxi_mq</profiles.rabbitmq.username>
<profiles.rabbitmq.password>admin@2020</profiles.rabbitmq.password>
<profiles.rabbitmq.virtualhost>/</profiles.rabbitmq.virtualhost>
<profiles.log.path>/home/mortals/app/logs</profiles.log.path>
<profiles.log.level>info</profiles.log.level>
<profiles.publish.path>/home/publish</profiles.publish.path>
<package.environment>build</package.environment>
<skipUi>false</skipUi>
</properties> </properties>
</profile> </profile>
</profiles> </profiles>
<properties>
</properties>
<dependencies> <dependencies>
......
...@@ -14,7 +14,7 @@ SHELL_LOG="${BASEDIR}/${SHELL_NAME}.log" ...@@ -14,7 +14,7 @@ SHELL_LOG="${BASEDIR}/${SHELL_NAME}.log"
JAVA_HOME="/usr/local/java/jdk1.8" JAVA_HOME="/usr/local/java/jdk1.8"
SERVICE_PATH="/usr/lib/systemd/system" SERVICE_PATH="/usr/lib/systemd/system"
PUBLISH_PATH="@profiles.publish.path@" PUBLISH_PATH="/home/publish"
PROJECT_NAME="@project.artifactId@" PROJECT_NAME="@project.artifactId@"
PROJECT_EXECPATH="${PUBLISH_PATH}/${PROJECT_NAME}" PROJECT_EXECPATH="${PUBLISH_PATH}/${PROJECT_NAME}"
...@@ -35,7 +35,7 @@ clear_deploy() { ...@@ -35,7 +35,7 @@ clear_deploy() {
SERVICE=$1 SERVICE=$1
EXECPATH=$2 EXECPATH=$2
#清理后台自启服务 #清理后台自启服务
rm -rf ${SERVICE} rm -f ${SERVICE}
#清理执行文件目录 #清理执行文件目录
rm -rf ${EXECPATH} rm -rf ${EXECPATH}
} }
...@@ -58,6 +58,7 @@ build_service() { ...@@ -58,6 +58,7 @@ build_service() {
echo "[Service]" >>${SERVICE} echo "[Service]" >>${SERVICE}
echo "Environment=\"JAVA_HOME=$JAVA_HOME\"" >>${SERVICE} echo "Environment=\"JAVA_HOME=$JAVA_HOME\"" >>${SERVICE}
echo "Type=forking" >>${SERVICE} echo "Type=forking" >>${SERVICE}
echo "ExecStartPre=-/bin/sleep 5s" >>${SERVICE}
echo "ExecStart=${EXECPATH}/bin/start.sh" >>${SERVICE} echo "ExecStart=${EXECPATH}/bin/start.sh" >>${SERVICE}
echo "ExecStop=${EXECPATH}/bin/shutdown.sh" >>${SERVICE} echo "ExecStop=${EXECPATH}/bin/shutdown.sh" >>${SERVICE}
echo "PrivateTmp=true" >>${SERVICE} echo "PrivateTmp=true" >>${SERVICE}
...@@ -103,8 +104,11 @@ project_ui_deploy() { ...@@ -103,8 +104,11 @@ project_ui_deploy() {
main() { main() {
echo "后台服务部署" echo "后台服务部署"
project_deploy project_deploy
#判断是否需要部署ui
if [ "@skipUi@" == "false" ];then
echo "前端服务部署" echo "前端服务部署"
project_ui_deploy project_ui_deploy
fi;
exit ${RETVAL} exit ${RETVAL}
} }
......
#! /bin/sh #!/bin/sh
PORT="@profiles.server.port@" PORT="@profiles.server.port@"
BASEDIR=$(dirname $0) BASEDIR=`dirname $0`
BASEDIR=$( ( BASEDIR=`(cd "$BASEDIR"; pwd)`
cd "$BASEDIR"
pwd
))
PROJECT_NAME="@project.artifactId@" PROJECT_NAME="@project.artifactId@"
MAIN_CLASS="$PROJECT_NAME" MAIN_CLASS="$PROJECT_NAME";
SUCCESS=0
FAIL=9
if [ ! -n "$PORT" ]; then if [ ! -n "$PORT" ]; then
echo $"Usage: $0 {port}" echo $"Usage: $0 {port}"
exit $FAIL exit $FAIL
fi fi
pid=$(ps ax | grep -i "$MAIN_CLASS" | grep java | grep -v grep | awk '{print $1}')
if [ -z "$pid" ]; then pid=`ps ax | grep -i "$MAIN_CLASS" | grep java | grep -v grep | awk '{print $1}'`
if [ -z "$pid" ] ; then
echo "No Server running." echo "No Server running."
exit 1 exit $FAIL;
fi fi
echo "stoping application $PROJECT_NAME......" echo "stoping application $PROJECT_NAME......"
...@@ -24,3 +23,5 @@ echo "stoping application $PROJECT_NAME......" ...@@ -24,3 +23,5 @@ echo "stoping application $PROJECT_NAME......"
kill -15 ${pid} kill -15 ${pid}
echo "Send shutdown request to Server $PROJECT_NAME OK" echo "Send shutdown request to Server $PROJECT_NAME OK"
#!/bin/sh #!/bin/sh
PORT="@profiles.server.port@" PORT="@profiles.server.port@"
DEBUG=@profiles.server.debug@
BASEDIR=`dirname $0`/.. BASEDIR=`dirname $0`/..
BASEDIR=`(cd "$BASEDIR"; pwd)` BASEDIR=`(cd "$BASEDIR"; pwd)`
PROJECT_NAME="@project.artifactId@"; PROJECT_NAME="@project.artifactId@";
MAIN_CLASS="$PROJECT_NAME-@project.version@.jar"; MAIN_CLASS="$PROJECT_NAME-@project.version@.jar";
LOG_PATH="@profiles.log.path@/$PROJECT_NAME" LOG_PATH="@profiles.log.path@/$PROJECT_NAME"
GC_PATH=$LOG_PATH/PROJECT_NAME"-gc.log" GC_PATH=$LOG_PATH/$PROJECT_NAME"-gc.log"
HS_ERR_PATH=$LOG_PATH/PROJECT_NAME"-hs_err.log" HS_ERR_PATH=$LOG_PATH/$PROJECT_NAME"-hs_err.log"
HEAP_DUMP_PATH=$LOG_PATH/PROJECT_NAME"-heap_dump.hprof" HEAP_DUMP_PATH=$LOG_PATH/$PROJECT_NAME"-heap_dump.hprof"
TEMP_PATH=$LOG_PATH/temp/ TEMP_PATH=$LOG_PATH/temp/
SUCCESS=0 SUCCESS=0
FAIL=9 FAIL=9
...@@ -32,8 +33,9 @@ if [ -z "$JAVACMD" ] ; then ...@@ -32,8 +33,9 @@ if [ -z "$JAVACMD" ] ; then
JAVACMD="$JAVA_HOME/bin/java" JAVACMD="$JAVA_HOME/bin/java"
fi fi
else else
JAVACMD=`which java` JAVACMD=`which java > /dev/null 2>&1`
echo "Error: JAVA_HOME is $JAVACMD" echo "Error: JAVA_HOME is not defined correctly."
exit $ERR_NO_JAVA
fi fi
fi fi
...@@ -44,7 +46,7 @@ fi ...@@ -44,7 +46,7 @@ fi
if [ -e "$BASEDIR" ] if [ -e "$BASEDIR" ]
then then
JAVA_OPTS="-Xms512M -Xmx1024M -Xss256K -XX:+UseAdaptiveSizePolicy -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:GCTimeRatio=39 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$GC_PATH -XX:+HeapDumpOnOutOfMemoryError -XX:ErrorFile=$HS_ERR_PATH -XX:HeapDumpPath=$HEAP_DUMP_PATH" JAVA_OPTS="-Xms128M -Xmx512M -Xss256K -XX:+UseAdaptiveSizePolicy -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:GCTimeRatio=39 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$GC_PATH -XX:+HeapDumpOnOutOfMemoryError -XX:ErrorFile=$HS_ERR_PATH -XX:HeapDumpPath=$HEAP_DUMP_PATH"
fi fi
CLASSPATH=$CLASSPATH_PREFIX: CLASSPATH=$CLASSPATH_PREFIX:
...@@ -55,12 +57,12 @@ cd "$BASEDIR/boot"; ...@@ -55,12 +57,12 @@ cd "$BASEDIR/boot";
echo "starting application $PROJECT_NAME......" echo "starting application $PROJECT_NAME......"
exec "$JAVACMD" $JAVA_OPTS \ exec "$JAVACMD" $JAVA_OPTS \
$EXTRA_JVM_ARGUMENTS \ $EXTRA_JVM_ARGUMENTS \
$DEBUG \
-Dapp.name="$PROJECT_NAME" \ -Dapp.name="$PROJECT_NAME" \
-Dapp.port="$PORT" \ -Dapp.port="$PORT" \
-Dbasedir="$BASEDIR" \ -Dbasedir="$BASEDIR" \
-Dfile.encoding=utf-8 \
-Djava.io.tmpdir=$TEMP_PATH \ -Djava.io.tmpdir=$TEMP_PATH \
-Dloader.path="file://$BASEDIR/conf,file://$BASEDIR/lib" \
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=41086 \
-jar $MAIN_CLASS \ -jar $MAIN_CLASS \
> /dev/null & > /dev/null &
......
package com.mortals.xhx.busiz.controller; package com.mortals.xhx.busiz.controller;
import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.idempotent.helper.IdempotentHelper; import com.mortals.framework.idempotent.helper.IdempotentHelper;
import com.mortals.xhx.busiz.service.TestIdempotentService; import com.mortals.xhx.busiz.service.TestIdempotentService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -28,6 +29,7 @@ public class TestIdempotentController { ...@@ -28,6 +29,7 @@ public class TestIdempotentController {
* url: localhost:12345/v1/idempotent/test-with-result?source=taobao&operationType=publish_product&businessKey=pd_20230105007&name=lisi * url: localhost:12345/v1/idempotent/test-with-result?source=taobao&operationType=publish_product&businessKey=pd_20230105007&name=lisi
*/ */
@GetMapping("/test-with-result") @GetMapping("/test-with-result")
@UnAuth
public String testWithResult(String source, public String testWithResult(String source,
String operationType, String operationType,
String businessKey, String businessKey,
...@@ -44,6 +46,7 @@ public class TestIdempotentController { ...@@ -44,6 +46,7 @@ public class TestIdempotentController {
* url : localhost:12345/v1/idempotent/test-with-no-result?source=taobao&operationType=publish_product&businessKey=pd_20230105008&name=zhangsan * url : localhost:12345/v1/idempotent/test-with-no-result?source=taobao&operationType=publish_product&businessKey=pd_20230105008&name=zhangsan
*/ */
@GetMapping("/test-with-no-result") @GetMapping("/test-with-no-result")
@UnAuth
public String testWithNoResult(String source, public String testWithNoResult(String source,
String operationType, String operationType,
String businessKey, String businessKey,
......
...@@ -13,11 +13,11 @@ import com.mortals.xhx.module.company.model.vo.CompanyVo; ...@@ -13,11 +13,11 @@ import com.mortals.xhx.module.company.model.vo.CompanyVo;
import com.mortals.xhx.module.company.model.CompanyLabelsEntity; import com.mortals.xhx.module.company.model.CompanyLabelsEntity;
import lombok.Data; import lombok.Data;
/** /**
* 公司实体对象 * 公司实体对象
* *
* @author zxfei * @author zxfei
* @date 2023-09-18 * @date 2024-12-05
*/ */
@Data @Data
public class CompanyEntity extends CompanyVo { public class CompanyEntity extends CompanyVo {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -151,6 +151,10 @@ public class CompanyEntity extends CompanyVo { ...@@ -151,6 +151,10 @@ public class CompanyEntity extends CompanyVo {
* 备注 * 备注
*/ */
private String remark; private String remark;
/**
* 背景图片
*/
private String background;
/** /**
* 公司标注信息 * 公司标注信息
*/ */
...@@ -209,7 +213,8 @@ public class CompanyEntity extends CompanyVo { ...@@ -209,7 +213,8 @@ public class CompanyEntity extends CompanyVo {
this.companyIntroduction = ""; this.companyIntroduction = "";
this.companyCulture = ""; this.companyCulture = "";
this.sort = 0; this.sort = 0;
this.establishDate = new Date(); this.establishDate = null;
this.remark = ""; this.remark = "";
this.background = "";
} }
} }
\ No newline at end of file
...@@ -5,11 +5,11 @@ import java.util.Date; ...@@ -5,11 +5,11 @@ import java.util.Date;
import java.util.List; import java.util.List;
import com.mortals.xhx.module.company.model.CompanyEntity; import com.mortals.xhx.module.company.model.CompanyEntity;
/** /**
* 公司查询对象 * 公司查询对象
* *
* @author zxfei * @author zxfei
* @date 2023-09-18 * @date 2024-12-05
*/ */
public class CompanyQuery extends CompanyEntity { public class CompanyQuery extends CompanyEntity {
/** 开始 主键ID,主键,自增长 */ /** 开始 主键ID,主键,自增长 */
private Long idStart; private Long idStart;
...@@ -269,6 +269,11 @@ public class CompanyQuery extends CompanyEntity { ...@@ -269,6 +269,11 @@ public class CompanyQuery extends CompanyEntity {
/** 结束 更新时间 */ /** 结束 更新时间 */
private String updateTimeEnd; private String updateTimeEnd;
/** 背景图片 */
private List<String> backgroundList;
/** 背景图片排除列表 */
private List <String> backgroundNotList;
/** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */ /** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */
private List<CompanyQuery> orConditionList; private List<CompanyQuery> orConditionList;
...@@ -1804,6 +1809,38 @@ public class CompanyQuery extends CompanyEntity { ...@@ -1804,6 +1809,38 @@ public class CompanyQuery extends CompanyEntity {
this.updateTimeEnd = updateTimeEnd; this.updateTimeEnd = updateTimeEnd;
} }
/**
* 获取 背景图片
* @return backgroundList
*/
public List<String> getBackgroundList(){
return this.backgroundList;
}
/**
* 设置 背景图片
* @param backgroundList
*/
public void setBackgroundList(List<String> backgroundList){
this.backgroundList = backgroundList;
}
/**
* 获取 背景图片
* @return backgroundNotList
*/
public List<String> getBackgroundNotList(){
return this.backgroundNotList;
}
/**
* 设置 背景图片
* @param backgroundNotList
*/
public void setBackgroundNotList(List<String> backgroundNotList){
this.backgroundNotList = backgroundNotList;
}
/** /**
* 设置 主键ID,主键,自增长 * 设置 主键ID,主键,自增长
* @param id * @param id
...@@ -2698,6 +2735,25 @@ public class CompanyQuery extends CompanyEntity { ...@@ -2698,6 +2735,25 @@ public class CompanyQuery extends CompanyEntity {
} }
/**
* 设置 背景图片
* @param background
*/
public CompanyQuery background(String background){
setBackground(background);
return this;
}
/**
* 设置 背景图片
* @param backgroundList
*/
public CompanyQuery backgroundList(List<String> backgroundList){
this.backgroundList = backgroundList;
return this;
}
/** /**
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) * 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList * @return orConditionList
......
...@@ -86,7 +86,34 @@ public class CompanyServiceImpl extends AbstractCRUDServiceImpl<CompanyDao, Comp ...@@ -86,7 +86,34 @@ public class CompanyServiceImpl extends AbstractCRUDServiceImpl<CompanyDao, Comp
@Autowired @Autowired
private LabelsService labelsService; private LabelsService labelsService;
@Override
protected void findAfter(CompanyEntity params,PageInfo pageInfo, Context context, List<CompanyEntity> list) throws AppException {
fillSubData(list);
super.findAfter(params,pageInfo, context, list);
}
@Override
protected void findAfter(CompanyEntity params, Context context, List<CompanyEntity> list) throws AppException {
fillSubData(list);
super.findAfter(params, context, list);
}
private void fillSubData(List<CompanyEntity> list) {
List<Long> idList = list.stream().map(i -> i.getId()).collect(Collectors.toList());
if(ObjectUtils.isEmpty(idList))return;
Map<Long, List<CompanyLabelsEntity>> companyLabelsListMap = companyLabelsService
.find(new CompanyLabelsQuery().companyIdList(idList)).parallelStream()
.collect(Collectors.groupingBy(CompanyLabelsEntity::getCompanyId));
List<CompanyPatentEntity> companyPatentEntities = companyPatentService.find(new CompanyPatentQuery().companyIdList(idList));
Map<Long, List<CompanyPatentEntity>> companyPatentListMap = companyPatentEntities.parallelStream().collect((Collectors.groupingBy(CompanyPatentEntity::getCompanyId)));
list.forEach(item -> {
item.setCompanyLabelsList(companyLabelsListMap.get(item.getId()));
item.setCompanyPatentsList(companyPatentListMap.get(item.getId()));
});
}
/*
@Override @Override
protected void findAfter(CompanyEntity params, PageInfo pageInfo, Context context, List<CompanyEntity> list) throws AppException { protected void findAfter(CompanyEntity params, PageInfo pageInfo, Context context, List<CompanyEntity> list) throws AppException {
...@@ -95,6 +122,7 @@ public class CompanyServiceImpl extends AbstractCRUDServiceImpl<CompanyDao, Comp ...@@ -95,6 +122,7 @@ public class CompanyServiceImpl extends AbstractCRUDServiceImpl<CompanyDao, Comp
item.setCompanyPatentsList(companyPatentEntities); item.setCompanyPatentsList(companyPatentEntities);
}).count(); }).count();
} }
*/
@Override @Override
protected void saveAfter(CompanyEntity entity, Context context) throws AppException { protected void saveAfter(CompanyEntity entity, Context context) throws AppException {
......
...@@ -7,8 +7,7 @@ import com.mortals.framework.exception.AppException; ...@@ -7,8 +7,7 @@ import com.mortals.framework.exception.AppException;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService; import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.common.code.YesNoEnum; import com.mortals.xhx.common.code.YesNoEnum;
import com.mortals.xhx.module.company.model.CompanyPatentEntity; import com.mortals.xhx.module.company.model.*;
import com.mortals.xhx.module.company.model.CompanyPatentQuery;
import com.mortals.xhx.module.company.model.vo.HomeStatInfo; import com.mortals.xhx.module.company.model.vo.HomeStatInfo;
import com.mortals.xhx.module.company.service.CompanyLabelsService; import com.mortals.xhx.module.company.service.CompanyLabelsService;
import com.mortals.xhx.module.company.service.CompanyPatentService; import com.mortals.xhx.module.company.service.CompanyPatentService;
...@@ -26,7 +25,6 @@ import javax.servlet.http.HttpServletRequest; ...@@ -26,7 +25,6 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.module.company.model.CompanyEntity;
import com.mortals.xhx.module.company.service.CompanyService; import com.mortals.xhx.module.company.service.CompanyService;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import com.mortals.framework.util.StringUtils; import com.mortals.framework.util.StringUtils;
...@@ -62,6 +60,9 @@ public class CompanyController extends BaseCRUDJsonBodyMappingController<Company ...@@ -62,6 +60,9 @@ public class CompanyController extends BaseCRUDJsonBodyMappingController<Company
private LabelsService labelsService; private LabelsService labelsService;
@Autowired @Autowired
private CompanyPatentService companyPatentService; private CompanyPatentService companyPatentService;
@Autowired
private CompanyLabelsService companyLabelsService;
public CompanyController() { public CompanyController() {
...@@ -84,6 +85,10 @@ public class CompanyController extends BaseCRUDJsonBodyMappingController<Company ...@@ -84,6 +85,10 @@ public class CompanyController extends BaseCRUDJsonBodyMappingController<Company
protected int editAfter(Long id, Map<String, Object> model, CompanyEntity entity, Context context) throws AppException { protected int editAfter(Long id, Map<String, Object> model, CompanyEntity entity, Context context) throws AppException {
List<CompanyPatentEntity> companyPatentEntities = companyPatentService.find(new CompanyPatentQuery().companyId(entity.getId())); List<CompanyPatentEntity> companyPatentEntities = companyPatentService.find(new CompanyPatentQuery().companyId(entity.getId()));
List<CompanyLabelsEntity> companyLabelsEntities = companyLabelsService.find(new CompanyLabelsQuery().companyId(entity.getId()));
entity.setCompanyLabelsList(companyLabelsEntities);
entity.setCompanyPatentsList(companyPatentEntities); entity.setCompanyPatentsList(companyPatentEntities);
...@@ -95,6 +100,8 @@ public class CompanyController extends BaseCRUDJsonBodyMappingController<Company ...@@ -95,6 +100,8 @@ public class CompanyController extends BaseCRUDJsonBodyMappingController<Company
protected int viewAfter(Long id, Map<String, Object> model, CompanyEntity entity, Context context) throws AppException { protected int viewAfter(Long id, Map<String, Object> model, CompanyEntity entity, Context context) throws AppException {
List<CompanyPatentEntity> companyPatentEntities = companyPatentService.find(new CompanyPatentQuery().companyId(entity.getId())); List<CompanyPatentEntity> companyPatentEntities = companyPatentService.find(new CompanyPatentQuery().companyId(entity.getId()));
List<CompanyLabelsEntity> companyLabelsEntities = companyLabelsService.find(new CompanyLabelsQuery().companyId(entity.getId()));
entity.setCompanyLabelsList(companyLabelsEntities);
entity.setCompanyPatentsList(companyPatentEntities); entity.setCompanyPatentsList(companyPatentEntities);
return super.viewAfter(id, model, entity, context); return super.viewAfter(id, model, entity, context);
......
...@@ -54,7 +54,7 @@ public class NewsServiceImpl extends AbstractCRUDServiceImpl<NewsDao, NewsEntity ...@@ -54,7 +54,7 @@ public class NewsServiceImpl extends AbstractCRUDServiceImpl<NewsDao, NewsEntity
List<NewsUpEntity> upList = newsUpService.find(new NewsUpQuery().newsIdList(newsIdList).upId(context.getUser().getId())); List<NewsUpEntity> upList = newsUpService.find(new NewsUpQuery().newsIdList(newsIdList).upId(context.getUser().getId()));
Map<Long,NewsUpEntity> upMap = new HashMap<>(); Map<Long,NewsUpEntity> upMap = new HashMap<>();
if(CollectionUtils.isNotEmpty(upList)){ if(CollectionUtils.isNotEmpty(upList)){
upMap = upList.parallelStream().collect(Collectors.toMap(x -> x.getId(), z -> z, (o, n) -> n)); upMap = upList.parallelStream().collect(Collectors.toMap(x -> x.getNewsId(), z -> z, (o, n) -> n));
} }
List<NewsShareEntity> shareList = newsShareService.find(new NewsShareQuery().newsIdList(newsIdList).createUserId(context.getUser().getId())); List<NewsShareEntity> shareList = newsShareService.find(new NewsShareQuery().newsIdList(newsIdList).createUserId(context.getUser().getId()));
Map<Long,NewsShareEntity> shareMap = new HashMap<>(); Map<Long,NewsShareEntity> shareMap = new HashMap<>();
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd"> "mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.module.company.dao.ibatis.CompanyDaoImpl"> <mapper namespace="com.mortals.xhx.module.company.dao.ibatis.CompanyDaoImpl">
<!-- 字段和属性映射 --> <!-- 字段和属性映射 -->
...@@ -42,20 +42,8 @@ ...@@ -42,20 +42,8 @@
<result property="createTime" column="createTime" /> <result property="createTime" column="createTime" />
<result property="updateUserId" column="updateUserId" /> <result property="updateUserId" column="updateUserId" />
<result property="updateTime" column="updateTime" /> <result property="updateTime" column="updateTime" />
<collection property="companyLabelsList" column="id" ofType="CompanyLabelsEntity" javaType="ArrayList" select="getCompanyLabelsByCompanyId"></collection> <result property="background" column="background" />
</resultMap> </resultMap>
<resultMap type="CompanyLabelsEntity" id="CompanyLabelsEntity-Map">
<result property="id" column="id" />
<result property="labelId" column="labelId" />
<result property="companyId" column="companyId" />
<result property="labelName" column="labelName" />
<result property="remark" column="remark" />
<result property="createUserId" column="createUserId" />
<result property="createTime" column="createTime" />
<result property="updateUserId" column="updateUserId" />
<result property="updateTime" column="updateTime" />
</resultMap>
<!-- 表所有列 --> <!-- 表所有列 -->
<sql id="_columns"> <sql id="_columns">
...@@ -171,29 +159,32 @@ ...@@ -171,29 +159,32 @@
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('updateTime') or colPickMode == 1 and data.containsKey('updateTime')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('updateTime') or colPickMode == 1 and data.containsKey('updateTime')))">
a.updateTime, a.updateTime,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('background') or colPickMode == 1 and data.containsKey('background')))">
a.background,
</if>
</trim> </trim>
</sql> </sql>
<!-- 子表所有列 --> <!-- 子表所有列 -->
<sql id="_columns_sub"> <sql id="_columns_sub">
<trim suffixOverrides="," suffix=""> <trim suffixOverrides="," suffix="">
b.id,b.labelId,b.companyId,b.labelName,b.remark,b.createUserId,b.createTime,b.updateUserId,b.updateTime, b.id,b.labelId,b.labelName,b.companyId,b.companyName,b.remark,b.createUserId,b.createTime,b.updateUserId,b.updateTime,
</trim> </trim>
</sql> </sql>
<!-- 新增 区分主键自增加还是业务插入 --> <!-- 新增 区分主键自增加还是业务插入 -->
<insert id="insert" parameterType="CompanyEntity" useGeneratedKeys="true" keyProperty="id"> <insert id="insert" parameterType="CompanyEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_xhx_company insert into mortals_xhx_company
(companyName,companyCode,registrationNumber,legalRepresentative,registeredCapital,companyType,businessScope,businessAdress,location,areaCode,areaName,contactPhone,email,website,taxRegistrationNumber,socialCreditCode,trademarkInfo,websiteRegistrationInfo,totalEmployees,softNum,patentNum,hisDevelop,lon,lati,logoPath,companyVideoPath,companyPicPath,companyIntroduction,companyCulture,sort,establishDate,remark,createUserId,createTime,updateUserId,updateTime) (companyName,companyCode,registrationNumber,legalRepresentative,registeredCapital,companyType,businessScope,businessAdress,location,areaCode,areaName,contactPhone,email,website,taxRegistrationNumber,socialCreditCode,trademarkInfo,websiteRegistrationInfo,totalEmployees,softNum,patentNum,hisDevelop,lon,lati,logoPath,companyVideoPath,companyPicPath,companyIntroduction,companyCulture,sort,establishDate,remark,createUserId,createTime,updateUserId,updateTime,background)
VALUES VALUES
(#{companyName},#{companyCode},#{registrationNumber},#{legalRepresentative},#{registeredCapital},#{companyType},#{businessScope},#{businessAdress},#{location},#{areaCode},#{areaName},#{contactPhone},#{email},#{website},#{taxRegistrationNumber},#{socialCreditCode},#{trademarkInfo},#{websiteRegistrationInfo},#{totalEmployees},#{softNum},#{patentNum},#{hisDevelop},#{lon},#{lati},#{logoPath},#{companyVideoPath},#{companyPicPath},#{companyIntroduction},#{companyCulture},#{sort},#{establishDate},#{remark},#{createUserId},#{createTime},#{updateUserId},#{updateTime}) (#{companyName},#{companyCode},#{registrationNumber},#{legalRepresentative},#{registeredCapital},#{companyType},#{businessScope},#{businessAdress},#{location},#{areaCode},#{areaName},#{contactPhone},#{email},#{website},#{taxRegistrationNumber},#{socialCreditCode},#{trademarkInfo},#{websiteRegistrationInfo},#{totalEmployees},#{softNum},#{patentNum},#{hisDevelop},#{lon},#{lati},#{logoPath},#{companyVideoPath},#{companyPicPath},#{companyIntroduction},#{companyCulture},#{sort},#{establishDate},#{remark},#{createUserId},#{createTime},#{updateUserId},#{updateTime},#{background})
</insert> </insert>
<!-- 批量新增 --> <!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto"> <insert id="insertBatch" parameterType="paramDto">
insert into mortals_xhx_company insert into mortals_xhx_company
(companyName,companyCode,registrationNumber,legalRepresentative,registeredCapital,companyType,businessScope,businessAdress,location,areaCode,areaName,contactPhone,email,website,taxRegistrationNumber,socialCreditCode,trademarkInfo,websiteRegistrationInfo,totalEmployees,softNum,patentNum,hisDevelop,lon,lati,logoPath,companyVideoPath,companyPicPath,companyIntroduction,companyCulture,sort,establishDate,remark,createUserId,createTime,updateUserId,updateTime) (companyName,companyCode,registrationNumber,legalRepresentative,registeredCapital,companyType,businessScope,businessAdress,location,areaCode,areaName,contactPhone,email,website,taxRegistrationNumber,socialCreditCode,trademarkInfo,websiteRegistrationInfo,totalEmployees,softNum,patentNum,hisDevelop,lon,lati,logoPath,companyVideoPath,companyPicPath,companyIntroduction,companyCulture,sort,establishDate,remark,createUserId,createTime,updateUserId,updateTime,background)
VALUES VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," > <foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.companyName},#{item.companyCode},#{item.registrationNumber},#{item.legalRepresentative},#{item.registeredCapital},#{item.companyType},#{item.businessScope},#{item.businessAdress},#{item.location},#{item.areaCode},#{item.areaName},#{item.contactPhone},#{item.email},#{item.website},#{item.taxRegistrationNumber},#{item.socialCreditCode},#{item.trademarkInfo},#{item.websiteRegistrationInfo},#{item.totalEmployees},#{item.softNum},#{item.patentNum},#{item.hisDevelop},#{item.lon},#{item.lati},#{item.logoPath},#{item.companyVideoPath},#{item.companyPicPath},#{item.companyIntroduction},#{item.companyCulture},#{item.sort},#{item.establishDate},#{item.remark},#{item.createUserId},#{item.createTime},#{item.updateUserId},#{item.updateTime}) (#{item.companyName},#{item.companyCode},#{item.registrationNumber},#{item.legalRepresentative},#{item.registeredCapital},#{item.companyType},#{item.businessScope},#{item.businessAdress},#{item.location},#{item.areaCode},#{item.areaName},#{item.contactPhone},#{item.email},#{item.website},#{item.taxRegistrationNumber},#{item.socialCreditCode},#{item.trademarkInfo},#{item.websiteRegistrationInfo},#{item.totalEmployees},#{item.softNum},#{item.patentNum},#{item.hisDevelop},#{item.lon},#{item.lati},#{item.logoPath},#{item.companyVideoPath},#{item.companyPicPath},#{item.companyIntroduction},#{item.companyCulture},#{item.sort},#{item.establishDate},#{item.remark},#{item.createUserId},#{item.createTime},#{item.updateUserId},#{item.updateTime},#{item.background})
</foreach> </foreach>
</insert> </insert>
...@@ -329,6 +320,9 @@ ...@@ -329,6 +320,9 @@
<if test="(colPickMode==0 and data.containsKey('updateTime')) or (colPickMode==1 and !data.containsKey('updateTime'))"> <if test="(colPickMode==0 and data.containsKey('updateTime')) or (colPickMode==1 and !data.containsKey('updateTime'))">
a.updateTime=#{data.updateTime}, a.updateTime=#{data.updateTime},
</if> </if>
<if test="(colPickMode==0 and data.containsKey('background')) or (colPickMode==1 and !data.containsKey('background'))">
a.background=#{data.background},
</if>
</trim> </trim>
<trim suffixOverrides="where" suffix=""> <trim suffixOverrides="where" suffix="">
where where
...@@ -623,6 +617,13 @@ ...@@ -623,6 +617,13 @@
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="background=(case" suffix="ELSE background end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('background')) or (colPickMode==1 and !item.containsKey('background'))">
when a.id=#{item.id} then #{item.background}
</if>
</foreach>
</trim>
</trim> </trim>
where id in where id in
<foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")"> <foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")">
...@@ -684,13 +685,6 @@ ...@@ -684,13 +685,6 @@
<include refid="_orderCols_"/> <include refid="_orderCols_"/>
</select> </select>
<!-- 获取子列表 --> <!-- 获取子列表 -->
<select id="getCompanyLabelsByCompanyId" parameterType="java.lang.Long" resultMap="CompanyLabelsEntity-Map">
select <include refid="_columns_sub"/>
from mortals_xhx_company_labels as b
<trim suffixOverrides="where" suffix="">
where b.companyId = #{id}
</trim>
</select>
...@@ -742,6 +736,10 @@ ...@@ -742,6 +736,10 @@
<!-- 条件映射-代参数 --> <!-- 条件映射-代参数 -->
<sql id="_condition_param_"> <sql id="_condition_param_">
<bind name="conditionParamRef" value="${_conditionParam_}"/> <bind name="conditionParamRef" value="${_conditionParam_}"/>
<if test="permissionSql != null and permissionSql != ''">
${permissionSql}
</if>
<if test="conditionParamRef.containsKey('id')"> <if test="conditionParamRef.containsKey('id')">
<if test="conditionParamRef.id != null"> <if test="conditionParamRef.id != null">
${_conditionType_} a.id=#{${_conditionParam_}.id} ${_conditionType_} a.id=#{${_conditionParam_}.id}
...@@ -1548,18 +1546,137 @@ ...@@ -1548,18 +1546,137 @@
<if test="conditionParamRef.containsKey('updateTimeEnd') and conditionParamRef.updateTimeEnd != null and conditionParamRef.updateTimeEnd!=''"> <if test="conditionParamRef.containsKey('updateTimeEnd') and conditionParamRef.updateTimeEnd != null and conditionParamRef.updateTimeEnd!=''">
${_conditionType_} a.updateTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.updateTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s') ${_conditionType_} a.updateTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.updateTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
</if> </if>
<if test="conditionParamRef.containsKey('background')">
<if test="conditionParamRef.background != null and conditionParamRef.background != ''">
${_conditionType_} a.background like #{${_conditionParam_}.background}
</if>
<if test="conditionParamRef.background == null">
${_conditionType_} a.background is null
</if>
</if>
<if test="conditionParamRef.containsKey('backgroundList') and conditionParamRef.backgroundList.size() > 0">
${_conditionType_} a.background in
<foreach collection="conditionParamRef.backgroundList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('backgroundNotList') and conditionParamRef.backgroundNotList.size() > 0">
${_conditionType_} a.background not in
<foreach collection="conditionParamRef.backgroundNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
</sql> </sql>
<sql id="_orderCols_"> <sql id="_orderCols_">
<if test="orderColList != null and !orderColList.isEmpty()"> <if test="orderColList != null and !orderColList.isEmpty()">
order by order by
<if test="conditionParamRef.containsKey('idList') and conditionParamRef.idList.size() > 0">
field(a.id,
<foreach collection="conditionParamRef.idList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('totalEmployeesList') and conditionParamRef.totalEmployeesList.size() > 0">
field(a.totalEmployees,
<foreach collection="conditionParamRef.totalEmployeesList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('softNumList') and conditionParamRef.softNumList.size() > 0">
field(a.softNum,
<foreach collection="conditionParamRef.softNumList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('patentNumList') and conditionParamRef.patentNumList.size() > 0">
field(a.patentNum,
<foreach collection="conditionParamRef.patentNumList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('sortList') and conditionParamRef.sortList.size() > 0">
field(a.sort,
<foreach collection="conditionParamRef.sortList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('createUserIdList') and conditionParamRef.createUserIdList.size() > 0">
field(a.createUserId,
<foreach collection="conditionParamRef.createUserIdList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('updateUserIdList') and conditionParamRef.updateUserIdList.size() > 0">
field(a.updateUserId,
<foreach collection="conditionParamRef.updateUserIdList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<trim suffixOverrides="," suffix=""> <trim suffixOverrides="," suffix="">
<foreach collection="orderColList" open="" close="" index="index" item="item" separator=","> <foreach collection="orderColList" open="" close="" index="index" item="item" separator=",">
${item.colName} ${item.sortKind} a.${item.colName} ${item.sortKind}
</foreach> </foreach>
</trim> </trim>
</if> </if>
<if test="(orderColList == null or orderColList.isEmpty()) and orderCol != null and !orderCol.isEmpty()"> <if test="(orderColList == null or orderColList.isEmpty()) and orderCol != null and !orderCol.isEmpty()">
order by order by
<if test="conditionParamRef.containsKey('idList') and conditionParamRef.idList.size() > 0">
field(a.id,
<foreach collection="conditionParamRef.idList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('totalEmployeesList') and conditionParamRef.totalEmployeesList.size() > 0">
field(a.totalEmployees,
<foreach collection="conditionParamRef.totalEmployeesList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('softNumList') and conditionParamRef.softNumList.size() > 0">
field(a.softNum,
<foreach collection="conditionParamRef.softNumList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('patentNumList') and conditionParamRef.patentNumList.size() > 0">
field(a.patentNum,
<foreach collection="conditionParamRef.patentNumList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('sortList') and conditionParamRef.sortList.size() > 0">
field(a.sort,
<foreach collection="conditionParamRef.sortList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('createUserIdList') and conditionParamRef.createUserIdList.size() > 0">
field(a.createUserId,
<foreach collection="conditionParamRef.createUserIdList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('updateUserIdList') and conditionParamRef.updateUserIdList.size() > 0">
field(a.updateUserId,
<foreach collection="conditionParamRef.updateUserIdList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<trim suffixOverrides="," suffix=""> <trim suffixOverrides="," suffix="">
<if test="orderCol.containsKey('id')"> <if test="orderCol.containsKey('id')">
a.id a.id
...@@ -1746,8 +1863,15 @@ ...@@ -1746,8 +1863,15 @@
<if test='orderCol.updateTime != null and "DESC".equalsIgnoreCase(orderCol.updateTime)'>DESC</if> <if test='orderCol.updateTime != null and "DESC".equalsIgnoreCase(orderCol.updateTime)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('background')">
a.background
<if test='orderCol.background != null and "DESC".equalsIgnoreCase(orderCol.background)'>DESC</if>
,
</if>
</trim> </trim>
</if> </if>
</sql> </sql>
<sql id="_group_by_"> <sql id="_group_by_">
<if test="groupList != null and !groupList.isEmpty()"> <if test="groupList != null and !groupList.isEmpty()">
......
...@@ -14,10 +14,11 @@ client.global.set("authToken", JSON.parse(response.body).data.token); ...@@ -14,10 +14,11 @@ client.global.set("authToken", JSON.parse(response.body).data.token);
%} %}
###公司列表 ###公司列表
POST {{baseUrl}}/company/list POST {{baseUrl}}/company/interlist
Content-Type: application/json Content-Type: application/json
{ {
"id": 5,
"page":1, "page":1,
"size":10 "size":10
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment