wanghongzhi 1 anno fa
parent
commit
e89dfc4f3e

+ 6 - 0
pom.xml

@@ -65,6 +65,12 @@
 			<artifactId>easyexcel</artifactId>
 			<version>2.2.11</version>
 		</dependency>
+
+		<dependency>
+			<groupId>com.qdport</groupId>
+			<artifactId>qdport-starter-user-syn</artifactId>
+			<version>1.1-SNAPSHOT</version>
+		</dependency>
 	</dependencies>
 	<dependencyManagement>
 		<dependencies>

+ 0 - 168
script/db/boot/oracle/BOOT_ORACLE_TABLE.sql

@@ -5055,189 +5055,3 @@ comment on column ACT_DE_MODEL_HISTORY.TENANT_ID is '租户id'
 comment on column ACT_DE_MODEL_HISTORY.ICON is '图标'
 ;
 
-
-CREATE TABLE "POLICY_FILE" (
-  "ID" NUMBER(20,0) VISIBLE NOT NULL,
-  "FILE_NAME" VARCHAR2(100 BYTE) VISIBLE,
-  "FILE_TYPE" VARCHAR2(100 BYTE) VISIBLE,
-  "FILE_DOMAIN" VARCHAR2(200 BYTE) VISIBLE,
-  "ORIGINAL_NAME" VARCHAR2(200 BYTE) VISIBLE,
-  "CREATE_TIME" DATE VISIBLE,
-  "REF_ID" NUMBER(20,0) VISIBLE,
-  "REF_TYPE" VARCHAR2(100 BYTE) VISIBLE
-)
-LOGGING
-NOCOMPRESS
-PCTFREE 10
-INITRANS 1
-STORAGE (
-  INITIAL 65536
-  NEXT 1048576
-  MINEXTENTS 1
-  MAXEXTENTS 2147483645
-  BUFFER_POOL DEFAULT
-)
-PARALLEL 1
-NOCACHE
-DISABLE ROW MOVEMENT
-;
-COMMENT ON COLUMN "POLICY_FILE"."ID" IS 'id';
-COMMENT ON COLUMN "POLICY_FILE"."FILE_NAME" IS '文件名称';
-COMMENT ON COLUMN "POLICY_FILE"."FILE_TYPE" IS '文件类型';
-COMMENT ON COLUMN "POLICY_FILE"."FILE_DOMAIN" IS '文件地址前缀';
-COMMENT ON COLUMN "POLICY_FILE"."ORIGINAL_NAME" IS '文件地址后缀';
-COMMENT ON COLUMN "POLICY_FILE"."CREATE_TIME" IS '创建时间';
-COMMENT ON COLUMN "POLICY_FILE"."REF_ID" IS '关联id';
-COMMENT ON COLUMN "POLICY_FILE"."REF_TYPE" IS '关联类型';
-
-ALTER TABLE "POLICY_FILE" ADD CONSTRAINT "SYS_C008673" PRIMARY KEY ("ID");
-
-ALTER TABLE "POLICY_FILE" ADD CONSTRAINT "SYS_C008672" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-
-CREATE TABLE "POLICY_FLOW_NO" (
-  "TYPE" VARCHAR2(50 BYTE) VISIBLE,
-  "PREFIX" VARCHAR2(10 BYTE) VISIBLE,
-  "CURR_DATE" VARCHAR2(10 BYTE) VISIBLE,
-  "CURR_NO" VARCHAR2(50 BYTE) VISIBLE,
-  "CURR_SEQ" NUMBER(6,0) VISIBLE
-)
-LOGGING
-NOCOMPRESS
-PCTFREE 10
-INITRANS 1
-STORAGE (
-  INITIAL 65536
-  NEXT 1048576
-  MINEXTENTS 1
-  MAXEXTENTS 2147483645
-  BUFFER_POOL DEFAULT
-)
-PARALLEL 1
-NOCACHE
-DISABLE ROW MOVEMENT
-;
-
-CREATE TABLE "POLICY_SHARE" (
-  "ID" NUMBER(20,0) VISIBLE NOT NULL,
-  "BUSINESS_NO" VARCHAR2(100 BYTE) VISIBLE,
-  "STATUS" VARCHAR2(10 BYTE) VISIBLE,
-  "NAME" VARCHAR2(100 BYTE) VISIBLE,
-  "ABSTRACT_CONTENT" VARCHAR2(500 BYTE) VISIBLE,
-  "ZC_LEVEL" VARCHAR2(10 BYTE) VISIBLE,
-  "ZC_TYPE" VARCHAR2(20 BYTE) VISIBLE,
-  "CREATE_ID" NUMBER VISIBLE,
-  "CREATE_NAME" VARCHAR2(20 BYTE) VISIBLE,
-  "CONTACT_PHONE" VARCHAR2(20 BYTE) VISIBLE,
-  "CREATE_TIME" DATE VISIBLE,
-  "SCORE" NUMBER(6,2) VISIBLE,
-  "IS_IN_WH" NUMBER(1,0) VISIBLE DEFAULT 0,
-  "IN_WH_TYPE" VARCHAR2(20 BYTE) VISIBLE,
-  "DOC_NO" VARCHAR2(50 BYTE) VISIBLE,
-  "UPDATE_TIME" DATE VISIBLE,
-  "UPDATE_ID" NUMBER VISIBLE
-)
-LOGGING
-NOCOMPRESS
-PCTFREE 10
-INITRANS 1
-STORAGE (
-  INITIAL 65536
-  NEXT 1048576
-  MINEXTENTS 1
-  MAXEXTENTS 2147483645
-  BUFFER_POOL DEFAULT
-)
-PARALLEL 1
-NOCACHE
-DISABLE ROW MOVEMENT
-;
-COMMENT ON COLUMN "POLICY_SHARE"."ID" IS 'id';
-COMMENT ON COLUMN "POLICY_SHARE"."BUSINESS_NO" IS '政策分享编号';
-COMMENT ON COLUMN "POLICY_SHARE"."STATUS" IS '状态';
-COMMENT ON COLUMN "POLICY_SHARE"."NAME" IS '政策名称';
-COMMENT ON COLUMN "POLICY_SHARE"."ABSTRACT_CONTENT" IS '政策概要';
-COMMENT ON COLUMN "POLICY_SHARE"."ZC_LEVEL" IS '政策等级';
-COMMENT ON COLUMN "POLICY_SHARE"."ZC_TYPE" IS '政策类别';
-COMMENT ON COLUMN "POLICY_SHARE"."CREATE_ID" IS '填报人id';
-COMMENT ON COLUMN "POLICY_SHARE"."CREATE_NAME" IS '填报人';
-COMMENT ON COLUMN "POLICY_SHARE"."CONTACT_PHONE" IS '联系方式';
-COMMENT ON COLUMN "POLICY_SHARE"."CREATE_TIME" IS '创建时间';
-COMMENT ON COLUMN "POLICY_SHARE"."SCORE" IS '考核得分';
-COMMENT ON COLUMN "POLICY_SHARE"."IS_IN_WH" IS '是否入库(0:否,1:是)';
-COMMENT ON COLUMN "POLICY_SHARE"."IN_WH_TYPE" IS '入库类别';
-COMMENT ON COLUMN "POLICY_SHARE"."DOC_NO" IS '政策文号';
-COMMENT ON COLUMN "POLICY_SHARE"."UPDATE_TIME" IS '修改时间';
-COMMENT ON COLUMN "POLICY_SHARE"."UPDATE_ID" IS '修改人id';
-COMMENT ON TABLE "POLICY_SHARE" IS '政策共享';
-
-ALTER TABLE "POLICY_SHARE" ADD CONSTRAINT "SYS_C008596" PRIMARY KEY ("ID");
-
-ALTER TABLE "POLICY_SHARE" ADD CONSTRAINT "SYS_C008595" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-
-CREATE TABLE "POLICY_TODO" (
-  "ID" NUMBER(20,0) VISIBLE NOT NULL,
-  "REF_ID" NUMBER(20,0) VISIBLE,
-  "REF_TYPE" VARCHAR2(100 BYTE) VISIBLE,
-  "CREATE_TIME" DATE VISIBLE,
-  "TODO_USER_ID" NUMBER(20,0) VISIBLE,
-  "STATUS" VARCHAR2(20 BYTE) VISIBLE,
-  "TODO_TYPE" VARCHAR2(50 BYTE) VISIBLE,
-  "ZC_NAME" VARCHAR2(100 BYTE) VISIBLE,
-  "ZC_ABSTRACT_CONTENT" VARCHAR2(500 BYTE) VISIBLE,
-  "ZC_TYPE" VARCHAR2(20 BYTE) VISIBLE,
-  "ZC_CREATE_ID" NUMBER VISIBLE,
-  "ZC_CREATE_NAME" VARCHAR2(20 BYTE) VISIBLE,
-  "ZC_CONTACT_PHONE" VARCHAR2(20 BYTE) VISIBLE,
-  "ZC_CREATE_TIME" DATE VISIBLE
-)
-LOGGING
-NOCOMPRESS
-PCTFREE 10
-INITRANS 1
-STORAGE (
-  INITIAL 65536
-  NEXT 1048576
-  MINEXTENTS 1
-  MAXEXTENTS 2147483645
-  BUFFER_POOL DEFAULT
-)
-PARALLEL 1
-NOCACHE
-DISABLE ROW MOVEMENT
-;
-COMMENT ON COLUMN "POLICY_TODO"."ID" IS 'id';
-COMMENT ON COLUMN "POLICY_TODO"."REF_ID" IS '关联id';
-COMMENT ON COLUMN "POLICY_TODO"."REF_TYPE" IS '关联类型';
-COMMENT ON COLUMN "POLICY_TODO"."CREATE_TIME" IS '创建时间';
-COMMENT ON COLUMN "POLICY_TODO"."TODO_USER_ID" IS '待办处理人id';
-COMMENT ON COLUMN "POLICY_TODO"."STATUS" IS '状态';
-COMMENT ON COLUMN "POLICY_TODO"."TODO_TYPE" IS '待办类型';
-COMMENT ON COLUMN "POLICY_TODO"."ZC_NAME" IS '政策名称';
-COMMENT ON COLUMN "POLICY_TODO"."ZC_ABSTRACT_CONTENT" IS '政策概要';
-COMMENT ON COLUMN "POLICY_TODO"."ZC_TYPE" IS '政策类别';
-COMMENT ON COLUMN "POLICY_TODO"."ZC_CREATE_ID" IS '填报人id';
-COMMENT ON COLUMN "POLICY_TODO"."ZC_CREATE_NAME" IS '填报人';
-COMMENT ON COLUMN "POLICY_TODO"."ZC_CONTACT_PHONE" IS '联系方式';
-COMMENT ON COLUMN "POLICY_TODO"."ZC_CREATE_TIME" IS '创建时间';
-
-ALTER TABLE "POLICY_TODO" ADD CONSTRAINT "SYS_C008699" PRIMARY KEY ("ID");
-
-ALTER TABLE "POLICY_TODO" ADD CONSTRAINT "SYS_C008698" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;

