From 23f9c75a94a15d28ad7dbd186b208d1316df736d Mon Sep 17 00:00:00 2001 From: zhouhaibin Date: Thu, 17 Apr 2025 17:35:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BC=BA=E9=99=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 21 +- .../controller/FilePreviewController.java | 232 +++++++++++++ .../controller/YunpingtaiController.java | 16 + .../example/guoyan/mapper/AttachMapper.java | 13 + .../example/guoyan/mapper/OtherMapper.java | 1 + .../example/guoyan/scheduled/MailService.java | 80 +++++ .../guoyan/scheduled/ProcessScheduled.java | 323 ++++++++++++++---- src/main/resources/application-prod.yml | 4 +- src/main/resources/application.yml | 28 +- src/main/resources/mapper/AttachMapper.xml | 9 + src/main/resources/mapper/OtherMapper.xml | 4 + src/main/resources/mapper/SendKpxxMapper.xml | 5 +- 12 files changed, 673 insertions(+), 63 deletions(-) create mode 100644 src/main/java/com/example/guoyan/controller/FilePreviewController.java create mode 100644 src/main/java/com/example/guoyan/mapper/AttachMapper.java create mode 100644 src/main/java/com/example/guoyan/scheduled/MailService.java create mode 100644 src/main/resources/mapper/AttachMapper.xml diff --git a/pom.xml b/pom.xml index fd7cb79..61b3980 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ GuoYan GuoYan - 11 + 1.8 @@ -67,6 +67,25 @@ commons-io 2.8.0 + + org.springframework.boot + spring-boot-starter-mail + + + com.squareup.okhttp3 + okhttp + 4.9.3 + + + org.apache.poi + poi-scratchpad + 3.17 + + + org.apache.poi + poi-ooxml + 3.17 + diff --git a/src/main/java/com/example/guoyan/controller/FilePreviewController.java b/src/main/java/com/example/guoyan/controller/FilePreviewController.java new file mode 100644 index 0000000..164e6b1 --- /dev/null +++ b/src/main/java/com/example/guoyan/controller/FilePreviewController.java @@ -0,0 +1,232 @@ +package com.example.guoyan.controller; + +import com.example.guoyan.mapper.AttachMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.channels.Channels; +import java.nio.channels.FileChannel; +import java.nio.channels.WritableByteChannel; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; + +@RestController +@RequestMapping("/fileview") +@Slf4j +public class FilePreviewController { + + @Autowired + private AttachMapper attachMapper; + @Autowired + private RestTemplate restTemplate; +// @GetMapping("/download") +// public void fileDownload(String id, String dataid, HttpServletResponse response) throws IOException { +// +// InputStream fileInputStream = null; +// BufferedInputStream inputStream = null; +// ServletOutputStream outputStream = null; +// log.info("id: " + id); +// log.info("dataid: " + dataid); +// try { +// // 获取文件信息 +// HashMap fileInfo = attachMapper.selectByid(id); +// String filepath = "/opt/eresource/attachFiles/" + fileInfo.get("filepath"); +// String originalname = fileInfo.get("originalname"); +// File file = new File(filepath); +// +// // 设置响应头 +// response.addHeader("content-disposition", "attachment;filename=" + +// URLEncoder.encode(originalname, "UTF-8") + ";filename*=UTF-8''" + +// URLEncoder.encode(originalname, "UTF-8")); +// response.setContentType("application/octet-stream"); +// response.addHeader("Content-Length", "" + file.length()); +// +// // 读取文件并写入响应流 +// fileInputStream = new FileInputStream(filepath); +// inputStream = new BufferedInputStream(fileInputStream); +// outputStream = response.getOutputStream(); +// +// byte[] bytes = new byte[1024]; +// int len = inputStream.read(bytes); +// while (len != -1) { +// outputStream.write(bytes, 0, len); // 修改这里,使用len而不是bytes.length +// outputStream.flush(); +// len = inputStream.read(bytes); +// } +// +// } catch (IOException e) { +// throw new RuntimeException("文件下载失败", e); +// } finally { +// log.info("文件下载完成"); +// // 关闭流 +// if (inputStream != null) { +// try { +// inputStream.close(); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } +// if (fileInputStream != null) { +// try { +// fileInputStream.close(); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } +// if (outputStream != null) { +// try { +// outputStream.close(); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } +// } +// } +@GetMapping("/download") +public void fileDownload(String id, String dataid, HttpServletResponse response) throws IOException { + try { + // 获取文件信息 + HashMap fileInfo = attachMapper.selectByid(id); + String filepath = "/opt/eresource/attachFiles/" + fileInfo.get("filepath"); + File file = new File(filepath); + + // 设置响应头 + response.setHeader("content-disposition", "attachment;filename=" + + URLEncoder.encode(fileInfo.get("originalname"), "UTF-8") + + ";filename*=UTF-8''" + URLEncoder.encode(fileInfo.get("originalname"), "UTF-8")); + response.setContentType("application/octet-stream"); + response.setContentLength((int) file.length()); + + // 使用NIO通道 + try (FileChannel fileChannel = new FileInputStream(file).getChannel(); + WritableByteChannel outputChannel = Channels.newChannel(response.getOutputStream())) { + + // 使用transferTo方法直接传输数据 + fileChannel.transferTo(0, file.length(), outputChannel); + } + + } catch (Exception e) { + log.error("文件下载失败", e); + throw new RuntimeException("文件下载失败", e); + } +} + @GetMapping("/retrieveImage") + public void retrieveImage(String action, String id, HttpServletResponse response) throws IOException { + try { + // 验证参数 + if (!"retrieve".equals(action) || StringUtils.isEmpty(id)) { + response.sendError(HttpServletResponse.SC_BAD_REQUEST, "参数错误"); + return; + } + + // 获取文件信息 + HashMap fileInfo = attachMapper.selectByid(id); + if (fileInfo == null) { + response.sendError(HttpServletResponse.SC_NOT_FOUND, "图片不存在"); + return; + } + + String filepath = "/opt/eresource/attachFiles/" + fileInfo.get("filepath"); + File file = new File(filepath); + + if (!file.exists()) { + response.sendError(HttpServletResponse.SC_NOT_FOUND, "图片文件不存在"); + return; + } + + // 设置响应头 + String contentType = getContentType(fileInfo.get("originalname")); + response.setContentType(contentType); + response.setContentLength((int) file.length()); + + // 使用NIO通道传输数据 + try (FileChannel fileChannel = new FileInputStream(file).getChannel(); + WritableByteChannel outputChannel = Channels.newChannel(response.getOutputStream())) { + fileChannel.transferTo(0, file.length(), outputChannel); + } + + } catch (Exception e) { + log.error("图片获取失败", e); + response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "图片获取失败"); + } + } + @GetMapping("/preview") + public void previewFile(String id, String dataid, HttpServletRequest request, HttpServletResponse response,Boolean isdownload,String action) throws IOException { + if(isdownload!=null&&isdownload){ + fileDownload(id, dataid, response); + return; + } + if(isdownload==null&&action!=null&&action.equals("retrieve")){ + retrieveImage(action, id, response); + return; + } + try { + log.info("id: " + id); + // 获取文件信息 + HashMap fileInfo = attachMapper.selectByid(id); + String originalname = fileInfo.get("originalname"); + String filetype = fileInfo.get("filetype"); + log.info("originalname: " + originalname); + // 配置信息(建议放在配置文件中) + String kkFileViewUrl = "http://116.62.210.190:8012/onlinePreview"; + String currentServerUrl = ""; + if(filetype!=null&&filetype.contains("image")){ + currentServerUrl = "http://116.62.210.190:8002"; + + }else{ + currentServerUrl = "http://127.0.0.1:8002"; + } + + // 构建原始文件下载URL + String fileUrl = currentServerUrl + "/fileview/download?id=" + id + "&dataid=" + dataid+"&fullfilename="+id+"_"+originalname; + log.info("fileUrl: " + fileUrl); + // Base64编码文件URL + String base64FileUrl = Base64.getEncoder().encodeToString(fileUrl.getBytes()); + log.info("base64FileUrl: " + base64FileUrl); + // 构建完整的预览URL + String previewUrl = kkFileViewUrl + "?url=" + base64FileUrl; + log.info("kkFileViewUrl: " + previewUrl); + + response.sendRedirect(previewUrl); + + } catch (Exception e) { + throw new RuntimeException("文件预览失败", e); + } + } + /** + * 获取文件的ContentType + */ + private String getContentType(String filepath) { + String extension = filepath.substring(filepath.lastIndexOf(".")).toLowerCase(); + switch (extension) { + case ".jpg": + case ".jpeg": + return "image/jpeg"; + case ".png": + return "image/png"; + case ".gif": + return "image/gif"; + case ".webp": + return "image/webp"; + default: + return "application/octet-stream"; + } + } +} diff --git a/src/main/java/com/example/guoyan/controller/YunpingtaiController.java b/src/main/java/com/example/guoyan/controller/YunpingtaiController.java index 445e874..3059819 100644 --- a/src/main/java/com/example/guoyan/controller/YunpingtaiController.java +++ b/src/main/java/com/example/guoyan/controller/YunpingtaiController.java @@ -9,6 +9,7 @@ import com.example.guoyan.entity.SendKpxx; import com.example.guoyan.entity.SendXm; import com.example.guoyan.mapper.*; import com.example.guoyan.response.ResponseBeanForBeiJing; +import com.example.guoyan.scheduled.MailService; import com.example.guoyan.scheduled.ProcessScheduled; import lombok.extern.slf4j.Slf4j; @@ -62,6 +63,9 @@ public class YunpingtaiController { private String loginUrl; @Value("${ypt.deleteUrl}") private String deleteUrl; + @Autowired + private MailService mailService; + @GetMapping() public Result upLoadFile() { String url = loginUrl; @@ -259,4 +263,16 @@ public class YunpingtaiController { String[] s = {"2c9a59b68d401eb1018e5f47201e5d84", "2c9a59b68d401eb1018e5f4720205d85"}; processScheduled.sendfpfielUpdown(headers, s); } + + + /** + * 发送文本邮件 + * @param to + * @param subject + * @param text + */ + @GetMapping("/sendTextMail") + public void sendTextMail(String to,String subject,String text){ + mailService.sendTextMailMessage(to,subject,text); + } } diff --git a/src/main/java/com/example/guoyan/mapper/AttachMapper.java b/src/main/java/com/example/guoyan/mapper/AttachMapper.java new file mode 100644 index 0000000..446d367 --- /dev/null +++ b/src/main/java/com/example/guoyan/mapper/AttachMapper.java @@ -0,0 +1,13 @@ +package com.example.guoyan.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; + +@Mapper +public interface AttachMapper extends BaseMapper { + HashMap selectByid(@Param("id") String id); + +} diff --git a/src/main/java/com/example/guoyan/mapper/OtherMapper.java b/src/main/java/com/example/guoyan/mapper/OtherMapper.java index 15c7230..561a5c2 100644 --- a/src/main/java/com/example/guoyan/mapper/OtherMapper.java +++ b/src/main/java/com/example/guoyan/mapper/OtherMapper.java @@ -40,6 +40,7 @@ public interface OtherMapper extends BaseMapper { void delPermissionuserBack(HashMap map); List> selectHtProcess(@Param("reqid") String id,@Param("setpid") String setpid); List> selctscxmkp1by (@Param("project_no") String id,@Param("sslx") String setpid); + List> selectScKpsqsp_tuipiao_yptbh(@Param("requestid") String id); // List> selectstaffbyid(@Param("number") String id); // List> selectsc_hh1byname(@Param("qymc") String id); // List> selectsc_lxr1byid (@Param("lxr") String id,@Param("qymc") String setpid); diff --git a/src/main/java/com/example/guoyan/scheduled/MailService.java b/src/main/java/com/example/guoyan/scheduled/MailService.java new file mode 100644 index 0000000..5bb0ffa --- /dev/null +++ b/src/main/java/com/example/guoyan/scheduled/MailService.java @@ -0,0 +1,80 @@ +package com.example.guoyan.scheduled; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.mail.javamail.JavaMailSenderImpl; +import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.mail.MessagingException; +import java.util.Date; + +/** + * 邮件业务类 + * @author qzz + */ +@Service +public class MailService { + private static final Logger logger = LoggerFactory.getLogger(MailService.class); + + /** + * 注入邮件工具类 + */ + @Autowired + private JavaMailSenderImpl javaMailSender; + + @Value("${spring.mail.username}") + private String sendMailer; + + /** + * 检测邮件信息类 + * @param to + * @param subject + * @param text + */ + private void checkMail(String to,String subject,String text){ + if(StringUtils.isEmpty(to)){ + throw new RuntimeException("邮件收信人不能为空"); + } + if(StringUtils.isEmpty(subject)){ + throw new RuntimeException("邮件主题不能为空"); + } + if(StringUtils.isEmpty(text)){ + throw new RuntimeException("邮件内容不能为空"); + } + } + + /** + * 发送纯文本邮件 + * @param to + * @param subject + * @param text + */ + public void sendTextMailMessage(String to,String subject,String text){ + + try { + //true 代表支持复杂的类型 + MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(javaMailSender.createMimeMessage(),true); + //邮件发信人 + mimeMessageHelper.setFrom(sendMailer); + //邮件收信人 1或多个 + mimeMessageHelper.setTo(to.split(",")); + //邮件主题 + mimeMessageHelper.setSubject(subject); + //邮件内容 + mimeMessageHelper.setText(text); + //邮件发送时间 + mimeMessageHelper.setSentDate(new Date()); + //发送邮件 + javaMailSender.send(mimeMessageHelper.getMimeMessage()); + System.out.println("发送邮件成功:"+sendMailer+"->"+to); + + } catch (Exception e) { + e.printStackTrace(); + System.out.println("发送邮件失败:"+e.getMessage()); + } + } +} diff --git a/src/main/java/com/example/guoyan/scheduled/ProcessScheduled.java b/src/main/java/com/example/guoyan/scheduled/ProcessScheduled.java index 913bcad..4970028 100644 --- a/src/main/java/com/example/guoyan/scheduled/ProcessScheduled.java +++ b/src/main/java/com/example/guoyan/scheduled/ProcessScheduled.java @@ -25,6 +25,9 @@ import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; import java.io.File; import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; import java.text.SimpleDateFormat; import java.util.*; @@ -91,6 +94,8 @@ public class ProcessScheduled { private KpssProcessNode6IdInfo kpssProcessNode6IdInfo; @Value("${ypt.htqxid}") private String htqxid; + @Autowired + private MailService mailService; private String[] industry = {"政党机关","公检法司","交通运输","医疗卫生","文体教育","农林牧渔", "通信电信","水利水电","航空航天","石油化工","环保绿化","海洋气象","金融保险","科研技术","商业服务","军队"}; /** @@ -145,7 +150,6 @@ public class ProcessScheduled { if ("ZJ".equals(qy)){ sendKpqrsrToYunPingtai(item,headers); } - //开票确认到账 }else if (interfaceType==3&& "ZJ".equals(item.getQy())){ sendKpqrdzToYunPingtai(item,headers); @@ -176,6 +180,12 @@ public class ProcessScheduled { //把查到的数据按次序更新或新增到北京 sendXmList.forEach(iteam -> { iteam.setProjectDescription(null);//项目描述非必填项 + String projectManagerCode = iteam.getProjectManagerCode();//特殊工号处理 + if("0519039".equals(projectManagerCode)){ + iteam.setProjectManagerCode("A300019"); + } else if ("0520021".equals(projectManagerCode)) { + iteam.setProjectManagerCode("052002"); + } List list = Arrays.asList(industry); String projectIndustry = iteam.getProjectIndustry(); if(!list.contains(projectIndustry)){ @@ -211,6 +221,9 @@ public class ProcessScheduled { sendXmLambdaUpdateWrapper.eq(SendXm::getId,iteam.getId()); sendXmLambdaUpdateWrapper.set(SendXm::getErrormessage,responseData.getMessage().toString()); sendXmMapper.update(null, sendXmLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn" + ,"云平台新增项目失败,projectId是" + iteam.getProjectId() + " id是" + iteam.getId() + ,"返回的信息是" + responseData.toString()); } } @@ -227,6 +240,9 @@ public class ProcessScheduled { sendXmLambdaUpdateWrapper.eq(SendXm::getId,iteam.getId()); sendXmLambdaUpdateWrapper.set(SendXm::getErrormessage,"云平台编号为空"); sendXmMapper.update(null, sendXmLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn" + ,"云平台更新项目失败,projectId是" + iteam.getProjectId() + " id是" + iteam.getId() + ,"云平台编号为空"); return; } String name = iteam.getProjectNo()+"*"+iteam.getProjectName(); @@ -251,6 +267,9 @@ public class ProcessScheduled { sendXmLambdaUpdateWrapper.eq(SendXm::getId,iteam.getId()); sendXmLambdaUpdateWrapper.set(SendXm::getErrormessage,responseData.getMessage().toString()); sendXmMapper.update(null, sendXmLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn" + ,"云平台更新项目失败,projectId是" + iteam.getProjectId() + " id是" + iteam.getId() + ,"返回的信息是" + responseData.toString()); } } }); @@ -262,6 +281,9 @@ public class ProcessScheduled { if("邀请招标".equals(winningBidWay)){ item.setWinningBidWay("内部邀请"); } + if("询比采购".equals(winningBidWay)){ + item.setWinningBidWay("公开招标"); + } //用项目id 查询项目金额 HashMap hashMap = new HashMap<>(); String requestid = item.getRequestid(); @@ -287,17 +309,28 @@ public class ProcessScheduled { if (contractAmount.compareTo(amt)!=0){ //更新数据需要所有字段都有值,所以去查最新的一笔更新记录,改一下合同金额 List sendXms = sendXmMapper.querySendXmByProjectId(item.getProjectId()); - SendXm sendXm = sendXms.get(0);//得到最新的一条已修改记录 - sendXm.setContractAmount(contractAmount);//修改金额 - sendXm.setProjectNo(item.getProjectNo());//修改项目编号 - HttpEntity request = new HttpEntity<>(sendXm, headers); - ResponseBeanForBeiJing responseData = restTemplate.postForObject(projectUrl, request, ResponseBeanForBeiJing.class); - if ("200".equals(responseData.getCode())) { - log.info("更新项目金额到云平台成功"); - log.info(responseData.toString()); - } else { - log.info("更新项目金额失败,projectId是" + sendXm.getProjectId() + " id是" + sendXm.getId()); - log.info("返回的信息是" + responseData.toString()); + + try { + if (sendXms.size() >= 0) { + SendXm sendXm = sendXms.get(0);//得到最新的一条已修改记录 + sendXm.setContractAmount(contractAmount);//修改金额 + sendXm.setProjectNo(item.getProjectNo());//修改项目编号 + HttpEntity request = new HttpEntity<>(sendXm, headers); + ResponseBeanForBeiJing responseData = restTemplate.postForObject(projectUrl, request, ResponseBeanForBeiJing.class); + if ("200".equals(responseData.getCode())) { + log.info("更新项目金额到云平台成功"); + log.info(responseData.toString()); + } else { + log.info("更新项目金额失败,projectId是" + sendXm.getProjectId() + " id是" + sendXm.getId()); + log.info("返回的信息是" + responseData.toString()); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "云平台合同更新项目金额失败,projectId是" + sendXm.getProjectId() + " id是" + sendXm.getId() + , "返回的信息是" + responseData.toString()); + } + } + } + catch (Exception e){ + } } //0表示新增,要传到北京 @@ -329,6 +362,9 @@ public class ProcessScheduled { sendHtLambdaUpdateWrapper.eq(SendHt::getId, item.getId());//更新条件 sendHtLambdaUpdateWrapper.set(SendHt::getErrormessage,responseData.getMessage().toString());//更新的值 sendHtMapper.update(null, sendHtLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "云平台新增合同失败,projectId是" + item.getContractId() + " id是" + item.getId() + ,"返回的信息是" + responseData.toString()); } } //修改 @@ -365,6 +401,9 @@ public class ProcessScheduled { sendHtLambdaUpdateWrapper.eq(SendHt::getId, item.getId());//更新条件 sendHtLambdaUpdateWrapper.set(SendHt::getErrormessage,responseData.getMessage().toString());//更新的值 sendHtMapper.update(null, sendHtLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "云平台更新合同失败,projectId是" + item.getContractId() + " id是" + item.getId() + ,"返回的信息是" + responseData.toString()); } } }); @@ -390,18 +429,25 @@ public class ProcessScheduled { } if("信息技术咨询监理服务费".equals(sendKpxx.getInvoiceContent())){ sendKpxx.setInvoiceContent("监理咨询服务费"); + } else if ("信息监理运维服务费".equals(sendKpxx.getInvoiceContent())) { + sendKpxx.setInvoiceContent("运维监理服务费"); } if(StringUtils.isBlank(sendKpxx.getPayerNumber())){ sendKpxx.setPayerNumber("/"); } +// sendKpxx.setApplyUserCode("0519999"); sendKpxx.setReceiptScheduleName(null); //新增 - String[] evidenceIds = sendKpxx.getEvidenceId().split(",");//获取文件id组 - String evidenceid= sendfpfielUpdown(headers,evidenceIds);//上传文件信息 + if(sendKpxx.getEvidenceId()!=null){ + String[] evidenceIds = sendKpxx.getEvidenceId().split(",");//获取文件id组 + String evidenceid= sendfpfielUpdown(headers,evidenceIds);//上传文件信息 // if() - if(evidenceid.length()>0){ - evidenceid=evidenceid.substring(0,evidenceid.length()-1); + if(evidenceid.length()>0){ + evidenceid=evidenceid.substring(0,evidenceid.length()-1); + } + sendKpxx.setEvidenceId(evidenceid); } + //因为会驳回,驳回后在提交就是修改状态,查询是否有退回记录,如果有要重新提交 if(sendKpxx.getOperatetype()==1){ LambdaQueryWrapper sendKpxxLambdaQueryWrapper = new LambdaQueryWrapper<>(); @@ -437,19 +483,34 @@ public class ProcessScheduled { String fplx = hashMapScKpsqsp.get("fplx"); String fpzl = hashMapScKpsqsp.get("fpzl"); //发票种类如果是电子发票 - if("2c9a59b680e0190f0181224a7a76045a".equals(fpzl)){ + if("2c9a59b680e0190f0181224a7a76045a".equals(fpzl)&&"增值税普通发票".equals(sendKpxx.getInvoiceType())){ sendKpxx.setInvoiceType("增值税电子普通发票"); + }else if("2c9a59b680e0190f0181224a5c740459".equals(fpzl)&&"数电专用发票".equals(sendKpxx.getInvoiceType())){ + sendKpxx.setInvoiceType("增值税专用发票"); + } + String specialInfo = sendKpxx.getSpecialInfo(); + if(specialInfo==null){ + specialInfo=""; + } + String dz = ""; + String dh = ""; + String zh = ""; + String khx =""; + if(hashMapScKpsqsp.get("dz")!=null){ + dz = hashMapScKpsqsp.get("dz"); + } + if(hashMapScKpsqsp.get("dh")!=null){ + dh = hashMapScKpsqsp.get("dh"); } - if("2c9adae478fdbe15017906eca5710259".equals(fplx)){ - String dz = hashMapScKpsqsp.get("dz"); - String dh = hashMapScKpsqsp.get("dh"); - String zh = hashMapScKpsqsp.get("zh"); - String khx = hashMapScKpsqsp.get("khx"); - String specialInfo= "开户行:"+khx+" ,账号:"+zh+" ,地址及电话:"+dz+dh; - sendKpxx.setSpecialInfo(specialInfo); + if(hashMapScKpsqsp.get("zh")!=null){ + zh = hashMapScKpsqsp.get("zh"); } + if(hashMapScKpsqsp.get("khx")!=null){ + khx = hashMapScKpsqsp.get("khx"); + } + specialInfo+= "。开户行:"+khx+" ,账号:"+zh+" ,地址及电话:"+dz+dh; + sendKpxx.setSpecialInfo(specialInfo); headers.setContentType(MediaType.APPLICATION_JSON); - sendKpxx.setEvidenceId(evidenceid); String xsfzr =""; //退票要先删掉原来的到账信息 String projectid = sendKpxx.getProjectNo();//项目编号,其他的是云平台编号 @@ -467,7 +528,14 @@ public class ProcessScheduled { sendKpxx.setProjectNo(yptbh); if(yptbh ==null){ log.info("开票申请更新项目西悉尼更新失败,projectId是" + iteam.getProjectId()); - log.info("云平台编号为空" ); + log.info("项目开票云平台编号为空" ); + LambdaUpdateWrapper sendKpxxLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 + sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, "项目开票云平台编号为空");//更新的值 + sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "新增退票开票信息失败,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"项目开票云平台编号为空" ); return; } String name = iteam.getProjectNo()+"*"+iteam.getProjectName(); @@ -485,6 +553,22 @@ public class ProcessScheduled { } if(sendKpxx.getIsReturn()==1){ + String requestid = sendKpxx.getRequestid(); + HashMap hashMap = otherMapper.selectScKpsqsp_tuipiao_yptbh(requestid).get(0); + if(hashMap==null||hashMap.get("yptbh")==null) { + log.info("退票发票信息为空"); + log.info("新增退票开票信息失败,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId()); + LambdaUpdateWrapper sendKpxxLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 + sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, "退票发票云平台编号为空");//更新的值 + sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "新增退票开票信息失败,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"退票发票云平台编号为空" ); + return; + } + String yptbh = hashMap.get("yptbh"); + sendKpxx.setInvoiceNo(yptbh); deleteFpdzrq(headers,sendKpxx); if(sendKpxx.getInvoiceNo()==null){ log.info("退票发票发票编号不能为空"); @@ -493,9 +577,11 @@ public class ProcessScheduled { sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, "退票发票发票编号不能为空");//更新的值 sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "新增退票开票信息失败,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"退票发票发票编号不能为空" ); } headers.setContentType(MediaType.APPLICATION_JSON); - sendKpxx.setEvidenceId(evidenceid); sendKpxx.setReturnInvoiceNo(sendKpxx.getInvoiceNo()); HttpEntity request = new HttpEntity<>(sendKpxx, headers); ResponseBeanForBeiJing responseData = restTemplate.postForObject(invoiceUrl,request, ResponseBeanForBeiJing.class); @@ -503,7 +589,16 @@ public class ProcessScheduled { LambdaUpdateWrapper sendKpxxLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 sendKpxxLambdaUpdateWrapper.set(SendKpxx::getStatus, 1);//更新的值 + if(sendKpxx.getOperatetype()==1){ + sendKpxxLambdaUpdateWrapper.set(SendKpxx::getOperatetype, 0);//更新的值符合查询条件 + } sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + Map dataMap = (Map) responseData.getData(); + String invoiceNo = dataMap.get("invoiceNo").toString(); + HashMap paramMap = new HashMap<>(); + paramMap.put("yptbh", invoiceNo); + paramMap.put("id", sendKpxx.getRequestid()); + otherMapper.updateScKpsqsp_yptbh_Byid(paramMap);//把返回的项目编号存入Sc_kssqsp log.info("新增退票开票信息到云平台成功"); log.info(responseData.toString()); } else { @@ -513,6 +608,9 @@ public class ProcessScheduled { sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, responseData.getMessage().toString());//更新的值 sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "新增退票开票信息失败,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"返回的信息是" + responseData.toString()); } return; } @@ -541,12 +639,15 @@ public class ProcessScheduled { } else { log.info("新增开票信息失败,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId()); log.error("返回的信息是" + responseData.toString()); + log.info("项目编号是"+sendKpxx.toString()); //记录错误信息 LambdaUpdateWrapper sendKpxxLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getRequestid, sendKpxx.getRequestid());//更新条件 sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, responseData.getMessage().toString());//更新的值 sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); - + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "新增开票信息失败,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"返回的信息是" + responseData.toString()); } } // //修改 @@ -601,6 +702,9 @@ public class ProcessScheduled { sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, "发票发票编号不能为空");//更新的值 sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "开票收入报错,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"发票发票编号不能为空"); return; } @@ -614,6 +718,9 @@ public class ProcessScheduled { sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, beanForBeiJing.getMessage().toString());//更新的值 sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "申请审批状态报错,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"报错信息" + beanForBeiJing.getMessage().toString()); return; } Map dataMap = (Map) beanForBeiJing.getData(); @@ -651,6 +758,9 @@ public class ProcessScheduled { sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, responseData.getMessage().toString());//更新的值 sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "新增开票确认失败,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"发票发票编号不能为空" + responseData.getMessage().toString()); } } //修改 @@ -666,6 +776,9 @@ public class ProcessScheduled { sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, "invoiceNo发票发票编号不能为空");//更新的值 sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "新增开票确认收入失败,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"invoiceNo发票发票编号不能为空" ); return; } String invoiceNo = stringStringHashMap.get("yptbh"); @@ -686,6 +799,9 @@ public class ProcessScheduled { sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, beanForBeiJing.getMessage().toString());//更新的值 sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "申请审批状态报错,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"报错信息" + beanForBeiJing.getMessage().toString()); return; } Map dataMap = (Map) beanForBeiJing.getData(); @@ -722,6 +838,9 @@ public class ProcessScheduled { sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, responseData.getMessage().toString());//更新的值 sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "新增开票确认收入失败,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"报错信息" + responseData.getMessage().toString()); } } //修改 @@ -749,7 +868,12 @@ public class ProcessScheduled { LambdaUpdateWrapper sendKpxxLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 sendKpxxLambdaUpdateWrapper.set(SendKpxx::getStatus, 1);//更新的值 + sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + sendKpxxLambdaUpdateWrapper.clear(); + sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getWfrequest, sendKpxx.getWfrequest());//更新条件 + sendKpxxLambdaUpdateWrapper.isNull(SendKpxx::getStatus);//更新条件 + sendKpxxMapper.delete(sendKpxxLambdaUpdateWrapper); log.info("删除后新增开票确认到云平台成功"); log.info(responseData.toString()); return; @@ -759,12 +883,25 @@ public class ProcessScheduled { LambdaUpdateWrapper sendKpxxLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 sendKpxxLambdaUpdateWrapper.set(SendKpxx::getStatus, responseData.getMessage().toString());//更新的值 + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "修改开票确认收入失败,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"报错信息" + responseData.getMessage().toString()); sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); }else if (sendKpxx.getOperatetype()==2){ invoiceNo = otherMapper.selectScKpsqsp_yptbh_Byreqid(sendKpxx.getWfrequest()).get("yptbh"); sendKpxx.setInvoiceNo(invoiceNo); sendKpxx.setOpFlag(1); - String incomeId = otherMapper.selectScKpcwqrsr_incomeId_Bylcid(sendKpxx.getWfrequest()).get("incomeId"); + String incomeId =""; + try { + incomeId = otherMapper.selectScKpcwqrsr_incomeId_Bylcid(sendKpxx.getWfrequest()).get("incomeId"); + }catch (Exception e){ + LambdaUpdateWrapper sendKpxxLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 + sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, "不存在incomeId");//更新的值 + sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + return; + } + sendKpxx.setIncomeId(incomeId); HttpEntity request1 = new HttpEntity<>(sendKpxx, headers); ResponseBeanForBeiJing responseData = restTemplate.postForObject(incomeUrl,request1, ResponseBeanForBeiJing.class); @@ -784,6 +921,9 @@ public class ProcessScheduled { sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, responseData.getMessage().toString());//更新的值 sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "删除开票确认收入失败,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"报错信息" + responseData.getMessage().toString()); } } } @@ -798,6 +938,9 @@ public class ProcessScheduled { sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, "invoiceNo发票发票编号不能为空");//更新的值 sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "确认收入到账失败,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"invoiceNo发票发票编号不能为空"); return; } String invoiceNo = stringStringHashMap.get("yptbh"); @@ -818,6 +961,9 @@ public class ProcessScheduled { sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, beanForBeiJing.getMessage().toString());//更新的值 sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "查询审批状态,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"报错信息" + beanForBeiJing.getMessage().toString()); return; } Map dataMap = (Map) beanForBeiJing.getData(); @@ -854,6 +1000,9 @@ public class ProcessScheduled { sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, responseData.getMessage().toString());//更新的值 sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "删除开票确认到账失败,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"报错信息" + responseData.getMessage().toString()); } } //修改 @@ -891,6 +1040,9 @@ public class ProcessScheduled { sendKpxxLambdaUpdateWrapper.eq(SendKpxx::getId, sendKpxx.getId());//更新条件 sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, responseData.getMessage().toString());//更新的值 sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "修改开票确认收入失败,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"报错信息" + responseData.getMessage().toString()); } } @@ -899,6 +1051,12 @@ public class ProcessScheduled { List sendKpxxToYPTList = sendKpxxMapper.querySendToYPT(); sendKpxxToYPTList.forEach(item->{ String invoiceNo = item.getInvoiceNo(); + if(invoiceNo==null){ + String requestid = item.getRequestid(); + HashMap hashMap = otherMapper.selectScKpsqsp_tuipiao_yptbh(requestid).get(0); + String yptbh = hashMap.get("yptbh"); + invoiceNo=yptbh; + } HttpEntity request = new HttpEntity<>(null, headers); ResponseEntity exchange = restTemplate.exchange(InvoicingApprovalStatusUrl+"/"+invoiceNo, HttpMethod.GET, request, ResponseBeanForBeiJing.class); ResponseBeanForBeiJing beanForBeiJing = exchange.getBody(); @@ -913,7 +1071,6 @@ public class ProcessScheduled { Map dataMap = (Map) beanForBeiJing.getData(); Integer status = (Integer) dataMap.get("status"); Date nowData = new Date(); - if (status==2 || status==4){//已确认 //更新这边的流程 String processId = sendKpxxMapper.selectProcessId(item.getRequestid()); @@ -1100,33 +1257,82 @@ public class ProcessScheduled { }); } //发送发票文件 - public String sendfpfielUpdown(HttpHeaders headers,String[] evidenceIds){ - String evidenceid=""; - for (String id:evidenceIds) { - //查询 - HashMap fileMap = otherMapper.selectFileById(id); - String filePath = fileMap.get("filepath"); - String originalName = fileMap.get("originalName"); - filePath =fileDownPre+filePath; - File file1 = new File(filePath); - //文件不存在 创建文件夹 - if(!file1.exists()){ - file1.mkdirs(); - } - String newfilepath = filePath+File.separator+originalName; - downloadFileFromSshServer(filePath,newfilepath); - File file = new File(newfilepath); - if(file.exists()){ - headers.setContentType(MediaType.MULTIPART_FORM_DATA); - MultiValueMap body = new LinkedMultiValueMap<>(); - body.add("file", new FileSystemResource(new File(newfilepath))); - HttpEntity> request = new HttpEntity<>(body, headers); - ResponseBeanForBeiJing responseData = restTemplate.postForObject(uploadFileUrl ,request, ResponseBeanForBeiJing.class); - //文件处理 - String dataString = responseData.getData().toString(); - evidenceid = evidenceid+dataString+","; - }else { - log.info("文件不存在,文件位置"+filePath); +// public String sendfpfielUpdown(HttpHeaders headers,String[] evidenceIds){ +// String evidenceid=""; +// for (String id:evidenceIds) { +// //查询 +// HashMap fileMap = otherMapper.selectFileById(id); +// String filePath = fileMap.get("filepath"); +// String originalName = fileMap.get("originalName"); +// filePath =fileDownPre+filePath; +// File file1 = new File(filePath); +// //文件不存在 创建文件夹 +// if(!file1.exists()){ +// file1.mkdirs(); +// } +// String newfilepath = filePath+File.separator+originalName; +// downloadFileFromSshServer(filePath,newfilepath); +// File file = new File(newfilepath); +// if(file.exists()){ +// headers.setContentType(MediaType.MULTIPART_FORM_DATA); +// MultiValueMap body = new LinkedMultiValueMap<>(); +// body.add("file", new FileSystemResource(new File(newfilepath))); +// HttpEntity> request = new HttpEntity<>(body, headers); +// ResponseBeanForBeiJing responseData = restTemplate.postForObject(uploadFileUrl ,request, ResponseBeanForBeiJing.class); +// //文件处理 +// String dataString = responseData.getData().toString(); +// evidenceid = evidenceid+dataString+","; +// }else { +// log.info("文件不存在,文件位置"+filePath); +// } +// } +// return evidenceid; +// } + public String sendfpfielUpdown(HttpHeaders headers, String[] evidenceIds) { + String evidenceid = ""; + for (String id : evidenceIds) { + File tempFile = null; + try { + // 查询文件信息 + HashMap fileMap = otherMapper.selectFileById(id); + String filePath = fileDownPre + fileMap.get("filepath"); + String originalName = fileMap.get("originalName"); + + // 构建原文件 + File originalFile = new File(filePath); + if (originalFile.exists()) { + // 在同目录下创建使用原始文件名的临时文件 + tempFile = new File(originalFile.getParent(), originalName); + + // 复制文件 + Files.copy(originalFile.toPath(), tempFile.toPath(), StandardCopyOption.REPLACE_EXISTING); + + // 设置请求头和请求体 + headers.setContentType(MediaType.MULTIPART_FORM_DATA); + MultiValueMap body = new LinkedMultiValueMap<>(); + body.add("file", new FileSystemResource(tempFile)); + + // 发送请求 + HttpEntity> request = new HttpEntity<>(body, headers); + ResponseBeanForBeiJing responseData = restTemplate.postForObject(uploadFileUrl, request, ResponseBeanForBeiJing.class); + + // 处理响应 + String dataString = responseData.getData().toString(); + evidenceid = evidenceid + dataString + ","; + } else { + log.info("文件不存在,文件位置:" + filePath); + } + } catch (Exception e) { + log.error("文件处理过程发生错误", e); + } finally { + // 删除临时文件 + if (tempFile != null && tempFile.exists()) { + try { + Files.delete(tempFile.toPath()); + } catch (IOException e) { + log.error("临时文件删除失败:" + tempFile.getAbsolutePath(), e); + } + } } } return evidenceid; @@ -1181,6 +1387,9 @@ public class ProcessScheduled { sendKpxxLambdaUpdateWrapper.set(SendKpxx::getErrormessage, responseData.getMessage().toString());//更新的值 sendKpxxMapper.update(null, sendKpxxLambdaUpdateWrapper); log.info("删除到账信息失败"+responseData.toString()); + mailService.sendTextMailMessage("yuanyuan.jin@srit.com.cn", + "删除到账信息失败,projectId是" + sendKpxx.getProjectNo() + " id是" + sendKpxx.getId() + ,"删除到账信息失败"+responseData.toString()); } return false; } diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 20273e2..257a9cc 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -7,12 +7,12 @@ spring: username: root password: Guoyan83086775 type: com.alibaba.druid.pool.DruidDataSource - # 数据源其他配置 + # 数据源其他配置 logging: # 配置日志文件存储位置 file: - path: /opt/log + path: /opt/guoyanlog ypt: username: '0519999' xmhtusername: '0510002' diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 8e2b926..a1e167c 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,5 +1,5 @@ server: - port: 9002 + port: 8002 spring: application: @@ -9,7 +9,33 @@ spring: # 是否允许定义重名的bean对象覆盖原有的bean (spring boot默认是false) # main: # allow-bean-definition-overriding: true + mail: + #配置smtp服务主机地址 + # qq邮箱为smtp.qq.com 端口号465或587 + # sina smtp.sina.cn + # aliyun smtp.aliyun.com + # 163 smtp.163.com 端口号465或994 + host: smtp.qq.com + #发送者邮箱 + username: 852702845@qq.com + #配置密码,注意不是真正的密码,而是刚刚申请到的授权码 + password: rmrifkwcmmhybbac + #端口号465或587 + port: 587 + #默认的邮件编码为UTF-8 + default-encoding: UTF-8 + #其他参数 + properties: + mail: + #配置SSL 加密工厂 + smtp: + ssl: + #本地测试,先放开ssl + enable: false + required: false + #开启debug模式,这样邮件发送过程的日志会在控制台打印出来,方便排查错误 + debug: true mybatis-plus: configuration: #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,开启按照驼峰命名法映射 diff --git a/src/main/resources/mapper/AttachMapper.xml b/src/main/resources/mapper/AttachMapper.xml new file mode 100644 index 0000000..6c5354d --- /dev/null +++ b/src/main/resources/mapper/AttachMapper.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/OtherMapper.xml b/src/main/resources/mapper/OtherMapper.xml index ba4c4c7..693c728 100644 --- a/src/main/resources/mapper/OtherMapper.xml +++ b/src/main/resources/mapper/OtherMapper.xml @@ -71,4 +71,8 @@ + \ No newline at end of file diff --git a/src/main/resources/mapper/SendKpxxMapper.xml b/src/main/resources/mapper/SendKpxxMapper.xml index b46286e..fa3db13 100644 --- a/src/main/resources/mapper/SendKpxxMapper.xml +++ b/src/main/resources/mapper/SendKpxxMapper.xml @@ -60,7 +60,8 @@ remark_info, special_info, evidence_id, - (SELECT number0 from staff b WHERE b.id = apply_user_code) as apply_user_code, + + (SELECT number0 from staff b WHERE b.id = (select xsfzr from sc_xmkp1 where id =project_no)) as apply_user_code, confirm_date, (SELECT number0 from staff b WHERE b.id = confirm_user_code) confirm_user_code, income_date, @@ -101,7 +102,7 @@ remark_info, special_info, evidence_id, - (SELECT number0 from staff b WHERE b.id = apply_user_code) as apply_user_code, + (SELECT number0 from staff b WHERE b.id = (select xsfzr from sc_xmkp1 where id =project_no)) as apply_user_code, confirm_date, (SELECT number0 from staff b WHERE b.id = confirm_user_code) confirm_user_code, income_date,