diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/grab/SynchronizationService/SyncTJwTkxx.java b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/grab/SynchronizationService/SyncTJwTkxx.java index a174abfb..74c0660a 100644 --- a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/grab/SynchronizationService/SyncTJwTkxx.java +++ b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/grab/SynchronizationService/SyncTJwTkxx.java @@ -50,7 +50,7 @@ public class SyncTJwTkxx extends BaseSync { //清洗数据 inDataList.forEach(x -> { Xxhbtkxx outData = BeanUtil.toBean(x, Xxhbtkxx.class); - outData.setTimestamps(DateUtil.format(x.getTimestamps(), DatePattern.NORM_DATETIME_PATTERN)); +// outData.setTimestamps(DateUtil.format(x.getTimestamps(), DatePattern.NORM_DATETIME_PATTERN)); outDataList.add(outData); }); diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/grab/SynchronizationService/SyncZyCxtj.java b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/grab/SynchronizationService/SyncZyCxtj.java new file mode 100644 index 00000000..e79477b3 --- /dev/null +++ b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/grab/SynchronizationService/SyncZyCxtj.java @@ -0,0 +1,58 @@ +package org.jeecg.modules.kc.grab.SynchronizationService; + +import lombok.extern.slf4j.Slf4j; +import org.jeecg.modules.kc.grab.SynchronizationService.base.BaseSync; +import org.jeecg.modules.kc.wjxWjxx.service.IWjxWjxxService; +import org.jeecg.modules.kc.zyCcjg.service.IZyCcjgService; +import org.jeecg.modules.kc.zyInfo.service.IZyInfoService; +import org.quartz.JobExecutionContext; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Map; + +/** + * 作业修改没有提交给维普的作业信息 + */ +@Slf4j +public class SyncZyCxtj extends BaseSync { + + @Autowired + private IZyCcjgService zyCcjgService; + + @Autowired + private IZyInfoService zyInfoService; + @Autowired + private IWjxWjxxService wjxWjxxService; + + /** + * 若参数变量名修改 QuartzJobController中也需对应修改 + */ + + @Override + public void execute(JobExecutionContext jobExecutionContext) { + start(); + run(getParamMap()); + end(); + } + + + /** + * 有参定时任务实现 + * @param param + */ + public void run(Map param){ + try { + zyCcjgService.getCxtj(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 无参定时任务实现 + */ + public void run(){ + run(null); + } + +} diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/grab/exports/mapper/xml/TJwTkxxMapper.xml b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/grab/exports/mapper/xml/TJwTkxxMapper.xml index 150b7be1..bcf01bcb 100644 --- a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/grab/exports/mapper/xml/TJwTkxxMapper.xml +++ b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/grab/exports/mapper/xml/TJwTkxxMapper.xml @@ -2,4 +2,7 @@ + \ No newline at end of file diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/grab/imports/entity/Xxhbtkxx.java b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/grab/imports/entity/Xxhbtkxx.java index 4c0d7065..c8c82272 100644 --- a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/grab/imports/entity/Xxhbtkxx.java +++ b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/grab/imports/entity/Xxhbtkxx.java @@ -35,7 +35,6 @@ public class Xxhbtkxx implements Serializable { @ApiModelProperty(value = "id") private java.lang.String id; - @Excel(name = "学年学期", width = 15) @TableField(exist = false) private String xqxn; /**姓名*/ @@ -43,11 +42,10 @@ public class Xxhbtkxx implements Serializable { @ApiModelProperty(value = "姓名") private java.lang.String xm; /**cjr*/ - @Excel(name = "创建人", width = 15) + @Excel(name = "工号", width = 15) @ApiModelProperty(value = "cjr") private java.lang.String cjr; /**sjh*/ - @Excel(name = "手机号", width = 15) @ApiModelProperty(value = "sjh") private java.lang.String sjh; /**tksy*/ @@ -61,7 +59,6 @@ public class Xxhbtkxx implements Serializable { @ApiModelProperty(value = "yjxq") private java.lang.String yjxq; /**sqrdw*/ - @Excel(name = "申请人单位", width = 15) @ApiModelProperty(value = "sqrdw") private java.lang.String sqrdw; /**bizbh*/ @@ -84,8 +81,6 @@ public class Xxhbtkxx implements Serializable { @ApiModelProperty(value = "bkjh") private java.lang.String bkjh; /**时间戳*/ - @Excel(name = "时间戳", width = 15) - @ApiModelProperty(value = "时间戳") private java.lang.String timestamps; /**课程名称*/ @Excel(name = "课程名称", width = 15) @@ -94,24 +89,21 @@ public class Xxhbtkxx implements Serializable { /**pbh*/ @ApiModelProperty(value = "pbh") private java.lang.String pbh; - /**教材*/ - @Excel(name = "教材", width = 15) - @ApiModelProperty(value = "教材") + /**节次*/ + @Excel(name = "节次", width = 15) + @ApiModelProperty(value = "节次") private java.lang.String jc; /**上课日期*/ @Excel(name = "上课日期", width = 15) @ApiModelProperty(value = "上课日期") private java.lang.String skrq; /**kcxxbh*/ - @Excel(name = "课程信息编号", width = 15) @ApiModelProperty(value = "kcxxbh") private java.lang.String kcxxbh; /**学期*/ - @Excel(name = "校区", width = 15) @ApiModelProperty(value = "校区") private java.lang.String xq; /**jsgh*/ - @Excel(name = "教师工号", width = 15) @ApiModelProperty(value = "jsgh") private java.lang.String jsgh; /**编号*/ diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/kcWechatSendLog/controller/KcWechatSendLogController.java b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/kcWechatSendLog/controller/KcWechatSendLogController.java index 2979d77d..0e979ce6 100644 --- a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/kcWechatSendLog/controller/KcWechatSendLogController.java +++ b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/kcWechatSendLog/controller/KcWechatSendLogController.java @@ -16,6 +16,8 @@ import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.util.DateUtils; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.kc.KcBdgxbcopy.entity.KcBdgxbcopy; +import org.jeecg.modules.kc.grab.imports.entity.Xxhbuser; +import org.jeecg.modules.kc.grab.imports.service.IXxhbuserService; import org.jeecg.modules.kc.kcWechatSendLog.entity.KcWechatSendLog; import org.jeecg.modules.kc.kcWechatSendLog.service.IKcWechatSendLogService; @@ -59,6 +61,8 @@ import org.apache.shiro.authz.annotation.RequiresPermissions; public class KcWechatSendLogController extends JeecgController { @Autowired private IKcWechatSendLogService kcWechatSendLogService; + @Autowired + private IXxhbuserService xxhbuserService; /** * 分页列表查询 @@ -92,8 +96,21 @@ public class KcWechatSendLogController extends JeecgController add(@RequestBody KcWechatSendLog kcWechatSendLog) { - kcWechatSendLogService.save(kcWechatSendLog); - sendWxmessage(kcWechatSendLog); + String[] openIds = kcWechatSendLog.getOpenid().split(","); + for(String openId:openIds){ + + QueryWrapper xxhbuserQueryWrapper = new QueryWrapper<>(); + xxhbuserQueryWrapper.eq("gh",openId); + xxhbuserQueryWrapper.last("limit 1"); + Xxhbuser xxhbuser = xxhbuserService.getOne(xxhbuserQueryWrapper); + + KcWechatSendLog kcWechatSendLogNew = new KcWechatSendLog(); + kcWechatSendLogNew.setOpenid(openId); + kcWechatSendLogNew.setTeacherName(xxhbuser.getXm()); + kcWechatSendLogNew.setYtkcs(kcWechatSendLog.getYtkcs()); + kcWechatSendLogService.save(kcWechatSendLogNew); + sendWxmessage(kcWechatSendLogNew); + } return Result.OK("添加成功!"); } diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/zyInfoStudent/service/IZyInfoStudent2Service.java b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/zyInfoStudent/service/IZyInfoStudent2Service.java new file mode 100644 index 00000000..92d8c457 --- /dev/null +++ b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/zyInfoStudent/service/IZyInfoStudent2Service.java @@ -0,0 +1,73 @@ +package org.jeecg.modules.kc.zyInfoStudent.service; + +import com.alibaba.fastjson.JSONObject; +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.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.kc.zyInfo.entity.ZyXzryInfo; +import org.jeecg.modules.kc.zyInfoStudent.entity.ZyInfoStudent; +import org.jeecg.modules.kc.zyInfoStudent.entity.ZyInfoStudentSys; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * @Description: 学生提交作业 + * @Author: jeecg-boot + * @Date: 2024-05-06 + * @Version: V1.0 + */ +public interface IZyInfoStudent2Service extends IService { + + public boolean save(ZyInfoStudent zyInfoStudent); + + void deleteMainId(String id); + + public boolean updateById(ZyInfoStudent zyInfoStudent, HttpServletResponse response); + + void editFabu(ZyInfoStudent zyInfoStudent); + + IPage cdxxlist(Page page, QueryWrapper queryWrapper); + + List getCcjg(ZyInfoStudent zyInfoStudent); + + void fabuBatch(List asList); + + IPage sysList(Page page, QueryWrapper queryWrapper, ZyInfoStudentSys zyInfoStudentSys); + + List exportSysXls(QueryWrapper queryWrapper, ZyInfoStudentSys zyInfoStudentSys); + + boolean stuWpKsjc(ZyInfoStudent zyInfoStudent, HttpServletResponse response); + + IPage getHpxxList(Page page, QueryWrapper queryWrapper, String zyStuId); + + void batchKhcl(List list); + + IPage getList2(Page page, QueryWrapper queryWrapper); + + List getDocNoPdfList(); + + List xnccBatchWeipu(ZyInfoStudent zyInfoStudent, HttpServletResponse response); + + List cxccByZyId(ZyInfoStudent zyInfoStudent2); + + ZyInfoStudent scccjg(ZyInfoStudent zyInfoStudent, HttpServletRequest req, HttpServletResponse response); + + void batchZyinfoKhcl(String ids); + + List cxtjByJccsbz(); + + void sysWpKsjc(ZyInfoStudent zyInfoStudent, HttpServletResponse response); + + List getWpSycccs(); + + void getWpcccs(); + + List getZyStuId(ZyXzryInfo zyXzryInfo); + + List getZyStuIdById(ZyXzryInfo zyXzryInfo); + + void sckhclxb(); +} diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/zyInfoStudent/service/impl/ZyInfoStudentService2Impl.java b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/zyInfoStudent/service/impl/ZyInfoStudentService2Impl.java new file mode 100644 index 00000000..7dde1388 --- /dev/null +++ b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/zyInfoStudent/service/impl/ZyInfoStudentService2Impl.java @@ -0,0 +1,1352 @@ +package org.jeecg.modules.kc.zyInfoStudent.service.impl; + +import cn.hutool.core.io.FileUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xkcoding.http.HttpUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.system.vo.LoginUser; +import org.jeecg.common.util.DateUtils; +import org.jeecg.common.util.SFTPUtil; +import org.jeecg.common.util.SftpConfig; +import org.jeecg.common.util.SpringContextHolder; +import org.jeecg.modules.kc.kcWechatSendLog.entity.KcWechatSendLog; +import org.jeecg.modules.kc.ktgl.entity.KcKechengbiao; +import org.jeecg.modules.kc.ktgl.service.IKcKechengbiaoService; +import org.jeecg.modules.kc.wjxWjxx.service.IWjxWjxxService; +import org.jeecg.modules.kc.zyCcjg.entity.ZyCcjg; +import org.jeecg.modules.kc.zyCcjg.mapper.ZyCcjgMapper; +import org.jeecg.modules.kc.zyInfo.entity.ZyInfo; +import org.jeecg.modules.kc.zyInfo.entity.ZyXzryInfo; +import org.jeecg.modules.kc.zyInfo.service.IZyInfoService; +import org.jeecg.modules.kc.zyInfoScjl.entity.ZyInfoScjl; +import org.jeecg.modules.kc.zyInfoScjl.service.IZyInfoScjlService; +import org.jeecg.modules.kc.zyInfoStudent.entity.ZyInfoStudent; +import org.jeecg.modules.kc.zyInfoStudent.entity.ZyInfoStudentSys; +import org.jeecg.modules.kc.zyInfoStudent.entity.ZyInfoStudentXbkhcl; +import org.jeecg.modules.kc.zyInfoStudent.mapper.ZyInfoStudentMapper; +import org.jeecg.modules.kc.zyInfoStudent.service.IZyInfoStudent2Service; +import org.jeecg.modules.kc.zyInfoStudent.service.IZyInfoStudentService; +import org.jeecg.modules.tools.Global; +import org.jeecg.modules.tools.dbsdkfzpt.RestTemplateUtils; +import org.jeecg.modules.tools.office.pdf.PDFUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import javax.activation.MimetypesFileTypeMap; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.transaction.Transactional; +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * @Description: 学生提交作业 + * @Author: jeecg-boot + * @Date: 2024-05-06 + * @Version: V1.0 + */ +@Slf4j +@Service +public class ZyInfoStudentService2Impl extends ServiceImpl implements IZyInfoStudent2Service { + + @Autowired + private IZyInfoService zyInfoService; + + @Autowired + private ZyCcjgMapper zyCcjgMapper; + + @Autowired + private IKcKechengbiaoService kcKechengbiaoService; + + @Autowired + private IWjxWjxxService wjxWjxxService; + + @Autowired + SftpConfig sftpConfig; + + private static String uploadpath; + + @Value("${jeecg.path.upload}") + public void setUploadPath(String uploadPath) { + this.uploadpath = uploadPath; + } + + @Value(value = "${jeecg.uploadType}") + private String uploadType; + + private static String weipuId; + + @Value("${weipu.userId}") + public void setWeipuId(String weipuId) { + this.weipuId = weipuId; + } + + + private static String weipuKey; + + @Value("${weipu.userKey}") + public void setWeipuKey(String weipuKey) { + this.weipuKey = weipuKey; + } + + @Value(value = "${jeecg.path.webapp}") + private String downloadpath; + + + @Value("${jeecg.path.upload}") + private String upLoadPath; + + @Autowired + private IZyInfoScjlService zyInfoScjlService; + + + @Override + public boolean save(ZyInfoStudent zyInfoStudent) { + baseMapper.insert(zyInfoStudent); + + return true; + } + + @Override + public void deleteMainId(String id) { + baseMapper.deleteMainId(id); + } + + @Override + public boolean updateById(ZyInfoStudent zyInfoStudent, HttpServletResponse response) { + baseMapper.updateById(zyInfoStudent); + return true; + } + + @Override + public void editFabu(ZyInfoStudent zyInfoStudent) { + baseMapper.updateById(zyInfoStudent); + } + + @Override + public IPage cdxxlist(Page page, QueryWrapper queryWrapper) { + return baseMapper.cdxxlist(page, queryWrapper); + } + + @Override + public List getCcjg(ZyInfoStudent zyInfoStudent) { + return baseMapper.getCcjg(zyInfoStudent); + } + + @Override + public void fabuBatch(List asList) { + for (int i = 0; i < asList.size(); i++) { + ZyInfoStudent zyInfoStudent = new ZyInfoStudent(); + zyInfoStudent.setId(asList.get(i)); + zyInfoStudent.setScoreFabu("1"); + baseMapper.updateById(zyInfoStudent); + } + } + + @Override + public IPage sysList(Page page, QueryWrapper queryWrapper, ZyInfoStudentSys zyInfoStudentSys) { + return baseMapper.sysList(page, queryWrapper, zyInfoStudentSys); + } + + @Override + public List exportSysXls(QueryWrapper queryWrapper, ZyInfoStudentSys zyInfoStudentSys) { + return baseMapper.exportSysXls(queryWrapper, zyInfoStudentSys); + } + + @Override + public boolean stuWpKsjc(ZyInfoStudent zyInfoStudent, HttpServletResponse response) { + String fileName = getFileName(zyInfoStudent.getFilePath(), response); + zyInfoStudent.setFilePath(fileName); + System.out.println("----------------1---------------------" + zyInfoStudent.getStuId()); + if (StringUtils.isEmpty(zyInfoStudent.getStuId())) { + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("a.main_id", zyInfoStudent.getId()); + queryWrapper.eq("a.create_by", sysUser.getUsername()); + List list1 = baseMapper.selectList(queryWrapper); + zyInfoStudent = list1.get(0); + } else { + zyInfoStudent = baseMapper.selectById(zyInfoStudent.getStuId()); + } + + System.out.println("----------------2---------------------" + zyInfoStudent); + ZyInfo zyInfo = zyInfoService.getById(zyInfoStudent.getMainId()); + System.out.println("----------------3---------------------" + zyInfo); + + +// String rwbh = zyInfo.getRwbh(); +// QueryWrapper kcKechengbiaoQueryWrapper = new QueryWrapper<>(); +// kcKechengbiaoQueryWrapper.eq("xqxn",zyInfo.getXnxq()); +// kcKechengbiaoQueryWrapper.eq("rwbh",rwbh); +// kcKechengbiaoQueryWrapper.last("limit 1"); +// KcKechengbiao kcKechengbiao = kcKechengbiaoService.getOne(kcKechengbiaoQueryWrapper); + String cateid = zyInfo.getId() + "" + zyInfo.getTitle(); + String catename = zyInfo.getTitle(); + zyInfoStudent.setCateid(cateid); + zyInfoStudent.setCatename(catename); + + System.out.println("----------------4---------------------"); + //删除维普已经提交的文档 + delweipulunwen(zyInfoStudent, response); + + System.out.println("----------------5---------------------"); + + //外网查重及提交检测 + if (StringUtils.equals(zyInfo.getWwcc(), "true")) { + wwccSave(zyInfoStudent, response); + } + //内网查重及提交检测 + if (StringUtils.equals(zyInfo.getNwcc(), "true")) { + nwccSave(zyInfoStudent, response); + } + //aigc查重及提交检测 + if (StringUtils.equals(zyInfo.getAigccc(), "true")) { + aigcSave(zyInfoStudent, response); + } + //校内查重及提交检测 + if (StringUtils.equals(zyInfo.getXncc(), "true")) { + zyInfoStudent.setCateid("DBSDQXZYBDK001"); + zyInfoStudent.setCatename("东北师大全校作业比对库"); + xnccSave(zyInfoStudent, "1", response);//提交比对 +// }else{ +// zyInfoStudent.setCateid("DBSDQXZYBDK001"); +// zyInfoStudent.setCatename("东北师大全校作业比对库"); +// xnccSave(zyInfoStudent,"0",response);//不提交比对 + } + System.out.println("----------------6---------------------"); + return true; + } + + @Override + public IPage getHpxxList(Page page, QueryWrapper queryWrapper, String zyStuId) { + return baseMapper.getHpxxList(page, queryWrapper, zyStuId); + } + + @Override + public void batchKhcl(List asList) { + for (int i = 0; i < asList.size(); i++) { + ZyInfoStudent zyInfoStudent = new ZyInfoStudent(); + zyInfoStudent.setId(asList.get(i)); + zyInfoStudent.setSfsckhcl("1"); + baseMapper.updateById(zyInfoStudent); + } + } + + @Override + public IPage getList2(Page page, QueryWrapper queryWrapper) { + return baseMapper.getList2(page, queryWrapper); + } + + @Override + public List getDocNoPdfList() { + List ybtkblist = baseMapper.getDocNoPdfList(); + for(ZyInfoStudent zyInfoStudent:ybtkblist){ + try { + Global global = SpringContextHolder.getBean(Global.class); + FileUtil.mkdir(global.getContractDickPath()); + String dd = DateUtils.formatDate(new Date(),"yyyyMMddHHmmss"); + String docPath = upLoadPath+ File.separator+ zyInfoStudent.getFilePath(); + String namePath = dd + ".pdf"; + String pdfPath = global.getContractDickPath() + namePath; + System.out.println("filPath:"+zyInfoStudent.getFilePath()); + System.out.println("docPath:"+docPath); + System.out.println("pdfPath:"+pdfPath); + + PDFUtil.office2PDF(docPath,pdfPath); + zyInfoStudent.setPdfPath("contract/"+namePath); + zyInfoStudent.setPublishTime(new Date()); + baseMapper.updateById(zyInfoStudent); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + return ybtkblist; + } + + //校内查重批量提交 + @Override + public List xnccBatchWeipu(ZyInfoStudent zyInfoStudent, HttpServletResponse response) { + + + ZyInfo zyinfo = zyInfoService.getById(zyInfoStudent.getId()); + if (zyinfo != null && StringUtils.equals(zyinfo.getSfcc(), "1") && StringUtils.equals(zyinfo.getXncc(), "true")) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("a.main_id", zyInfoStudent.getId()); + queryWrapper.isNotNull("a.file_path"); + List list = baseMapper.selectList(queryWrapper); + for (ZyInfoStudent par : list) { + par.setCateid("DBSDQXZYBDK001"); + par.setCatename("东北师大全校作业比对库"); + xnccUpdate(par, "1", response);//提交比对 + } + } + + + return new ArrayList<>(); + } + + @Override + public List cxccByZyId(ZyInfoStudent zyInfoStudent2) { + return baseMapper.cxccByZyId(zyInfoStudent2); + } + + @Override + public ZyInfoStudent scccjg(ZyInfoStudent zyInfoStudent, HttpServletRequest req, HttpServletResponse response) { + ZyInfoStudent zyInfoStudent1 = baseMapper.selectById(zyInfoStudent.getId()); + return null; + } + + @Override + @Transactional + public void batchZyinfoKhcl(String ids) { + + try { + String token = wjxWjxxService.getAccessToken();//获取东北师大开放平台token + System.out.println("======================================="); + System.out.println("token:" + token); + System.out.println("======================================="); + if (org.jeecg.common.util.text.StringUtils.isNotEmpty(token)) {//判断如果token不为空则继续操作 + + String idsList[] = ids.split(","); + String yyyy = DateUtils.formatDate(new Date(), "yyyy"); + String mm = DateUtils.formatDate(new Date(), "MM"); + if (idsList.length > 0) { + for (String zyId : idsList) { + ZyInfo zyInfo = zyInfoService.getById(zyId); + + + //判断没有上传考核材料的数据,才进行上传,否则不上传 + if (zyInfo != null && !org.jeecg.common.util.text.StringUtils.equals("1", zyInfo.getSfsckhcl())) { + QueryWrapper kcKechengbiaoQueryWrapper = new QueryWrapper<>(); + kcKechengbiaoQueryWrapper.eq("rwbh", zyInfo.getRwbh()); + kcKechengbiaoQueryWrapper.eq("jgh", zyInfo.getCreateBy()); + kcKechengbiaoQueryWrapper.eq("xqxn", zyInfo.getXnxq()); + kcKechengbiaoQueryWrapper.last("limit 1"); + KcKechengbiao kcKechengbiao = kcKechengbiaoService.getOne(kcKechengbiaoQueryWrapper); + + + //调用师大接口将数据上传 + String interfaceUrl = "https://intf.nenu.edu.cn/api/bd-api/post/JW_FXCJXMB"; + List> paramsList = new ArrayList<>(); + Map paramMap = new HashMap<>(); + paramMap.put("CJR", zyInfo.getCreateBy());//创建人 + paramMap.put("TEABH", zyInfo.getCreateBy());//教工号 + if (StringUtils.equals(zyInfo.getZyLeixing(), "0")) { + paramMap.put("FXCJMC", "课程作业" + zyInfo.getSort());//分项成绩名称 + paramMap.put("FXCJLXMC", "0");//分项成绩类型 + } else { + paramMap.put("FXCJMC", "期末考试" + zyInfo.getSort());//分项成绩名称 + paramMap.put("FXCJLXMC", "1");//分项成绩类型 + } + paramMap.put("TEADM", zyInfo.getCreateBy());//教工代码 + paramMap.put("TEAXM", kcKechengbiao.getSkjs());//教师姓名 + paramMap.put("FXCJBH", zyInfo.getId());//分项成绩编号 + paramMap.put("XNXQMC", kcKechengbiao.getXnxq());//学年学期 + if(StringUtils.isNotBlank(zyInfo.getContent())){ + zyInfo.setContent(zyInfo.getContent().replaceAll("'","‘")); + } + paramMap.put("ZYYQ", zyInfo.getContent());//作业要求 + paramMap.put("CJSJ", DateUtils.formatDate(zyInfo.getCreateTime(), "yyyy-MM-dd"));//创建时间 + paramMap.put("FXCJBL", zyInfo.getScore());//比例,成绩占比 + paramMap.put("KCMC", kcKechengbiao.getKcmc());//课程名称 + paramMap.put("KCRWDM", zyInfo.getRwbh());//开课任务编号 + if(StringUtils.isNotBlank(zyInfo.getPfbz())){ + zyInfo.setPfbz(zyInfo.getPfbz().replaceAll("'","‘")); + } + paramMap.put("PFBZ", zyInfo.getPfbz());//评分标准 + paramMap.put("FXCJDM", zyInfo.getId());//主键 +// paramMap.put("OPERATE_STATUS","i");//操作状态 + paramsList.add(paramMap); + String data = RestTemplateUtils.post(interfaceUrl, token, paramsList, MediaType.APPLICATION_JSON_UTF8, String.class); + System.out.println("======================================="); + System.out.println("data:" + data); + System.out.println("======================================="); + + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("a.main_id", zyId); +// queryWrapper.isNotNull("a.file_path"); + List list = baseMapper.selectList(queryWrapper); + + + List> paramsList2 =new ArrayList<>(); + for (ZyInfoStudent zyInfoStudentPar2 : list) { + if (StringUtils.isNotEmpty(zyInfoStudentPar2.getFilePath())) { + //上传作业文件 + Map uploadMap = SFTPUtil.upload(sftpConfig, upLoadPath + "/" + zyInfoStudentPar2.getFilePath(), yyyy + "/" + mm + "/" + zyInfo.getRwbh() + "/" + zyInfoStudentPar2.getFilePath().replace("temp/", "/")); + System.out.println("======================================="); + System.out.println("uploadMap:"+uploadMap); + System.out.println("======================================="); + if (StringUtils.equals(uploadMap.get("code"), "0")) { + zyInfoStudentPar2.setFwqPath(uploadMap.get("data")); + } + } + + if (StringUtils.isNotEmpty(zyInfoStudentPar2.getPyFilePath())) { + //上传评阅附件 + Map uploadMap2 = SFTPUtil.upload(sftpConfig, upLoadPath + "/" + zyInfoStudentPar2.getPyFilePath(), yyyy + "/" + mm + "/" + zyInfo.getRwbh() + "/" + zyInfoStudentPar2.getPyFilePath().replace("temp/", "/")); + if (StringUtils.equals(uploadMap2.get("code"), "0")) { + zyInfoStudentPar2.setPyFwqFilePath(uploadMap2.get("data")); + } + } + + zyInfoStudentPar2.setSfsckhcl("1"); + zyInfoStudentPar2.setKhclTime(new Date()); + baseMapper.updateById(zyInfoStudentPar2); + + ZyInfoScjl zyInfoScjl = new ZyInfoScjl(); + zyInfoScjl.setZyId(zyInfo.getId()); + zyInfoScjl.setZyName(zyInfo.getTitle()); + zyInfoScjl.setZyLeixing(zyInfo.getZyLeixing()); + zyInfoScjl.setZyZb(zyInfo.getScore()); + zyInfoScjl.setJgh(kcKechengbiao.getJgh()); + zyInfoScjl.setSkjs(kcKechengbiao.getSkjs()); + zyInfoScjl.setSkdd(kcKechengbiao.getSkdd()); + zyInfoScjl.setKkdw(kcKechengbiao.getKkdw()); + zyInfoScjl.setKkdwid(kcKechengbiao.getKkdwid()); + zyInfoScjl.setKcxz(kcKechengbiao.getKcxz()); + zyInfoScjl.setXnxq(zyInfo.getXnxq()); + zyInfoScjl.setFilePath(zyInfoStudentPar2.getFwqPath()); + zyInfoScjl.setStudentNo(zyInfoStudentPar2.getCreateBy()); + zyInfoScjl.setStudentName(zyInfoStudentPar2.getStudentName()); + zyInfoScjlService.save(zyInfoScjl); + + Map paramMap2 = new HashMap<>(); + paramMap2.put("CJ", zyInfoStudentPar2.getZzdf() + "");//成绩 + paramMap2.put("CJR", zyInfoStudentPar2.getCreateBy());//创建人 + paramMap2.put("CJSJ", DateUtils.formatDate(zyInfoStudentPar2.getCreateTime(), "yyyy-MM-dd"));//创建时间 + paramMap2.put("KCRWDM", zyInfo.getRwbh());//开课任务编号 + paramMap2.put("KCMC", kcKechengbiao.getKcmc());//课程名称 + if (StringUtils.equals(zyInfo.getZyLeixing(), "0")) { + paramMap2.put("FXCJMC", "课程作业" + zyInfo.getSort());//分项成绩名称 + } else { + paramMap2.put("FXCJMC", "期末考试" + zyInfo.getSort());//分项成绩名称 + } + paramMap2.put("TEAXM", kcKechengbiao.getSkjs());//教师姓名 + paramMap2.put("XSXM", zyInfoStudentPar2.getStudentName());//学生姓名 + paramMap2.put("KID", zyInfoStudentPar2.getId());//主键 + paramMap2.put("XSBH", zyInfoStudentPar2.getCreateBy());//学号 + paramMap2.put("FXCJBH", zyInfoStudentPar2.getMainId());//分项成绩编号 + paramMap2.put("PATH", zyInfoStudentPar2.getFwqPath());//附件路径 + paramMap2.put("TEABH", zyInfo.getCreateBy());//教工号 +// paramMap2.put("OPERATE_STATUS","i");//操作状态 + paramsList2.add(paramMap2); +// } +// } + } + + System.out.println("======================================="); + System.out.println("paramsList2:" + paramsList2); + System.out.println("======================================="); + //调用师大接口进行上传 + String interfaceUrl2 = "https://intf.nenu.edu.cn/api/bd-api/post/JW_FXXSCJMX"; + String data2 = RestTemplateUtils.post(interfaceUrl2, token, paramsList2, MediaType.APPLICATION_JSON_UTF8, String.class); + System.out.println("======================================="); + System.out.println("data2:" + data2); + System.out.println("======================================="); + + zyInfo.setSfsckhcl("1"); + zyInfo.setSfsckhclTime(new Date()); + zyInfoService.updateById(zyInfo); + + } + + + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public List cxtjByJccsbz() { + return baseMapper.cxtjByJccsbz(); + } + + @Override + public void sysWpKsjc(ZyInfoStudent zyInfoStudent, HttpServletResponse response) { + String fileName = getFileName(zyInfoStudent.getFilePath(), response); + zyInfoStudent.setFilePath(fileName); + + ZyInfo zyInfo = zyInfoService.getById(zyInfoStudent.getMainId()); + + + String cateid = zyInfo.getId() + "" + zyInfo.getTitle(); + String catename = zyInfo.getTitle(); + zyInfoStudent.setCateid(cateid); + zyInfoStudent.setCatename(catename); + + //删除维普已经提交的文档 + delSysweipulunwen(zyInfoStudent, response); + + + //外网查重及提交检测 +// if(StringUtils.equals(zyInfo.getWwcc(),"true")){ +// wwccSave(zyInfoStudent,response); +// } +// //内网查重及提交检测 +// if(StringUtils.equals(zyInfo.getNwcc(),"true")){ +// nwccSave(zyInfoStudent,response); +// } + //aigc查重及提交检测 + if (StringUtils.equals(zyInfo.getAigccc(), "true")) { + aigcSave(zyInfoStudent, response); + } +// //校内查重及提交检测 +// if(StringUtils.equals(zyInfo.getXncc(),"true")){ +// zyInfoStudent.setCateid("DBSDQXZYBDK001"); +// zyInfoStudent.setCatename("东北师大全校作业比对库"); +// xnccSave(zyInfoStudent,"1",response);//提交比对 +// } + } + + @Override + public List getWpSycccs() { + + List list = new ArrayList<>(); + + String url = "https://vims.fanyu.com/toole/jianceorgan/papercheckcount.aspx"; + JSONObject object = getSycs(url, "1"); + object.put("name", "外网检测"); + + JSONObject object2 = getSycs(url, "3"); + object2.put("name", "AIGC检测"); + + list.add(object); + list.add(object2); + return list; + } + + @Override + public void getWpcccs() { + String url = "https://vims.fanyu.com/toole/jianceorgan/papercheckcount.aspx"; + //获取外网检测剩余查重次数 + JSONObject object = getSycs(url, "1"); + int wwremaincount = object.getIntValue("remaincount"); + if (wwremaincount <= 200) { + KcWechatSendLog kcWechatSendLog = new KcWechatSendLog(); + kcWechatSendLog.setOpenid("2016900057"); + kcWechatSendLog.setYtkcs("维普【外网检测】查重次数不足,剩余" + wwremaincount + "次,请及时充值!"); + sendWxmessage(kcWechatSendLog); + } + + //获取AIGC检测剩余查重次数 + JSONObject object2 = getSycs(url, "3"); + int aigcremaincount = object2.getIntValue("remaincount"); + if (aigcremaincount <= 200) { + KcWechatSendLog kcWechatSendLog = new KcWechatSendLog(); + kcWechatSendLog.setOpenid("2016900057"); + kcWechatSendLog.setYtkcs("维普【AIGC检测】查重次数不足,剩余" + aigcremaincount + "次,请及时充值!"); + sendWxmessage(kcWechatSendLog); + } + } + + @Override + public List getZyStuId(ZyXzryInfo zyXzryInfo) { + return baseMapper.getZyStuId(zyXzryInfo); + } + + @Override + public List getZyStuIdById(ZyXzryInfo zyXzryInfo) { + return baseMapper.getZyStuIdById(zyXzryInfo); + } + + @Override + public void sckhclxb() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("a.sfsckhcl", "1"); +// queryWrapper.eq("a.id", "1865917324597338113"); + queryWrapper.apply("a.fwq_path is null and a.file_path is not null"); + List list = baseMapper.selectList(queryWrapper); + + String yyyy = DateUtils.formatDate(new Date(), "yyyy"); + String mm = DateUtils.formatDate(new Date(), "MM"); + for(ZyInfoStudent zyInfoStudentPar2 :list){ + Map uploadMap = SFTPUtil.upload(sftpConfig, upLoadPath + "/" + zyInfoStudentPar2.getFilePath(), yyyy + "/" + mm + "/xbkhcl/" + zyInfoStudentPar2.getFilePath().replace("temp/", "/")); + System.out.println("======================================="); + System.out.println("uploadMap:"+uploadMap); + System.out.println("======================================="); + if (StringUtils.equals(uploadMap.get("code"), "0")) { + zyInfoStudentPar2.setFwqPath(uploadMap.get("data")); + } + baseMapper.updateById(zyInfoStudentPar2); + + ZyInfoStudentXbkhcl zyInfoStudentXbkhcl = new ZyInfoStudentXbkhcl(); + zyInfoStudentXbkhcl.setKid(zyInfoStudentPar2.getId()); + zyInfoStudentXbkhcl.setPath(zyInfoStudentPar2.getFwqPath()); + baseMapper.insertXbkhcl(zyInfoStudentXbkhcl); + + } + + + + } + + public JSONObject getSycs(String url, String type) { + Map textMap = new HashMap(); + //可以设置多个input的name,value + String sign = getSign(); + textMap.put("sign", sign); + textMap.put("userid", weipuId); + textMap.put("type", type); + String contentType = "";//image/png + String ret = formUpload(url, textMap, null, contentType); + log.error("1-------->" + ret); + JSONObject object = JSONObject.parseObject(ret); + return object; + } + + private void delweipulunwen(ZyInfoStudent zyInfoStudent, HttpServletResponse response) { + zyInfoStudent.setQueryType("0");//外网查重数据 + String paperids = baseMapper.getWpFile(zyInfoStudent); + if (StringUtils.isNotEmpty(paperids)) { + String url = "https://vims.fanyu.com/toole/jianceorgan/paperdel.aspx"; + delWpFile(url, paperids, response); + } + zyInfoStudent.setQueryType("1");//内网查重数据-作业内查重 + Map paperids1 = baseMapper.getXfwWpFile(zyInfoStudent); + if (paperids1 != null) { + String dataids = paperids1.get("paperid"); + String bdkbs = paperids1.get("bdkbs"); + String url = "https://vims.fanyu.com/toole/smallcheck/delData"; + delXfwWpFile(url, bdkbs, dataids, response); + } + zyInfoStudent.setQueryType("3");//内网查重数据-全校内比对 + Map paperids3 = baseMapper.getXfwWpFile(zyInfoStudent); + if (paperids3 != null) { + String dataids = paperids3.get("paperid"); + String bdkbs = paperids3.get("bdkbs"); + String url = "https://vims.fanyu.com/toole/smallcheck/delData"; + delXfwWpFile(url, bdkbs, dataids, response); + } + zyInfoStudent.setQueryType("2");//aigc查重数据 + String paperids2 = baseMapper.getWpFile(zyInfoStudent); + if (StringUtils.isNotEmpty(paperids2)) { + String url = "https://vims.fanyu.com/tool/AIGCCheck/paperDel"; + delWpFile(url, paperids2, response); + } + zyCcjgMapper.deleteByZystuid(zyInfoStudent.getId()); + } + + private void delSysweipulunwen(ZyInfoStudent zyInfoStudent, HttpServletResponse response) { +// zyInfoStudent.setQueryType("0");//外网查重数据 +// String paperids = baseMapper.getWpFile(zyInfoStudent); +// if(StringUtils.isNotEmpty(paperids)){ +// String url = "https://vims.fanyu.com/toole/jianceorgan/paperdel.aspx"; +// delWpFile(url,paperids, response); +// } +// zyInfoStudent.setQueryType("1");//内网查重数据-作业内查重 +// Map paperids1 = baseMapper.getXfwWpFile(zyInfoStudent); +// if(paperids1 != null){ +// String dataids = paperids1.get("paperid"); +// String bdkbs = paperids1.get("bdkbs"); +// String url = "https://vims.fanyu.com/toole/smallcheck/delData"; +// delXfwWpFile(url,bdkbs,dataids, response); +// } +// zyInfoStudent.setQueryType("3");//内网查重数据-全校内比对 +// Map paperids3 = baseMapper.getXfwWpFile(zyInfoStudent); +// if(paperids3 != null){ +// String dataids = paperids3.get("paperid"); +// String bdkbs = paperids3.get("bdkbs"); +// String url = "https://vims.fanyu.com/toole/smallcheck/delData"; +// delXfwWpFile(url,bdkbs,dataids, response); +// } + zyInfoStudent.setQueryType("2");//aigc查重数据 + String paperids2 = baseMapper.getWpFile(zyInfoStudent); + if (StringUtils.isNotEmpty(paperids2)) { + String url = "https://vims.fanyu.com/tool/AIGCCheck/paperDel"; + delWpFile(url, paperids2, response); + } + zyCcjgMapper.deleteByZystuid(zyInfoStudent.getId()); + } + + //aigc提交 + private void aigcSave(ZyInfoStudent zyInfoStudent, HttpServletResponse response) { + String url = "https://vims.fanyu.com/tool/AIGCCheck/paperSubmit"; + //文件路径,文件存在,不存在的话需要先下载下来 +// String fileName = downloadpath+"/"+ zyInfoStudent.getFilePath(); +// if(CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)) { +// fileName = uploadpath+"/"+ zyInfoStudent.getFilePath(); +// } + String fileName = uploadpath + "/" + zyInfoStudent.getFilePath(); + Map textMap = new HashMap(); + //可以设置多个input的name,value + String sign = getSign(); + textMap.put("userid", weipuId); + textMap.put("sign", sign); + String titlePar = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); + String title = titlePar.split("_")[0]; + textMap.put("title", title); + + LoginUser sysUser = new LoginUser(); + sysUser.setUsername(zyInfoStudent.getCreateBy()); + sysUser.setRealname(zyInfoStudent.getStudentName()); + textMap.put("number", sysUser.getUsername()); + textMap.put("author", sysUser.getRealname()); + //设置file的name,路径 + Map fileMap = new HashMap(); + fileMap.put("file", fileName); + String contentType = "";//image/png + String ret = formUpload(url, textMap, fileMap, contentType); + log.info("aigc1-------->" + ret); + log.error("aigcSave:ret-------->" + ret); + JSONObject object = JSONObject.parseObject(ret); + if ("true".equals(object.getString("success"))) { + + + String listpaper = object.getString("listPaper"); + JSONArray jsonArray = (JSONArray) JSONArray.parse(listpaper); + JSONObject object2 = jsonArray.getJSONObject(0); + String paperid = object2.getString("paperid"); + log.info("2-------->" + paperid); + + ZyCcjg zyCcjg = new ZyCcjg(); + zyCcjg.setZyStuId(zyInfoStudent.getId()); + zyCcjg.setPaperid(paperid); + zyCcjg.setCcType("2");//查重类型(0外网 1内网 2aigc) + zyCcjg.setFilestateid("1"); + zyCcjgMapper.insert(zyCcjg); + + //提交后直接开始检测 + String message = aigcKsjc(zyCcjg); + log.info("21-------->" + message); + } else { + log.info("3-------->"); + + ZyCcjg zyCcjg = new ZyCcjg(); + zyCcjg.setZyStuId(zyInfoStudent.getId()); + zyCcjg.setMessage(object.getString("message")); + zyCcjg.setCcType("2");//查重类型(0外网 1内网 2aigc) + zyCcjg.setFilestateid("3"); + zyCcjgMapper.insert(zyCcjg); + } + } + + //aigc开始检测 + public String aigcKsjc(ZyCcjg zyCcjg) { + + String url = "https://vims.fanyu.com/tool/AIGCCheck/paperBeginCheck\n"; + //文件路径,文件存在,不存在的话需要先下载下来 + String paperid = zyCcjg.getPaperid(); + Map textMap = new HashMap(); + //可以设置多个input的name,value + String sign = getSign(); + textMap.put("userid", weipuId); + textMap.put("sign", sign); + textMap.put("paperids", paperid);//资源id + String contentType = "";//image/png + Map fileMap = new HashMap(); + String ret = formUpload(url, textMap, fileMap, contentType); + JSONObject object = JSONObject.parseObject(ret); + String message = object.getString("message"); + return message; + } + + //小范围提交(校园内网提交) + private void nwccSave(ZyInfoStudent zyInfoStudent, HttpServletResponse response) { + String url = "https://vims.fanyu.com/toole/smallcheck/submitData"; + //文件路径,文件存在,不存在的话需要先下载下来 +// String fileName = downloadpath+"/"+ zyInfoStudent.getFilePath(); +// if(CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)) { +// fileName = uploadpath+"/"+ zyInfoStudent.getFilePath(); +// } + String fileName = uploadpath + "/" + zyInfoStudent.getFilePath(); + Map textMap = new HashMap(); + String titlePar = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); + String title = titlePar.split("_")[0]; + //可以设置多个input的name,value + String sign = getSign(); + LoginUser sysUser = new LoginUser(); + sysUser.setUsername(zyInfoStudent.getCreateBy()); + sysUser.setRealname(zyInfoStudent.getStudentName()); + textMap.put("sign", sign); + textMap.put("userid", weipuId); + textMap.put("title", title);//标题 + textMap.put("author", sysUser.getRealname());//作者 + textMap.put("cateid", zyInfoStudent.getCateid());//范围库唯一标识 + textMap.put("catename", zyInfoStudent.getCatename());//范围库名称 + textMap.put("number", sysUser.getUsername());//学号 + //设置file的name,路径 + Map fileMap = new HashMap(); + fileMap.put("file", fileName); + String contentType = "";//image/png + String ret = formUpload(url, textMap, fileMap, contentType); + log.error("nwccSave:ret-------->" + ret); + JSONObject object = JSONObject.parseObject(ret); + if ("true".equals(object.getString("success"))) { + String listpaper = object.getString("datainfo"); + JSONObject object2 = JSON.parseObject(listpaper); + String dataid = object2.getString("dataid");//资源id 后续提交比对/删除文档会试用 + + ZyCcjg zyCcjg = new ZyCcjg(); + zyCcjg.setZyStuId(zyInfoStudent.getId()); + zyCcjg.setPaperid(dataid); + zyCcjg.setCcType("1");//查重类型(0外网 1内网 2aigc) + zyCcjg.setFilestateid("1"); + zyCcjg.setBdkbs(zyInfoStudent.getCateid()); + zyCcjgMapper.insert(zyCcjg); + + //提交后直接开始检测 + String message = xfwbdKsjc(zyCcjg, "1"); + log.info("21-------->" + message); + } else { + log.info("3-------->"); + ZyCcjg zyCcjg = new ZyCcjg(); + zyCcjg.setZyStuId(zyInfoStudent.getId()); + zyCcjg.setMessage(object.getString("message")); + zyCcjg.setCcType("1");//查重类型(0外网 1内网 2aigc) + zyCcjg.setFilestateid("3"); + zyCcjgMapper.insert(zyCcjg); + } + } + + //小范围提交(校园内网提交) + private void xnccSave(ZyInfoStudent zyInfoStudent, String type, HttpServletResponse response) { + String url = "https://vims.fanyu.com/toole/smallcheck/submitData"; + //文件路径,文件存在,不存在的话需要先下载下来 +// String fileName = downloadpath+"/"+ zyInfoStudent.getFilePath(); +// if(CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)) { +// fileName = uploadpath+"/"+ zyInfoStudent.getFilePath(); +// } + String fileName = uploadpath + "/" + zyInfoStudent.getFilePath(); + Map textMap = new HashMap(); + String titlePar = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); + String title = titlePar.split("_")[0]; + //可以设置多个input的name,value + String sign = getSign(); + LoginUser sysUser = new LoginUser(); + sysUser.setUsername(zyInfoStudent.getCreateBy()); + sysUser.setRealname(zyInfoStudent.getStudentName()); + textMap.put("sign", sign); + textMap.put("userid", weipuId); + textMap.put("title", title);//标题 + textMap.put("author", sysUser.getRealname());//作者 + textMap.put("cateid", zyInfoStudent.getCateid());//范围库唯一标识 + textMap.put("catename", zyInfoStudent.getCatename());//范围库名称 + textMap.put("number", sysUser.getUsername());//学号 + //设置file的name,路径 + Map fileMap = new HashMap(); + fileMap.put("file", fileName); + String contentType = "";//image/png + log.info("url--->" + url); + log.info("textMap--->" + textMap); + log.info("fileMap--->" + fileMap); + String ret = formUpload(url, textMap, fileMap, contentType); + log.error("xnccSave:ret-------->" + ret); + JSONObject object = JSONObject.parseObject(ret); + if ("true".equals(object.getString("success"))) { + String listpaper = object.getString("datainfo"); + JSONObject object2 = JSON.parseObject(listpaper); + String dataid = object2.getString("dataid");//资源id 后续提交比对/删除文档会试用 + + //判断是否开始查重 1的时候进行查重,0不查重 + if (StringUtils.equals("1", type)) { + ZyCcjg zyCcjg = new ZyCcjg(); + zyCcjg.setZyStuId(zyInfoStudent.getId()); + zyCcjg.setPaperid(dataid); + zyCcjg.setCcType("3");//查重类型(0外网 1内网 2aigc) + zyCcjg.setFilestateid("1"); + zyCcjg.setBdkbs(zyInfoStudent.getCateid()); + zyCcjgMapper.insert(zyCcjg); + //提交后直接开始检测 + String message = xfwbdKsjc(zyCcjg, "0"); + log.info("21-------->" + message); + } + + } else { + log.info("3-------->"); + ZyCcjg zyCcjg = new ZyCcjg(); + zyCcjg.setZyStuId(zyInfoStudent.getId()); + zyCcjg.setMessage(object.getString("message")); + zyCcjg.setCcType("3");//查重类型(0外网 1内网 2aigc) + zyCcjg.setFilestateid("3"); + zyCcjgMapper.insert(zyCcjg); + } + } + + + /** + * 主要用于教师发布评分后,统一发往维普留存比对库 + * + * @param zyInfoStudent + * @param type + * @param response + */ + private void xnccUpdate(ZyInfoStudent zyInfoStudent, String type, HttpServletResponse response) { + + ZyCcjg zyCcjg = new ZyCcjg(); + try { + QueryWrapper zyCcjgQueryWrapper = new QueryWrapper<>(); + zyCcjgQueryWrapper.eq("zy_stu_id", zyInfoStudent.getId()); + zyCcjgQueryWrapper.eq("create_by", zyInfoStudent.getCreateBy()); + zyCcjgQueryWrapper.eq("cc_type", "3"); + zyCcjg = zyCcjgMapper.selectOne(zyCcjgQueryWrapper); + if (zyCcjg.getPaperid() != null) { + String dataids = zyCcjg.getPaperid(); + String bdkbs = zyCcjg.getBdkbs(); + String url2 = "https://vims.fanyu.com/toole/smallcheck/delData"; + delXfwWpFile(url2, bdkbs, dataids, null); + } + } catch (Exception e) { + e.printStackTrace(); + } + + String url = "https://vims.fanyu.com/toole/smallcheck/submitData"; + //文件路径,文件存在,不存在的话需要先下载下来 + String fileName = uploadpath + "/" + zyInfoStudent.getFilePath(); + Map textMap = new HashMap(); + String titlePar = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); + String title = titlePar.split("_")[0]; + //可以设置多个input的name,value + String sign = getSign(); + LoginUser sysUser = new LoginUser(); + sysUser.setUsername(zyInfoStudent.getCreateBy()); + sysUser.setRealname(zyInfoStudent.getStudentName()); + textMap.put("sign", sign); + textMap.put("userid", weipuId); + textMap.put("title", title);//标题 + textMap.put("author", sysUser.getRealname());//作者 + textMap.put("cateid", zyInfoStudent.getCateid());//范围库唯一标识 + textMap.put("catename", zyInfoStudent.getCatename());//范围库名称 + textMap.put("number", sysUser.getUsername());//学号 + //设置file的name,路径 + Map fileMap = new HashMap(); + fileMap.put("file", fileName); + String contentType = "";//image/png + log.info("url--->" + url); + log.info("textMap--->" + textMap); + log.info("fileMap--->" + fileMap); + String ret = formUpload(url, textMap, fileMap, contentType); + log.info("ret--->" + ret); + JSONObject object = JSONObject.parseObject(ret); + if ("true".equals(object.getString("success"))) { + String listpaper = object.getString("datainfo"); + JSONObject object2 = JSON.parseObject(listpaper); + String dataid = object2.getString("dataid");//资源id 后续提交比对/删除文档会试用 + zyCcjg.setPaperid(dataid); + zyCcjgMapper.updateById(zyCcjg); + } + } + + //小范围对比开始检测 + public String xfwbdKsjc(ZyCcjg zyCcjg, String sfpj) { + String url = "https://vims.fanyu.com/toole/smallcheck/beginCheck"; + //文件路径,文件存在,不存在的话需要先下载下来 + String paperid = zyCcjg.getPaperid(); + Map textMap = new HashMap(); + //可以设置多个input的name,value + String sign = getSign(); + textMap.put("sign", sign); + textMap.put("userid", weipuId); + textMap.put("cateid", zyCcjg.getBdkbs());//比对库的id + textMap.put("dataids", paperid);//资源id + textMap.put("exclude", sfpj);//是否排已(1:排已, 0:不排已) + String contentType = "";//image/png + Map fileMap = new HashMap(); + String ret = formUpload(url, textMap, fileMap, contentType); + JSONObject object = JSONObject.parseObject(ret); + String message = object.getString("message"); + return message; + } + + //外网查重提交方法 + private String wwccSave(ZyInfoStudent zyInfoStudent, HttpServletResponse response) { + + LoginUser sysUser = new LoginUser(); + sysUser.setUsername(zyInfoStudent.getCreateBy()); + sysUser.setRealname(zyInfoStudent.getStudentName()); + String url = "https://vims.fanyu.com/toole/jianceorgan/papersubmit.aspx"; + //文件路径,文件存在,不存在的话需要先下载下来 +// String fileName = downloadpath+"/"+ zyInfoStudent.getFilePath(); +// if(CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)) { +// fileName = uploadpath+"/"+ zyInfoStudent.getFilePath(); +// } + String fileName = uploadpath + "/" + zyInfoStudent.getFilePath(); + Map textMap = new HashMap(); + //可以设置多个input的name,value + String sign = getSign(); + textMap.put("sign", sign); + textMap.put("userid", weipuId); + String titlePar = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); + String title = titlePar.split("_")[0]; + textMap.put("title", title); + textMap.put("number", sysUser.getUsername()); + textMap.put("author", sysUser.getRealname()); + //设置file的name,路径 + Map fileMap = new HashMap(); + fileMap.put("file", fileName); + String contentType = "";//image/png + log.error("fileMap-------->"+fileMap); + log.error("url-------->"+url); + log.error("textMap-------->"+textMap); + log.error("contentType-------->"+contentType); + String ret = formUpload(url, textMap, fileMap,contentType); + log.error("1-------->"+ret); + JSONObject object= JSONObject.parseObject(ret); + if("true".equals(object.getString("success"))){ + String listpaper = object.getString("listpaper"); + JSONArray jsonArray = (JSONArray) JSONArray.parse(listpaper); + JSONObject object2 = jsonArray.getJSONObject(0); + String paperid = object2.getString("paperid"); + log.info("2-------->" + paperid); + ZyCcjg zyCcjg = new ZyCcjg(); + zyCcjg.setZyStuId(zyInfoStudent.getId()); + zyCcjg.setPaperid(paperid); + zyCcjg.setCcType("0");//查重类型(0外网 1内网 2aigc) + zyCcjg.setFilestateid("1"); + zyCcjgMapper.insert(zyCcjg); + //提交后直接开始检测 + String message = wwKsjc(zyCcjg); + log.info("21-------->" + message); + return message; + } else { + log.info("3-------->"); + ZyCcjg zyCcjg = new ZyCcjg(); + zyCcjg.setZyStuId(zyInfoStudent.getId()); + zyCcjg.setMessage(object.getString("message")); + zyCcjg.setCcType("0");//查重类型(0外网 1内网 2aigc) + zyCcjg.setFilestateid("3"); + zyCcjgMapper.insert(zyCcjg); + return "false"; + } + } + + //外网开始检测 + public String wwKsjc(ZyCcjg zyCcjg) { + String url = "https://vims.fanyu.com/toole/jianceorgan/paperbegincheck.aspx"; + //文件路径,文件存在,不存在的话需要先下载下来 + String paperid = zyCcjg.getPaperid(); + Map textMap = new HashMap(); + //可以设置多个input的name,value + String sign = getSign(); + textMap.put("userid", weipuId); + textMap.put("sign", sign); + textMap.put("paperids", paperid);//资源id + String contentType = "";//image/png + Map fileMap = new HashMap(); + String ret = formUpload(url, textMap, fileMap, contentType); + JSONObject object = JSONObject.parseObject(ret); + String message = object.getString("message"); + return message; + } + + private String getFileName(String imgPath, HttpServletResponse response) { + String fileName = ""; + if (CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)) { + fileName = imgPath; + log.info("1111111111111111----------->"); + } else if (CommonConstant.UPLOAD_TYPE_SFTP.equals(uploadType)) { + log.info("22222222222222----------->"); + InputStream inputStream = null; + OutputStream outputStream = null; + try { + int index = imgPath.lastIndexOf("/"); + String path = "temp"; + if (index != -1) { + path = imgPath.substring(0, index); + } + + log.info("path----------->" + path); + Map map = SFTPUtil.download(sftpConfig, imgPath, getDownloadPath(path)); + log.info("map----------->" + map); +// if(!map.get("code").equals("0")){ +// response.setStatus(404); +//// throw new RuntimeException(map.get("msg")); +// } + String localFilePath = map.get("fileName"); +// File file = new File(localFilePath); +// if(!file.exists()){ +// response.setStatus(404); +//// throw new RuntimeException("文件["+imgPath+"]不存在.."); +// } +// log.info("localFilePath----------->"+localFilePath); +// // 设置强制下载不打开 +// response.setContentType("application/force-download"); +// response.addHeader("Content-Disposition", "attachment;fileName=" + new String(file.getName().getBytes("UTF-8"),"iso-8859-1")); +// inputStream = new BufferedInputStream(new FileInputStream(localFilePath)); +// outputStream = response.getOutputStream(); +// byte[] buf = new byte[1024]; +// int len; +// while ((len = inputStream.read(buf)) > 0) { +// outputStream.write(buf, 0, len); +// } +// response.flushBuffer(); + fileName = localFilePath; + log.info("fileName----------->" + fileName); + } catch (Exception e) { + log.info("catch----------->" + e); +// e.printStackTrace(); + } finally { + SFTPUtil.disChannel(); + SFTPUtil.disSession(); + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { +// log.error(e.getMessage(), e); + } + } + } + } else { + log.info("333333333333333----------->"); + } + return fileName; + } + + private String delWpFile(String url, String paperids, HttpServletResponse response) { +// String url = "https://vims.fanyu.com/toole/jianceorgan/paperdel.aspx"; + Map textMap = new HashMap(); + //可以设置多个input的name,value + String sign = getSign(); + textMap.put("sign", sign); + textMap.put("userid", weipuId); + textMap.put("paperids", paperids);//文档paperid集合,多个请用英文逗号隔开 + String contentType = "";//image/png + String ret = formUpload(url, textMap, null, contentType); + log.error("1-------->" + ret); + JSONObject object = JSONObject.parseObject(ret); + if ("true".equals(object.getString("success"))) { + String message = object.getString("message"); + log.info("2-------->" + message); + return "success"; + } else { + return "false"; + } + } + + private String delXfwWpFile(String url, String cateid, String paperids, HttpServletResponse response) { +// String url = "https://vims.fanyu.com/toole/jianceorgan/paperdel.aspx"; + Map textMap = new HashMap(); + //可以设置多个input的name,value + String sign = getSign(); + textMap.put("sign", sign); + textMap.put("userid", weipuId); + textMap.put("cateid", cateid); + textMap.put("dataid", paperids);//文档paperid集合,多个请用英文逗号隔开 + String contentType = "";//image/png + String ret = formUpload(url, textMap, null, contentType); + log.error("1-------->" + ret); + JSONObject object = JSONObject.parseObject(ret); + if ("true".equals(object.getString("success"))) { + String message = object.getString("message"); + log.info("2-------->" + message); + return "success"; + } else { + return "false"; + } + } + + /** + * 获取文件真实路径 + * + * @param path + * @return + */ + private String getDownloadPath(String path) { + String filePath = ""; + if (org.jeecg.common.util.text.StringUtils.isEmpty(path)) { + return ""; + } + int idx = path.indexOf(downloadpath); + if (idx == -1) { + filePath = downloadpath + File.separator + path; + } else { + filePath = path; + } + return filePath; + } + + + //生成sign + public static String getSign() { + String userid = weipuId; + String key = weipuKey; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH"); + String time = sdf.format(new Date()); + String md5Text = userid + key + time; + String sign = org.springframework.util.DigestUtils.md5DigestAsHex((md5Text).getBytes()).toLowerCase(); + return sign; + } + + //推送轻求 + public static String formUpload(String urlStr, Map textMap, Map fileMap, String contentType) { + String res = ""; + HttpURLConnection conn = null; + // boundary就是request头和上传文件内容的分隔符 + String BOUNDARY = "---------------------------123821742118716"; + try { + URL url = new URL(urlStr); + conn = (HttpURLConnection) url.openConnection(); + conn.setConnectTimeout(5000); + conn.setReadTimeout(30000); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setUseCaches(false); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Connection", "Keep-Alive"); + conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); + OutputStream out = new DataOutputStream(conn.getOutputStream()); + // text + if (textMap != null) { + StringBuffer strBuf = new StringBuffer(); + Iterator iter = textMap.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = (Map.Entry) iter.next(); + String inputName = (String) entry.getKey(); + String inputValue = (String) entry.getValue(); + if (inputValue == null) { + continue; + } + strBuf.append("\r\n").append("--").append(BOUNDARY).append("\r\n"); + strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"\r\n\r\n"); + strBuf.append(inputValue); + } + out.write(strBuf.toString().getBytes(StandardCharsets.UTF_8)); + } + // file + if (fileMap != null) { + Iterator iter = fileMap.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = (Map.Entry) iter.next(); + String inputName = (String) entry.getKey(); + String inputValue = (String) entry.getValue(); + if (inputValue == null) { + continue; + } + File file = new File(inputValue); + String filename = file.getName(); + + //没有传入文件类型,同时根据文件获取不到类型,默认采用application/octet-stream + contentType = new MimetypesFileTypeMap().getContentType(file); + //contentType非空采用filename匹配默认的图片类型 + if (!"".equals(contentType)) { + if (filename.endsWith(".png")) { + contentType = "image/png"; + } else if (filename.endsWith(".jpg") || filename.endsWith(".jpeg") || filename.endsWith(".jpe")) { + contentType = "image/jpeg"; + } else if (filename.endsWith(".gif")) { + contentType = "image/gif"; + } else if (filename.endsWith(".ico")) { + contentType = "image/image/x-icon"; + } + } + if (contentType == null || "".equals(contentType)) { + contentType = "application/octet-stream"; + } + StringBuffer strBuf = new StringBuffer(); + strBuf.append("\r\n").append("--").append(BOUNDARY).append("\r\n"); + strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"; filename=\"" + filename + "\"\r\n"); + strBuf.append("Content-Type:" + contentType + "\r\n\r\n"); + out.write(strBuf.toString().getBytes()); + DataInputStream in = new DataInputStream(new FileInputStream(file)); + int bytes = 0; + byte[] bufferOut = new byte[1024]; + while ((bytes = in.read(bufferOut)) != -1) { + out.write(bufferOut, 0, bytes); + } + in.close(); + } + } + byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes(); + out.write(endData); + out.flush(); + out.close(); + // 读取返回数据 + StringBuffer strBuf = new StringBuffer(); + BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); + String line = null; + while ((line = reader.readLine()) != null) { + strBuf.append(line).append("\n"); + } + res = strBuf.toString(); + reader.close(); + reader = null; + } catch (Exception e) { + log.info("发送POST请求出错。" + urlStr); + e.printStackTrace(); + } finally { + if (conn != null) { + conn.disconnect(); + conn = null; + } + } + return res; + } + + // appId + private static final String appId = "wx031697a8ca09a5ce";//东师 + + private static final String agentid = "1000065";// + // appIdSecret + private static final String appIdSecret = "6Qhnge3xfzAQMDX2TcjEyE0vUGP96hP9OTYUsYBze2Y";//东师 + + //微信通知点击后跳转的页面 + private static final String domainTo = "https://smartedu.nenu.edu.cn"; + + public void sendWxmessage(KcWechatSendLog kcWechatSendLog) { + String openId = kcWechatSendLog.getOpenid();//曹老师账号 + System.out.println("openId:" + openId + ""); + if (StringUtils.isNotEmpty(openId)) { + try { + String urlToken = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + appId + "&corpsecret=" + appIdSecret; + System.out.println("urlToken: " + urlToken); + String res = HttpUtil.get(urlToken); + JSONObject jsonObjectToken = JSONObject.parseObject(res); + System.out.println("jsonObjectToken:{}" + jsonObjectToken); + String accessToken = jsonObjectToken.getString("access_token"); + System.out.println("accessToken:{}" + accessToken); + + // 微信的基础accessToken + String url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + accessToken; + Map sendMag = new HashMap<>(); + +// 1、xx老师,你好,您本学期(2023秋)听课要求为:5次,当前实际听课次数:3次,请尽快完成本学期的听课任务。 + String html = kcWechatSendLog.getYtkcs(); + html = html; + sendMag.put("content", html);//授课老师推送内容 + RestTemplate restTemplate = new RestTemplate(); + //拼接base参数 + Map sendBody = new HashMap<>(); + sendBody.put("touser", openId); // openId + sendBody.put("msgtype", "text"); // 消息类型,此时固定为:text + sendBody.put("agentid", agentid); // 企业id + sendBody.put("text", sendMag); //发送内容 + ResponseEntity forEntity = restTemplate.postForEntity(url, sendBody, String.class); + JSONObject jsonObject2 = JSONObject.parseObject(forEntity.getBody()); + System.out.println("jsonObject2 : " + jsonObject2); + String messageCode = jsonObject2.getString("errcode"); + String msgId = jsonObject2.getString("msgid"); + System.out.println("messageCode : " + messageCode + ", msgId: " + msgId); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + } + } +} diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml b/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml index 23567a28..611b42df 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml +++ b/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml @@ -139,7 +139,7 @@ spring: driver-class-name: com.mysql.cj.jdbc.Driver # 多数据源配置 multi-oracle: - url: jdbc:mysql://127.0.0.1:3306/dbsd_zjpt?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&sessionVariables=sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' + url: jdbc:mysql://127.0.0.1:3306/course_information_center_jeecg_db?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&sessionVariables=sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/application-linux.yml b/jeecg-module-system/jeecg-system-start/src/main/resources/application-linux.yml new file mode 100644 index 00000000..b3c416e6 --- /dev/null +++ b/jeecg-module-system/jeecg-system-start/src/main/resources/application-linux.yml @@ -0,0 +1,375 @@ +server: + port: 8080 + tomcat: + max-swallow-size: -1 + error: + include-exception: false + include-stacktrace: NEVER + include-message: NEVER + servlet: + context-path: /jeecg-boot + compression: + enabled: true + min-response-size: 1024 + mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/* + +management: + endpoints: + web: + exposure: + include: metrics,httptrace + +spring: + servlet: + multipart: + max-file-size: 10MB + max-request-size: 10MB + mail: + host: smtp.163.com + username: ?? + password: ?? + properties: + mail: + smtp: + auth: true + starttls: + enable: true + required: true + ## quartz定时任务,采用数据库方式 + quartz: + job-store-type: jdbc + initialize-schema: embedded + #定时任务启动开关,true-开 false-关 + auto-startup: true + #延迟1秒启动定时任务 + startup-delay: 1s + #启动时更新己存在的Job + overwrite-existing-jobs: true + properties: + org: + quartz: + scheduler: + instanceName: MyScheduler + instanceId: AUTO + jobStore: + class: org.springframework.scheduling.quartz.LocalDataSourceJobStore + driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate + tablePrefix: QRTZ_ + isClustered: true + misfireThreshold: 12000 + clusterCheckinInterval: 15000 + threadPool: + class: org.quartz.simpl.SimpleThreadPool + threadCount: 100 + threadPriority: 5 + threadsInheritContextClassLoaderOfInitializingThread: true + #json 时间戳统一转换 + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + jpa: + open-in-view: false + aop: + proxy-target-class: true + #配置freemarker + freemarker: + # 设置模板后缀名 + suffix: .ftl + # 设置文档类型 + content-type: text/html + # 设置页面编码格式 + charset: UTF-8 + # 设置页面缓存 + cache: false + prefer-file-system-access: false + # 设置ftl文件路径 + template-loader-path: + - classpath:/templates + template_update_delay: 0 + # 设置静态文件路径,js,css等 + mvc: + static-path-pattern: /** + #Spring Boot 2.6+后映射匹配的默认策略已从AntPathMatcher更改为PathPatternParser,需要手动指定为ant-path-matcher + pathmatch: + matching-strategy: ant_path_matcher + resource: + static-locations: classpath:/static/,classpath:/public/ + autoconfigure: + exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure + datasource: + druid: + stat-view-servlet: + enabled: true + loginUsername: admin + loginPassword: 123456 + allow: + web-stat-filter: + enabled: true + dynamic: + druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置) + # 连接池的配置信息 + # 初始化大小,最小,最大 + initial-size: 5 + min-idle: 5 + maxActive: 1000 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + # 打开PSCache,并且指定每个连接上PSCache的大小 + poolPreparedStatements: true + maxPoolPreparedStatementPerConnectionSize: 20 + # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 + filters: stat,wall,slf4j + # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 + connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 + datasource: + master: + url: jdbc:mysql://127.0.0.1:3306/course_information_center_jeecg_db?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + username: root + password: ABCabc@123 + # password: root + driver-class-name: com.mysql.cj.jdbc.Driver + # 多数据源配置 + # multi-oracle: + # url: jdbc:oracle:thin:@202.198.129.24:1521:orcl?useUnicode=true&characterEncoding=utf8 + # username: C##XSKC + # password: mAPP2t2ABAfx7 + # driver-class-name: oracle.jdbc.OracleDriver + + multi-oracle: + url: jdbc:oracle:thin:@//202.198.129.24:1521/orcl + username: C##XSKC + password: mAPP2t2ABAfx7 + driver-class-name: oracle.jdbc.OracleDriver + #redis 配置 + redis: + database: 1 + host: 127.0.0.1 + port: 6379 + password: '' +#mybatis plus 设置 +mybatis-plus: + mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml + global-config: + # 关闭MP3.0自带的banner + banner: false + db-config: + #主键类型 0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)"; + id-type: ASSIGN_ID + # 默认数据库表下划线命名 + table-underline: true + configuration: + # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 + #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + # 返回类型为Map,显示null对应的字段 + call-setters-on-nulls: true +#jeecg专用配置 +minidao: + base-package: org.jeecg.modules.jmreport.* +jeecg: + # 是否启用安全模式 + safeMode: false + # 签名密钥串(前后端要一致,正式发布请自行修改) + signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a + # 签名拦截接口 + signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys + #local\minio\alioss + uploadType: local + # uploadType: sftp + # 前端访问地址 + domainUrl: + pc: http://210.47.17.166 + app: http://localhost:8051 + path: + #文件上传根目录 设置 + upload: /opt/jeecg-boot/upload + #webapp文件路径 + webapp: /opt/jeecg-boot/webapp + shiro: + excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**,/api/getUserInfo + #阿里云oss存储和大鱼短信秘钥配置 + oss: + accessKey: ?? + secretKey: ?? + endpoint: oss-cn-beijing.aliyuncs.com + bucketName: jeecgdev + staticDomain: https://static.jeecg.com + # ElasticSearch 设置 + elasticsearch: + cluster-name: jeecg-ES + cluster-nodes: 127.0.0.1:9200 + check-enabled: true + # 在线预览文件服务器地址配置 + file-view-domain: http://fileview.jeecg.com + # minio文件上传 + minio: + minio_url: http://minio.jeecg.com + minio_name: ?? + minio_pass: ?? + bucketName: otatest + #大屏报表参数设置 + jmreport: + mode: prod + #数据字典是否进行saas数据隔离,自己看自己的字典 + saas: false + #是否开启租户模式 Support By v1.5.5+ + openTenant: false + #安全模式(敏感接口校验、saas模式下不允许使用平台数据源) + #safeMode: true + #是否需要校验token + is_verify_token: true + #必须校验方法 + verify_methods: remove,delete,save,add,update + #xxl-job配置 + xxljob: + enabled: false + adminAddresses: http://127.0.0.1:9080/xxl-job-admin + appname: ${spring.application.name} + accessToken: '' + address: 127.0.0.1:30007 + ip: 127.0.0.1 + port: 30007 + logPath: logs/jeecg/job/jobhandler/ + logRetentionDays: 30 + #分布式锁配置 + redisson: + address: 127.0.0.1:6379 + password: + type: STANDALONE + enabled: true +#cas单点登录 +cas: + prefixUrl: https://authserver.nenu.edu.cn/authserver +#Mybatis输出sql日志 +logging: + level: + org.jeecg.modules.system.mapper: info +#swagger +knife4j: + #开启增强配置 + enable: true + #开启生产环境屏蔽 + production: false + basic: + enable: true + username: jeecg + password: jeecg1314 +#第三方登录 +justauth: + enabled: true + type: + GITHUB: + client-id: ?? + client-secret: ?? + redirect-uri: http://sso.test.com:8080/jeecg-boot/sys/thirdLogin/github/callback + WECHAT_ENTERPRISE: + client-id: ?? + client-secret: ?? + redirect-uri: http://sso.test.com:8080/jeecg-boot/sys/thirdLogin/wechat_enterprise/callback + agent-id: ?? + DINGTALK: + client-id: ?? + client-secret: ?? + redirect-uri: http://sso.test.com:8080/jeecg-boot/sys/thirdLogin/dingtalk/callback + WECHAT_OPEN: + client-id: ?? + client-secret: ?? + redirect-uri: http://sso.test.com:8080/jeecg-boot/sys/thirdLogin/wechat_open/callback + cache: + type: default + prefix: 'demo::' + timeout: 1h +#第三方APP对接 +third-app: + enabled: false + type: + #企业微信 + WECHAT_ENTERPRISE: + enabled: false + #CORP_ID + client-id: ?? + #SECRET + client-secret: ?? + #自建应用id + agent-id: ?? + #自建应用秘钥(新版企微需要配置) + # agent-app-secret: ?? + #钉钉 + DINGTALK: + enabled: false + # appKey + client-id: ?? + # appSecret + client-secret: ?? + agent-id: ?? +# libreOffice5(旧)弃用 +libreOffice: + url: 127.0.0.1 + port: 8100 +# 文档转换(新) +jodconverter: + # 使用本机作为转换服务器,如果使用其它主机作为转换服务器,则需要配置remote, + # 请参考 org.jodconverter.boot.autoconfigure.JodConverterRemoteProperties + local: + enabled: true + # 为了避免不必要的兼容问题,需要配置本机的LibreOffice安装目录 + office-home: /usr/lib64/libreoffice + # 配置LibreOffice的服务端口,以逗号分隔,每个端口为一个独立的进程 + port-numbers: 2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020 + # 配置最大的任务队列 + max-tasks-per-process: 100 +# 媒体处理器 +ffmpeg: + # 根路径 + path: D:\ProgramGreeFile\ffmpeg\bin + # 执行命令的核心文件 + executableFile: ${ffmpeg.path}\ffmpeg.exe + # 压缩相关 + compress: + # 是否开启压缩【true:开启压缩 | false:关闭压缩 】 + enable: false + # 日志等级,【 quiet | panic | fatal | error | warning | info | verbose | debug | trace】默认值为info + loglevel: error + # 压缩比,正整数,数越大压缩比越高 + compressionRatio: 50 + # 是否覆盖输出文件【 y:覆盖 | n:不覆盖 】 + isOverwrite: y + # 是否删除源文件【 true:删除源文件 | false:不删除源文件 】 + isDeleteSourceFile: true + # 压缩文件扩展名范围 + extensionFilter: png,jpg,jpeg + # 视频截图相关 + videoScreenshot: + # 日志等级,【 quiet | panic | fatal | error | warning | info | verbose | debug | trace】默认值为info + loglevel: error + # 是否覆盖输出文件【 y:覆盖 | n:不覆盖 】 + isOverwrite: y + # 压缩 数越大,图越小 + compressionRatio: 2 + # 视频过滤器参数,,此处用意为截1张原尺寸当前时间的最新帧 + vf: '"select=not(mod(n\,15)),scale=-1:-1"' +# 维普检测接口 +weipu: + userId: 765996 + userKey: 330ed91f6c7e4600a454a6a5216723bf +wjx: + appid: 1321039 + appkey: 55328ebd11964fc8b40c10011bcb425d + url: https://www.wjx.cn/openapi/default.aspx + +#SFTP +sftp: + hostname: 210.47.29.99 + port: 22 + username: root + password: hmZ2a*G7fwwj + timeout: 1000 + uploadpath: kczx + fullpath: /data \ No newline at end of file