+ 22 - 22
src/main/java/com/qdport/controller/ImportDataController.java

@@ -45,14 +45,14 @@ public class ImportDataController {
     private TSysUserService sysUserService;
     @Resource
     private PolicySystemService policySystemService;
-    private final static String errorMsg_null = "excel中缺失有效数据";
-    private final static String errorMsg_hang = "该行数据存在必填字段未输入";
-    private final static String errorMsg_docNo = "政策文号已经存在,请勿重复填写";
-    private final static String errorMsg_docNo_2 = "政策文号填写错误,查不到对应的政策分享数据";
-    private final static String errorMsg_createName = "填报人或者填报人联系方式填写错误";
-    private final static String errorMsg_yjTime = "预计完成时间格式填写错误";
-    private final static String errorMsg_sjTime = "实际完成时间格式填写错误";
-    private final static String errorMsg_businessNo = "项目编号填写错误,查不到对应的政策争取";
+    public final static String ERRORMSG_NULL = "excel中缺失有效数据";
+    public final static String ERRORMSG_HANG = "该行数据存在必填字段未输入";
+    public final static String ERRORMSG_DOCNO = "政策文号已经存在,请勿重复填写";
+    public final static String ERRORMSG_DOCNO_2 = "政策文号填写错误,查不到对应的政策分享数据";
+    public final static String ERRORMSG_CREATENAME = "填报人或者填报人联系方式填写错误";
+    public final static String ERRORMSG_YJTIME = "预计完成时间格式填写错误";
+    public final static String ERRORMSG_SJTIME = "实际完成时间格式填写错误";
+    public final static String ERRORMSG_BUSINESSNO = "项目编号填写错误,查不到对应的政策争取";
 
 
     @PostMapping("/policyShare")
@@ -63,14 +63,14 @@ public class ImportDataController {
         List<PolicyShareExcelVO> list = ExcelUtil.readPolicyShareFromXls(byteFromUrl);
 
         if (list.isEmpty()) {
-            throw new Exception(errorMsg_null);
+            throw new Exception(ERRORMSG_NULL);
         }
         list = list.stream().filter(model -> StringUtil.isNotEmpty(model.getIndex())).collect(Collectors.toList());
         List<PolicyShareExcelVO> excelVOList = new ArrayList<>();
         for (PolicyShareExcelVO model : list) {
             try {
                 if (!StringUtil.checkFieldsNotEmpty(model)) {
-                    throw new Exception(errorMsg_hang);
+                    throw new Exception(ERRORMSG_HANG);
                 }
 
                 PolicyShareVO shareVO = new PolicyShareVO();
@@ -82,14 +82,14 @@ public class ImportDataController {
                 wrapper.eq("DOC_NO", model.getDocNo());
                 long count = policyShareService.count(wrapper);
                 if (count > 0) {
-                    throw new Exception(errorMsg_docNo);
+                    throw new Exception(ERRORMSG_DOCNO);
                 }
                 QueryWrapper<SysUser> userWrapper = new QueryWrapper<>();
                 userWrapper.eq("MOBILE", model.getContactPhone());
                 userWrapper.eq("NAME", model.getCreateName());
                 SysUser createUser = sysUserService.getOne(userWrapper);
                 if (StringUtil.isEmpty(createUser.getId())) {
-                    throw new Exception(errorMsg_createName);
+                    throw new Exception(ERRORMSG_CREATENAME);
                 }
                 shareVO.setCreateId(Long.valueOf(createUser.getId()));
                 shareVO.setUpdateId(Long.valueOf(createUser.getId()));
@@ -120,14 +120,14 @@ public class ImportDataController {
         List<PolicyStriveExcelVO> list = ExcelUtil.readPolicyStriveFromXls(byteFromUrl);
 
         if (list.isEmpty()) {
-            throw new Exception(errorMsg_null);
+            throw new Exception(ERRORMSG_NULL);
         }
         list = list.stream().filter(model -> StringUtil.isNotEmpty(model.getIndex())).collect(Collectors.toList());
         List<PolicyStriveExcelVO> excelVOList = new ArrayList<>();
         for (PolicyStriveExcelVO model : list) {
             try {
                 if(!StringUtil.checkFieldsNotEmpty(model)){
-                    throw new Exception(errorMsg_hang);
+                    throw new Exception(ERRORMSG_HANG);
                 }
 
                 PolicyStriveVO striveVO = new PolicyStriveVO();
@@ -137,7 +137,7 @@ public class ImportDataController {
                     Date yjFinishTime = DateUtil.parse(model.getYjFinishTime(), DateUtil.PATTERN_DATE);
                     striveVO.setYjFinishTime(yjFinishTime);
                 } catch (RuntimeException re) {
-                    throw new Exception(errorMsg_yjTime);
+                    throw new Exception(ERRORMSG_YJTIME);
                 }
 
 
@@ -147,7 +147,7 @@ public class ImportDataController {
                 wrapper.eq("DOC_NO", model.getDocNo());
                 long count = policyShareService.count(wrapper);
                 if (count == 0) {
-                    throw new Exception(errorMsg_docNo_2);
+                    throw new Exception(ERRORMSG_DOCNO_2);
                 }
 
                 QueryWrapper<SysUser> userWrapper = new QueryWrapper<>();
@@ -155,7 +155,7 @@ public class ImportDataController {
                 userWrapper.eq("NAME", model.getCreateName());
                 SysUser createUser = sysUserService.getOne(userWrapper);
                 if (StringUtil.isEmpty(createUser.getId())) {
-                    throw new Exception(errorMsg_createName);
+                    throw new Exception(ERRORMSG_CREATENAME);
                 }
                 striveVO.setCreateId(Long.valueOf(createUser.getId()));
                 striveVO.setUpdateId(Long.valueOf(createUser.getId()));
@@ -186,14 +186,14 @@ public class ImportDataController {
         List<PolicyStriveMonthExcelVO> list = ExcelUtil.readPolicyStriveMonthFromXls(byteFromUrl);
 
         if (list.isEmpty()) {
-            throw new Exception(errorMsg_null);
+            throw new Exception(ERRORMSG_NULL);
         }
         list = list.stream().filter(model -> StringUtil.isNotEmpty(model.getIndex())).collect(Collectors.toList());
         List<PolicyStriveMonthExcelVO> excelVOList = new ArrayList<>();
         for (PolicyStriveMonthExcelVO model : list) {
             try {
                 if (!StringUtil.checkFieldsNotEmpty(model)) {
-                    throw new Exception(errorMsg_hang);
+                    throw new Exception(ERRORMSG_HANG);
                 }
 
                 PolicyStriveVO striveVO = new PolicyStriveVO();
@@ -203,7 +203,7 @@ public class ImportDataController {
                 striveWrapper.eq("BUSINESS_NO", model.getBusinessNo());
                 PolicyStrive existStrive = policyStriveService.getOne(striveWrapper);
                 if(StringUtil.isEmpty(existStrive.getId())){
-                    throw new Exception(errorMsg_businessNo);
+                    throw new Exception(ERRORMSG_BUSINESSNO);
                 }
                 striveVO.setId(existStrive.getId());
 
@@ -213,7 +213,7 @@ public class ImportDataController {
                         Date sjFinishTime = DateUtil.parse(model.getSjFinishTime(), DateUtil.PATTERN_DATE);
                         striveVO.setSjFinishTime(sjFinishTime);
                     } catch (RuntimeException re) {
-                        throw new Exception(errorMsg_sjTime);
+                        throw new Exception(ERRORMSG_SJTIME);
                     }
                 } else {
                     striveVO.setIsLand(0);
@@ -238,7 +238,7 @@ public class ImportDataController {
                 userWrapper.eq("NAME", model.getCreateName());
                 SysUser createUser = sysUserService.getOne(userWrapper);
                 if (StringUtil.isEmpty(createUser.getId())) {
-                    throw new Exception(errorMsg_createName);
+                    throw new Exception(ERRORMSG_CREATENAME);
                 }
                 striveVO.setUpdateId(Long.valueOf(createUser.getId()));
                 striveVO.setUpdateTime(new Date());

+ 4 - 3
src/main/java/com/qdport/controller/PolicyConditionController.java

@@ -2,6 +2,7 @@ package com.qdport.controller;
 
 import com.qdport.annotation.WebLog;
 import com.qdport.core.redis.cache.QdportRedis;
+import com.qdport.enums.QDPortEnum;
 import com.qdport.query.PolicyConditionQuery;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
@@ -32,7 +33,7 @@ public class PolicyConditionController extends QdportController {
     @PostMapping("/update")
     @WebLog(operateName = "修改", operateType = "policy_condition")
     public R update(@RequestBody @Valid PolicyConditionQuery query) {
-        qdportRedis.set("ytbDate", query.getYtbDate());
+        qdportRedis.set(QDPortEnum.POLICY_REDIS_KEY_QDPORT_ZCGX_YTBDATE.getValue(), query.getYtbDate());
         return R.success("更新成功");
     }
 
@@ -43,8 +44,8 @@ public class PolicyConditionController extends QdportController {
     @ApiOperation(value = "详情", notes = "id")
     public R<Integer> get() {
         Integer ytbDate = 0;
-        if (qdportRedis.exists("ytbDate")) {
-            ytbDate = qdportRedis.get("ytbDate");
+        if (qdportRedis.exists(QDPortEnum.POLICY_REDIS_KEY_QDPORT_ZCGX_YTBDATE.getValue())) {
+            ytbDate = qdportRedis.get(QDPortEnum.POLICY_REDIS_KEY_QDPORT_ZCGX_YTBDATE.getValue());
         }
         return R.data(ytbDate);
     }

+ 0 - 4
src/main/java/com/qdport/controller/PolicyLogController.java

@@ -1,10 +1,6 @@
 package com.qdport.controller;
 
-import com.qdport.annotation.WebLog;
-import com.qdport.core.secure.QdportUser;
-import com.qdport.core.secure.utils.AuthUtil;
 import com.qdport.entity.PolicyLog;
-import com.qdport.modules.system.service.TSysUserService;
 import com.qdport.service.PolicyLogService;
 import com.qdport.query.PolicyLogQuery;
 import com.qdport.vo.PolicyLogVO;

+ 4 - 1
src/main/java/com/qdport/controller/PolicyMessageController.java

@@ -10,6 +10,7 @@ import com.qdport.service.PolicyLogService;
 import com.qdport.service.PolicyMessageService;
 import com.qdport.query.PolicyMessageQuery;
 import com.qdport.service.PolicyShareService;
+import com.qdport.util.StringUtil;
 import com.qdport.vo.PolicyLogVO;
 import com.qdport.vo.PolicyMessageVO;
 import com.qdport.wrapper.PolicyMessageWrapper;
@@ -68,7 +69,9 @@ public class PolicyMessageController extends QdportController {
         wrapper.ne("PARENT_ID", "0");
         wrapper.ne("CREATE_ID", query.getCreateId());
         wrapper.apply("(REPLY_ID = " + query.getCreateId() + " or REPLY_ID is null )");
-
+        if (StringUtil.isNotEmpty(query.getIsRead())) {
+            wrapper.eq("IS_READ", query.getIsRead());
+        }
         page = policyMessageService.page(page, wrapper);
 
         IPage<PolicyMessageVO> voPage = PolicyMessageWrapper.build().pageVO(page);

+ 56 - 9
src/main/java/com/qdport/controller/PolicyProgressController.java

@@ -4,16 +4,23 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qdport.core.boot.ctrl.QdportController;
+import com.qdport.core.redis.cache.QdportRedis;
 import com.qdport.core.tool.api.R;
 import com.qdport.entity.PolicyShare;
+import com.qdport.enums.QDPortEnum;
 import com.qdport.modules.system.entity.SysDept;
 import com.qdport.modules.system.service.SysDeptService;
 import com.qdport.query.PolicyProgressQuery;
+import com.qdport.query.PolicyStriveQuery;
 import com.qdport.query.QueryWrapperBuilder;
+import com.qdport.service.PolicyFileService;
 import com.qdport.service.PolicyShareService;
 import com.qdport.service.PolicyStriveService;
 import com.qdport.util.StringUtil;
+import com.qdport.vo.PolicyFileVO;
 import com.qdport.vo.PolicyProgressVo;
+import com.qdport.vo.PolicyShareVO;
+import com.qdport.vo.PolicyStriveVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.BeanUtils;
@@ -25,6 +32,7 @@ import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("qdport-zcgx/progress")
@@ -33,7 +41,13 @@ public class PolicyProgressController extends QdportController {
     @Resource
     private PolicyShareService policyShareService;
     @Resource
+    private PolicyStriveService policyStriveService;
+    @Resource
     private SysDeptService sysDeptService;
+    @Resource
+    private PolicyFileService policyFileService;
+    @Resource
+    private QdportRedis qdportRedis;
 
     @GetMapping("sharePage")
     @ApiOperation(value = "分页", notes = "分页")
@@ -43,10 +57,16 @@ public class PolicyProgressController extends QdportController {
         if (StringUtil.isEmpty(query.getBeginCreateTime()) || StringUtil.isEmpty(query.getEndCreateTime())) {
             throw new RuntimeException("参数错误");
         }
+        wrapper.apply("(DEPT_TYPE = 1 or EX_PORTRAIT = '1')");
 
         deptPage = sysDeptService.page(deptPage, wrapper);
         List<SysDept> records = deptPage.getRecords();
 
+        Integer ytbDate = 0;
+        if (qdportRedis.exists(QDPortEnum.POLICY_REDIS_KEY_QDPORT_ZCGX_YTBDATE.getValue())) {
+            ytbDate = qdportRedis.get(QDPortEnum.POLICY_REDIS_KEY_QDPORT_ZCGX_YTBDATE.getValue());
+        }
+
         IPage<PolicyProgressVo> page = new Page<>(query.getPage(), query.getSize());
         page.setTotal(deptPage.getTotal());
         List<PolicyProgressVo> progressVoList = new ArrayList<>();
@@ -58,25 +78,52 @@ public class PolicyProgressController extends QdportController {
             policyShareWrapper.eq("COMPANY_ID", model.getId());
             policyShareWrapper.lt("CREATE_TIME", query.getEndCreateTime());
             policyShareWrapper.gt("CREATE_TIME", query.getBeginCreateTime());
-            long count = policyShareService.count(policyShareWrapper);
-            vo.setCount(count);
+            List<PolicyShare> shareList = policyShareService.list(policyShareWrapper);
+            List<PolicyShareVO> shareVOList = shareList.stream().map(share -> {
+                PolicyShareVO shareVO = new PolicyShareVO();
+                BeanUtils.copyProperties(share, shareVO);
 
-//            if (count == 1) {
-//                PolicyShare shareOne = policyShareService.getOne(policyShareWrapper);
-//
-//            }
+                SysDept dept = sysDeptService.getById(shareVO.getDeptId());
+                shareVO.setDeptName(dept.getName());
+                SysDept company = sysDeptService.getById(shareVO.getCompanyId());
+                shareVO.setCompanyName(company.getName());
 
+                List<PolicyFileVO> fileList = policyFileService.getFileList(shareVO.getId(), QDPortEnum.POLICY_FILE_REFTYPE_POLICY_SHARE.getValue());
 
+                shareVO.setFileList(fileList);
+                return shareVO;
+            }).collect(Collectors.toList());
+
+            vo.setCount(shareVOList.size());
+            vo.setShareList(shareVOList);
+            vo.setYtbDate(ytbDate);
             progressVoList.add(vo);
         }
-        return null;
+        page.setRecords(progressVoList);
+        return R.data(page);
     }
 
     @GetMapping("strivePage")
     @ApiOperation(value = "分页", notes = "分页")
-    public R<IPage> strivePage(@Valid PolicyProgressQuery query) {
+    public R<IPage> strivePage(@Valid PolicyStriveQuery query) {
+        Integer ytbDate = 0;
+        if (qdportRedis.exists(QDPortEnum.POLICY_REDIS_KEY_QDPORT_ZCGX_YTBDATE.getValue())) {
+            ytbDate = qdportRedis.get(QDPortEnum.POLICY_REDIS_KEY_QDPORT_ZCGX_YTBDATE.getValue());
+        }
 
+        IPage<PolicyStriveVO> page = policyStriveService.page(query);
+        List<PolicyStriveVO> records = page.getRecords();
+        for (PolicyStriveVO model : records) {
+            model.setYtbDate(ytbDate);
 
-        return null;
+            SysDept dept = sysDeptService.getById(model.getDeptId());
+            model.setDeptName(dept.getName());
+            SysDept company = sysDeptService.getById(model.getCompanyId());
+            model.setCompanyName(company.getName());
+
+            List<PolicyFileVO> fileList = policyFileService.getFileList(model.getId(), QDPortEnum.POLICY_FILE_REFTYPE_POLICY_STRIVE.getValue());
+            model.setFileList(fileList);
+        }
+        return R.data(page);
     }
 }

+ 21 - 3
src/main/java/com/qdport/controller/PolicyShareController.java

@@ -1,5 +1,6 @@
 package com.qdport.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qdport.annotation.WebLog;
 import com.qdport.entity.PolicyShare;
 import com.qdport.enums.QDPortEnum;
@@ -7,11 +8,9 @@ import com.qdport.modules.system.entity.SysDept;
 import com.qdport.modules.system.service.SysDeptService;
 import com.qdport.query.PolicyShareQuery;
 import com.qdport.service.PolicyFileService;
-import com.qdport.service.PolicyLogService;
 import com.qdport.service.PolicyShareService;
 import com.qdport.service.PolicyTodoService;
 import com.qdport.vo.PolicyFileVO;
-import com.qdport.vo.PolicyLogVO;
 import com.qdport.vo.PolicyShareVO;
 import com.qdport.wrapper.PolicyShareWrapper;
 import org.springframework.web.bind.annotation.*;
@@ -24,7 +23,6 @@ import com.qdport.core.boot.ctrl.QdportController;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
 import java.util.*;
 import java.util.concurrent.ExecutionException;
@@ -103,6 +101,13 @@ public class PolicyShareController extends QdportController {
     @ApiOperation(value = "新增", notes = "传入PolicyShare")
     @WebLog(operateName = "管理员新增", operateType = "policy_share")
     public R saveDone(@RequestBody PolicyShareVO vo) {
+        QueryWrapper<PolicyShare> wrapper = new QueryWrapper<>();
+        wrapper.eq("DOC_NO", vo.getDocNo());
+        long count = policyShareService.count(wrapper);
+        if (count > 0) {
+            return R.fail(ImportDataController.ERRORMSG_DOCNO);
+        }
+
         vo.setStatus(QDPortEnum.POLICY_SHARE_STATUS_DONE.getValue());
         policyShareService.save(vo);
         return R.success("保存成功");
@@ -112,6 +117,12 @@ public class PolicyShareController extends QdportController {
     @ApiOperation(value = "新增并且提交", notes = "传入PolicyShare")
     @WebLog(operateName = "新增并且上报", operateType = "policy_share")
     public R saveApprove(@RequestBody PolicyShareVO vo) throws ExecutionException, InterruptedException {
+        QueryWrapper<PolicyShare> wrapper = new QueryWrapper<>();
+        wrapper.eq("DOC_NO", vo.getDocNo());
+        long count = policyShareService.count(wrapper);
+        if (count > 0) {
+            return R.fail(ImportDataController.ERRORMSG_DOCNO);
+        }
         policyShareService.saveApprove(vo);
         policyTodoService.save(vo);
         return R.success("新增并且提交成功");
@@ -124,6 +135,13 @@ public class PolicyShareController extends QdportController {
     @ApiOperation(value = "编辑", notes = "传入PolicyShare")
     @WebLog(operateName = "修改", operateType = "policy_share")
     public R update(@RequestBody @Valid PolicyShareVO vo) {
+        QueryWrapper<PolicyShare> wrapper = new QueryWrapper<>();
+        wrapper.eq("DOC_NO", vo.getDocNo());
+        wrapper.ne("ID", vo.getId());
+        long count = policyShareService.count(wrapper);
+        if (count > 0) {
+            return R.fail(ImportDataController.ERRORMSG_DOCNO);
+        }
         policyShareService.update(vo);
         return R.success("更新成功");
     }

+ 29 - 12
src/main/java/com/qdport/controller/PolicyStriveController.java

@@ -5,22 +5,15 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qdport.annotation.WebLog;
-import com.qdport.entity.PolicyTodo;
+import com.qdport.entity.PolicyShare;
 import com.qdport.enums.QDPortEnum;
 import com.qdport.modules.system.entity.SysDept;
-import com.qdport.modules.system.entity.SysUser;
 import com.qdport.modules.system.service.SysDeptService;
-import com.qdport.modules.system.service.TSysUserService;
-import com.qdport.service.PolicyFileService;
-import com.qdport.service.PolicyLogService;
-import com.qdport.service.PolicyTodoService;
-import com.qdport.service.impl.PolicySystemService;
+import com.qdport.service.*;
 import com.qdport.util.StringUtil;
 import com.qdport.vo.PolicyFileVO;
 import com.qdport.entity.PolicyStrive;
-import com.qdport.service.PolicyStriveService;
 import com.qdport.query.PolicyStriveQuery;
-import com.qdport.vo.PolicyLogVO;
 import com.qdport.vo.PolicyStriveVO;
 import com.qdport.wrapper.PolicyStriveWrapper;
 import org.springframework.web.bind.annotation.*;
@@ -33,13 +26,10 @@ import com.qdport.core.boot.ctrl.QdportController;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.Date;
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.ExecutionException;
 
 /**
@@ -60,6 +50,8 @@ public class PolicyStriveController extends QdportController {
     private PolicyTodoService policyTodoService;
     @Resource
     private SysDeptService sysDeptService;
+    @Resource
+    private PolicyShareService policyShareService;
 
     /**
      * 分页
@@ -110,6 +102,13 @@ public class PolicyStriveController extends QdportController {
     @ApiOperation(value = "新增", notes = "传入PolicyStrive")
     @WebLog(operateName = "新增", operateType = "policy_strive")
     public R save(@RequestBody PolicyStriveVO vo) {
+        QueryWrapper<PolicyShare> wrapper = new QueryWrapper<>();
+        wrapper.eq("DOC_NO", vo.getDocNo());
+        long count = policyShareService.count(wrapper);
+        if (count > 0) {
+            return R.fail(ImportDataController.ERRORMSG_DOCNO_2);
+        }
+
         vo.setStatus(QDPortEnum.POLICY_STRIVE_STATUS_ACTIVE.getValue());
         policyStriveService.save(vo);
         return R.success("保存成功");
@@ -119,6 +118,12 @@ public class PolicyStriveController extends QdportController {
     @ApiOperation(value = "新增", notes = "传入PolicyStrive")
     @WebLog(operateName = "管理员新增", operateType = "policy_strive")
     public R saveDone(@RequestBody PolicyStriveVO vo) {
+        QueryWrapper<PolicyShare> wrapper = new QueryWrapper<>();
+        wrapper.eq("DOC_NO", vo.getDocNo());
+        long count = policyShareService.count(wrapper);
+        if (count > 0) {
+            return R.fail(ImportDataController.ERRORMSG_DOCNO_2);
+        }
         vo.setStatus(QDPortEnum.POLICY_STRIVE_STATUS_DONE.getValue());
         policyStriveService.save(vo);
         return R.success("保存成功");
@@ -128,6 +133,12 @@ public class PolicyStriveController extends QdportController {
     @ApiOperation(value = "新增并且提交", notes = "传入PolicyStrive")
     @WebLog(operateName = "新增并且上报", operateType = "policy_strive")
     public R saveApprove(@RequestBody PolicyStriveVO vo) throws ExecutionException, InterruptedException {
+        QueryWrapper<PolicyShare> wrapper = new QueryWrapper<>();
+        wrapper.eq("DOC_NO", vo.getDocNo());
+        long count = policyShareService.count(wrapper);
+        if (count > 0) {
+            return R.fail(ImportDataController.ERRORMSG_DOCNO_2);
+        }
         policyStriveService.saveApprove(vo);
         policyTodoService.save(vo);
         return R.success("新增并且提交成功");
@@ -140,6 +151,12 @@ public class PolicyStriveController extends QdportController {
     @ApiOperation(value = "编辑", notes = "传入PolicyStrive")
     @WebLog(operateName = "修改", operateType = "policy_strive")
     public R update(@RequestBody @Valid PolicyStriveVO vo) {
+        QueryWrapper<PolicyShare> wrapper = new QueryWrapper<>();
+        wrapper.eq("DOC_NO", vo.getDocNo());
+        long count = policyShareService.count(wrapper);
+        if (count > 0) {
+            return R.fail(ImportDataController.ERRORMSG_DOCNO_2);
+        }
         policyStriveService.update(vo);
         return R.success("更新成功");
     }

+ 2 - 0
src/main/java/com/qdport/enums/QDPortEnum.java

@@ -54,6 +54,8 @@ public enum QDPortEnum {
     POLICY_LOG_OPERATE_TYPE_POLICY_TEMPLATE("policy_template", "模板管理"),
     POLICY_LOG_OPERATE_TYPE_POLICY_CONDITION("policy_condition", "应填报日期管理"),
 
+    POLICY_REDIS_KEY_QDPORT_ZCGX_YTBDATE("zcgx_ytbDate", "redis-应填报日期"),
+
     ;
 
     QDPortEnum(String value, String comment) {

+ 7 - 2
src/main/java/com/qdport/listener/RedisEventListener.java

@@ -1,6 +1,7 @@
 package com.qdport.listener;
 
 import com.qdport.core.cache.utils.CacheUtil;
+import com.qdport.core.redis.cache.QdportRedis;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.web.context.WebServerInitializedEvent;
 import org.springframework.context.event.EventListener;
@@ -8,13 +9,16 @@ import org.springframework.core.annotation.Order;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
-import static com.qdport.core.cache.constant.CacheConstant.RESOURCE_CACHE;
-import static com.qdport.core.cache.constant.CacheConstant.SYS_CACHE;
+import javax.annotation.Resource;
+
+import static com.qdport.core.cache.constant.CacheConstant.*;
 
 
 @Slf4j
 @Component
 public class RedisEventListener {
+	@Resource
+	QdportRedis qdportRedis;
 
 	@Async
 	@Order
@@ -22,5 +26,6 @@ public class RedisEventListener {
 	public void deleteRedisCache(WebServerInitializedEvent event){
 		log.info("----------------开始清除数据权限redis缓存: " + SYS_CACHE);
 		CacheUtil.clear(RESOURCE_CACHE, Boolean.FALSE);
+//		qdportRedis.del("qdport:user::qdport:fail:");
 	}
 }

+ 4 - 9
src/main/java/com/qdport/vo/PolicyProgressVo.java

@@ -15,14 +15,9 @@ import java.util.List;
 @Data
 public class PolicyProgressVo extends SysDept {
 
-    private Long count;
+    private Integer count;
 
-    @DateTimeFormat(
-            pattern = "yyyy-MM-dd"
-    )
-    @JsonFormat(
-            pattern = "yyyy-MM-dd"
-    )
-    @ApiModelProperty(value = "应填报日期")
-    private Date ytbDate;
+    private List<PolicyShareVO> shareList;
+
+    private Integer ytbDate;
 }

+ 2 - 0
src/main/java/com/qdport/vo/PolicyStriveVO.java

@@ -28,4 +28,6 @@ public class PolicyStriveVO extends PolicyStrive {
 	private String excelUrl;
 	@ApiModelProperty(value = "意见")
 	private String comment;
+
+	private Integer ytbDate;
 }

+ 18 - 0
src/main/resources/application-dev.yml

@@ -57,6 +57,24 @@ qdport:
       - /favicon.ico
       - /qdg-logo-w.png
       - /gen/**
+  sync-user-dept:
+    # 开启定时任务
+    enabled: false
+    # 默认每天凌晨4点同步一次
+    cron-expression: 0 0 4 * * ?
+    # 新增用户的默认密码
+    defaultPassword: Qdport@2023!
+    dept-file-url: http://eplattest.qdgwlds.com/node/iuserorg/EPLAT-ORG.txt
+    user-file-url: http://eplattest.qdgwlds.com/node/iuserorg/EPLAT-USERS.txt
+    add-sync-user-history-url: http://10.236.3.25:31061/dev-api/qdport-edge/history/addSyncUserHistory
+    # 你的应用在eplat上的应用英文名
+    app-code: frame-demo
+    # 如果需要根据部门同步,请填写部门code
+    dept-code:
+    # 批量更新插入的数据量限制,如果sql太长报内存溢出请调小该参数
+    group-size: 1000
+    # 文件解密密钥
+    secretKey:
 
 oss:
   enabled: true

+ 41 - 17
src/main/resources/application-prod.yml

@@ -2,14 +2,14 @@
 spring:
   datasource:
     driver-class-name: oracle.jdbc.driver.OracleDriver
-    url: jdbc:oracle:thin:@10.236.3.79:1521:orcl
-    username: 你的项目配置
-    password: 你的项目配置
+    url: jdbc:oracle:thin:@10.205.78.77:1521:orcl
+    username: ZCGX
+    password: Qczc..2024
   redis:
     # redis 单机环境配置
     host: 127.0.0.1
     port: 6379
-    password: 123456
+    password:
     database: 0
     ssl: false
 
@@ -18,18 +18,18 @@ qdport:
   prop:
     user:
       # 用户安全策略开关
-      security-policy-enable: true
+      security-policy-enable: false
   # 框架许可证配置
   license:
     # -----------------------请联系相关人员获取许可证-----------------------
-    context:
+    context: "WGNmT0pgl+tbb44iqxgfT2t+sy/v+4wb9UEwK2tXpz8CG/X9b2RUTZrAXwIlFlpLrMVdwvx4t+F8usRv58J9hB5Ca7zfY1cxrUV7705vV/ecbc4hPvhnHZJWDVyl2gDR8gvbFySFJVytdJRC32rsD6+Wc2kQvFnrFa45d6Xe9Ks="
   # 分布式锁配置
   lock:
     # 是否启用分布式锁
     enabled: true
     # redis服务地址
-    address: redis://127.0.0.1:6379
-    password: 123456
+    address: redis://localhost:6379
+    password:
     database: 2
   # 本地文件上传
   file:
@@ -38,9 +38,9 @@ qdport:
     remote-path: /usr/share/nginx/html
   # 第三方登陆
   social:
-    tokenUrl: http://cloud.qdpi.net.cn/cloud/oauth/token
-    userInfoUrl: http://cloud.qdpi.net.cn/cloud/user
-    refreshUrl: http://cloud.qdpi.net.cn/cloud/oauth/token
+    tokenUrl: http://eplattest.qdgwlds.com/cloud/oauth/token
+    userInfoUrl: http://eplattest.qdgwlds.com/cloud/user
+    refreshUrl: http://eplattest.qdgwlds.com/cloud/oauth/token
     oauth:
       eplat:
         client-id: frame-demo
@@ -57,15 +57,33 @@ qdport:
       - /favicon.ico
       - /qdg-logo-w.png
       - /gen/**
+  sync-user-dept:
+    # 开启定时任务
+    enabled: false
+    # 默认每天凌晨4点同步一次
+    cron-expression: 0 0 4 * * ?
+    # 新增用户的默认密码
+    defaultPassword: Qdport@2023!
+    dept-file-url: http://cloud.qdpi.net.cn/node/iuserorg/EPLAT-ORG.txt
+    user-file-url: http://cloud.qdpi.net.cn/node/iuserorg/EPLAT-USERS.txt
+    add-sync-user-history-url: http://10.205.81.1:31304/api/qdport-edge/history/addSyncUserHistory
+    # 你的应用在eplat上的应用英文名
+    app-code: frame-demo
+    # 如果需要根据部门同步,请填写部门code
+    dept-code:
+    # 批量更新插入的数据量限制,如果sql太长报内存溢出请调小该参数
+    group-size: 1000
+    # 文件解密密钥
+    secretKey:
 
 oss:
-  enabled: false
+  enabled: true
   name: minio
   tenant-mode: false
-  endpoint: 127.0.0.0
-  access-key: 你的项目配置
-  secret-key: 你的项目配置
-  bucketName: 你的项目配置
+  endpoint: http://10.205.41.104:9000
+  access-key: sCmU8pCutUS4SO34tOJZ
+  secret-key: xGTAr4I1sM0bPqAZXTlCndLLeraWFpOiBY7ZK7B1
+  bucketName: qdg
 
 flowable:
   activity-font-name: \u5B8B\u4F53
@@ -89,4 +107,10 @@ flowable:
   eventregistry:
     enabled: false
   custom-mybatis-x-m-l-mappers:
-    - com/qdport/workflow/process/mapper/WfProcessDefinition.xml
+    - com/qdport/workflow/process/mapper/WfProcessDefinition.xml
+
+processDefKey:
+  policyShare: "process_nSFfWHBErDdKJsGEQByHGkd5wMNp3GF7"
+  policyStrive: "process_nSFfWHBErDdKJsGEQByHGkd5wMNp3GF7"
+  policyCase: "process_nSFfWHBErDdKJsGEQByHGkd5wMNp3GF7"
+

+ 0 - 36
src/main/resources/logback-dev.xml

@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration debug="false">
-    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
-    <property name="LOG_HOME" value="/home/qdg/logs" />
-    <!-- 控制台输出 -->
-    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
-            <pattern>===%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) Line:%-3L - %gray(%msg%n)</pattern>
-        </encoder>
-    </appender>
-
-    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!--日志文件输出的文件名-->
-            <FileNamePattern>${LOG_HOME}/easydo-qdg-%d{yyyy-MM-dd}.log</FileNamePattern>
-            <!--日志文件保留天数-->
-            <MaxHistory>30</MaxHistory>
-        </rollingPolicy>
-        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
-            <pattern>===%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36})
-                Line:%-3L - %msg%n
-            </pattern>
-            <charset>UTF-8</charset>
-        </encoder>
-        <!--日志文件最大的大小-->
-        <!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">-->
-        <!--<MaxFileSize>10MB</MaxFileSize>-->
-        <!--</triggeringPolicy>-->
-    </appender>
-    <!-- 日志输出级别 -->
-    <root level="INFO">
-        <appender-ref ref="STDOUT" />
-    </root>
-</configuration>

+ 80 - 0
src/main/resources/logback.xml

@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="false" debug="false">
+    <!-- 自定义参数监听 -->
+    <contextListener class="com.qdport.core.log.listener.LoggerStartupListener"/>
+    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
+
+    <!-- 彩色日志依赖的渲染类 -->
+    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
+    <conversionRule conversionWord="wex"
+                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
+    <conversionRule conversionWord="wEx"
+                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
+    <!-- 彩色日志格式 -->
+    <property name="CONSOLE_LOG_PATTERN"
+              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
+    <!-- 控制台输出 -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+            <charset>utf8</charset>
+        </encoder>
+    </appender>
+
+    <!-- 生成日志文件 -->
+    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件输出的文件名 -->
+            <FileNamePattern>/home/qdg/logs/info-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
+            <maxHistory>7</maxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <!-- 设置单个日志文件的最大大小 -->
+                <maxFileSize>1GB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <totalSizeCap>7GB</totalSizeCap>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] %n%-5level: %msg%n</pattern>
+        </encoder>
+        <!-- 打印日志级别 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>INFO</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 生成日志文件 -->
+    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件输出的文件名 -->
+            <FileNamePattern>/home/qdg/logs/error-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
+            <maxHistory>7</maxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <!-- 设置单个日志文件的最大大小 -->
+                <maxFileSize>1GB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <totalSizeCap>7GB</totalSizeCap>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] %n%-5level: %msg%n</pattern>
+        </encoder>
+        <!-- 打印日志级别 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 日志输出级别 -->
+    <root level="INFO">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="${INFO_APPENDER}"/>
+        <appender-ref ref="${ERROR_APPENDER}"/>
+    </root>
+
+    <logger name="net.sf.ehcache" level="INFO"/>
+    <logger name="druid.sql" level="INFO"/>
+
+</configuration>