From aa0254aa12fca134350f0b8c4e97c346e14e7942 Mon Sep 17 00:00:00 2001 From: wxc <191104855@qq.com> Date: Mon, 4 Mar 2024 20:31:41 +0800 Subject: [PATCH 1/3] =?UTF-8?q?BUG=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/biutag/lan/domain/MailReturn.java | 8 +++++++- .../java/com/biutag/lan/flow/node/CountersignFlow.java | 3 ++- .../java/com/biutag/lan/flow/node/FirstApprovalFlow.java | 1 - .../src/main/java/com/biutag/outer/OuterApplication.java | 2 ++ 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/mailbox-lan/src/main/java/com/biutag/lan/domain/MailReturn.java b/mailbox-lan/src/main/java/com/biutag/lan/domain/MailReturn.java index 5b56cc8..6028352 100644 --- a/mailbox-lan/src/main/java/com/biutag/lan/domain/MailReturn.java +++ b/mailbox-lan/src/main/java/com/biutag/lan/domain/MailReturn.java @@ -15,14 +15,17 @@ public class MailReturn { @TableId(type = IdType.AUTO) private Integer id; + /** * */ private String mailId; + /** * 退回原因 */ private String reason; + /** * */ @@ -37,12 +40,15 @@ public class MailReturn { * */ private Integer handlerDeptId; + /** * */ private String handlerDeptName; + /** * */ private LocalDateTime createTime; -} + +} \ No newline at end of file diff --git a/mailbox-lan/src/main/java/com/biutag/lan/flow/node/CountersignFlow.java b/mailbox-lan/src/main/java/com/biutag/lan/flow/node/CountersignFlow.java index a4036d2..3437753 100644 --- a/mailbox-lan/src/main/java/com/biutag/lan/flow/node/CountersignFlow.java +++ b/mailbox-lan/src/main/java/com/biutag/lan/flow/node/CountersignFlow.java @@ -11,6 +11,7 @@ import org.springframework.stereotype.Component; import org.springframework.util.Assert; import java.time.LocalDateTime; +import java.util.Comparator; import java.util.List; import java.util.Optional; @@ -53,7 +54,7 @@ public class CountersignFlow extends Flow { return null; } List mailFlows = mailFlowService.list(mailId); - MailFlow mailFlow = mailFlows.stream().filter(item -> item.getFlowAfterName().equals("发起会签")).findFirst().get(); + MailFlow mailFlow = mailFlows.stream().sorted(Comparator.comparing(MailFlow::getCreateTime).reversed()).filter(item -> item.getFlowAfterName().equals("发起会签")).findFirst().get(); List flowNodes = flowNodeService.list(); String flowBeforeName = flowNodes.stream().filter(item -> item.getKey().equals(mailFlow.getFlowKey())).findFirst().map(FlowNode::getBeforeName).get(); // 会签完成 diff --git a/mailbox-lan/src/main/java/com/biutag/lan/flow/node/FirstApprovalFlow.java b/mailbox-lan/src/main/java/com/biutag/lan/flow/node/FirstApprovalFlow.java index 7f7d459..49f4349 100644 --- a/mailbox-lan/src/main/java/com/biutag/lan/flow/node/FirstApprovalFlow.java +++ b/mailbox-lan/src/main/java/com/biutag/lan/flow/node/FirstApprovalFlow.java @@ -95,7 +95,6 @@ public class FirstApprovalFlow extends Flow { public Flow mailReturn(String mailId, JSONObject data) { LocalDateTime now = LocalDateTime.now(); String returnOperate = data.getString("returnOperate"); - Assert.hasText(returnOperate, "参数错误"); String reason = data.getString("reason"); Assert.hasText(reason, "参数错误"); Mail mail = mailService.getById(mailId); diff --git a/mailbox-outer/src/main/java/com/biutag/outer/OuterApplication.java b/mailbox-outer/src/main/java/com/biutag/outer/OuterApplication.java index b549e5e..b9d7072 100644 --- a/mailbox-outer/src/main/java/com/biutag/outer/OuterApplication.java +++ b/mailbox-outer/src/main/java/com/biutag/outer/OuterApplication.java @@ -3,7 +3,9 @@ package com.biutag.outer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration; +import org.springframework.scheduling.annotation.EnableScheduling; +@EnableScheduling @SpringBootApplication(exclude = {RedisRepositoriesAutoConfiguration.class}) public class OuterApplication { From 2f8a30298da3d3f354ed631a59cc94cf1faabbc4 Mon Sep 17 00:00:00 2001 From: wxc <191104855@qq.com> Date: Mon, 4 Mar 2024 21:12:15 +0800 Subject: [PATCH 2/3] =?UTF-8?q?BUG=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/biutag/lan/flow/node/FirstApprovalFlow.java | 1 + .../com/biutag/lan/service/impl/PoliceUserServiceImpl.java | 5 +++-- mailbox-lan/src/main/resources/mapper/PoliceUserMapper.xml | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/mailbox-lan/src/main/java/com/biutag/lan/flow/node/FirstApprovalFlow.java b/mailbox-lan/src/main/java/com/biutag/lan/flow/node/FirstApprovalFlow.java index 49f4349..d360982 100644 --- a/mailbox-lan/src/main/java/com/biutag/lan/flow/node/FirstApprovalFlow.java +++ b/mailbox-lan/src/main/java/com/biutag/lan/flow/node/FirstApprovalFlow.java @@ -114,6 +114,7 @@ public class FirstApprovalFlow extends Flow { // 更新信件 mail.setUpdateTime(now) .setFlowKey(FlowNodeEnum.SECOND_APPROVAL.getKey()) + .setCurrentOperator(String.format("%s专班", mail.getSecondDeptName())) .setReturnOperate(returnOperate); mailService.updateById(mail); return null; diff --git a/mailbox-lan/src/main/java/com/biutag/lan/service/impl/PoliceUserServiceImpl.java b/mailbox-lan/src/main/java/com/biutag/lan/service/impl/PoliceUserServiceImpl.java index 00c82fa..7ba58b8 100644 --- a/mailbox-lan/src/main/java/com/biutag/lan/service/impl/PoliceUserServiceImpl.java +++ b/mailbox-lan/src/main/java/com/biutag/lan/service/impl/PoliceUserServiceImpl.java @@ -280,9 +280,9 @@ public class PoliceUserServiceImpl implements IPoliceUserService { model.setDeptIds(createValidate.getDeptIds().toString()); model.setDeptName(deptVo.getName()); - this.batchSaveDepartByEmpNo(createValidate.getEmpNo(), Arrays.asList(createValidate.getDeptIds())); + this.batchSaveDepartByEmpNo(createValidate.getEmpNo(), Collections.singletonList(createValidate.getDeptIds())); model.setPostIds(createValidate.getPostIds().toString()); - this.batchSavePositionByEmpNo(createValidate.getEmpNo(), Arrays.asList(createValidate.getPostIds())); + this.batchSavePositionByEmpNo(createValidate.getEmpNo(), Collections.singletonList(createValidate.getPostIds())); model.setEmpNo(createValidate.getEmpNo()); model.setName(createValidate.getName()); model.setAvatar(avatar); @@ -343,6 +343,7 @@ public class PoliceUserServiceImpl implements IPoliceUserService { model.setDeptName(deptVo.getName()); if(StringUtils.isNotNull(updateValidate.getPostIds())) { + model.setPostIds(updateValidate.getPostIds().toString()); if(!policeUser.getPostIds().equals(model.getPostIds())){ this.batchSavePositionByEmpNo(updateValidate.getEmpNo(), Collections.singletonList(updateValidate.getPostIds())); } diff --git a/mailbox-lan/src/main/resources/mapper/PoliceUserMapper.xml b/mailbox-lan/src/main/resources/mapper/PoliceUserMapper.xml index 694253d..0b13f51 100644 --- a/mailbox-lan/src/main/resources/mapper/PoliceUserMapper.xml +++ b/mailbox-lan/src/main/resources/mapper/PoliceUserMapper.xml @@ -5,7 +5,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select u.id, u.emp_no, u.name, u.id_code, u.phone mobile, r.name role, d.full_name dept, p.name post, u.last_login_time, u.last_login_ip, u.is_disable + select u.id, u.emp_no, u.name, u.id_code, u.phone, u.mobile, r.name role, d.full_name dept, p.name post, u.last_login_time, u.last_login_ip, u.is_disable from police_user u left join dept d on u.dept_ids = d.id left join post p on u.post_ids = p.id diff --git a/mailbox-outer/pom.xml b/mailbox-outer/pom.xml index 03cbc1e..6a456d4 100644 --- a/mailbox-outer/pom.xml +++ b/mailbox-outer/pom.xml @@ -85,6 +85,10 @@ + + src/main/resources + false + src/main/resources diff --git a/mailbox-outer/src/main/java/com/biutag/outer/domain/Mail.java b/mailbox-outer/src/main/java/com/biutag/outer/domain/Mail.java index ed8711a..f66052a 100644 --- a/mailbox-outer/src/main/java/com/biutag/outer/domain/Mail.java +++ b/mailbox-outer/src/main/java/com/biutag/outer/domain/Mail.java @@ -1,5 +1,6 @@ package com.biutag.outer.domain; +import com.alibaba.fastjson2.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Getter; import lombok.Setter; @@ -57,6 +58,7 @@ public class Mail { /** * 创建时间 */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; /** diff --git a/mailbox-outer/src/main/java/com/biutag/outer/domain/MailEtl.java b/mailbox-outer/src/main/java/com/biutag/outer/domain/MailEtl.java new file mode 100644 index 0000000..e72d7b4 --- /dev/null +++ b/mailbox-outer/src/main/java/com/biutag/outer/domain/MailEtl.java @@ -0,0 +1,27 @@ +package com.biutag.outer.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +@Accessors(chain = true) +@Setter +@Getter +public class MailEtl { + + @TableId(type = IdType.AUTO) + private Integer id; + + private String mailId; + + private Boolean success; + + private LocalDateTime createTime; + + private String errMsg; + +} diff --git a/mailbox-outer/src/main/java/com/biutag/outer/job/MailJob.java b/mailbox-outer/src/main/java/com/biutag/outer/job/MailJob.java new file mode 100644 index 0000000..9abdf2a --- /dev/null +++ b/mailbox-outer/src/main/java/com/biutag/outer/job/MailJob.java @@ -0,0 +1,82 @@ +package com.biutag.outer.job; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.digest.MD5; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.biutag.config.Minio; +import com.biutag.outer.domain.Mail; +import com.biutag.outer.domain.MailEtl; +import com.biutag.outer.mapper.MailEtlMapper; +import com.biutag.outer.mapper.MailMapper; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +@Slf4j +@RequiredArgsConstructor +@Component +public class MailJob { + + private final MailEtlMapper mailEtlMapper; + + private final MailMapper mailMapper; + + private final Minio minio; + + @Value("${mailbox.url}") + private String mailboxUrl; + + private final String key = "mailbox"; + + // 1分钟 + @Scheduled(fixedRate = 60000) + @Transactional(rollbackFor = Exception.class) + public void pushMailData() { + System.out.println(LocalDateTime.now()); + List mails = mailMapper.listByMailEtl(); + for (Mail mail : mails) { + try { + if (StrUtil.isNotBlank(mail.getAttachments())) { + List attachments = JSON.parseArray(mail.getAttachments()).toList(JSONObject.class); + for (JSONObject attachment : attachments) { + attachment.put("base64", minio.getBase64(attachment.getString("filepath"))); + } + mail.setAttachments(JSON.toJSONString(attachments)); + } + long timestamp = new Date().getTime(); + HttpResponse httpResponse = HttpUtil.createPost(mailboxUrl + "mail") + .header("timestamp", String.valueOf(timestamp)) + .auth(MD5.create().digestHex(key + timestamp)) + .body(JSON.toJSONString(mail)) + .execute(); + if (!httpResponse.isOk()) { + throw new RuntimeException(String.format("httpCode: %s", httpResponse.getStatus())); + } + log.info(httpResponse.body()); + JSONObject response = JSONObject.parseObject(httpResponse.body()); + if (response.getInteger("code") != 200) { + throw new RuntimeException(response.getString("msg")); + } + MailEtl mailEtl = new MailEtl().setMailId(mail.getId()).setSuccess(true).setCreateTime(LocalDateTime.now()); + mailEtlMapper.insert(mailEtl); + } catch (RuntimeException e) { + log.error("推送信件[{}]异常: {}", mail.getId(), e.getMessage(), e); + MailEtl mailEtl = new MailEtl().setMailId(mail.getId()).setSuccess(false).setCreateTime(LocalDateTime.now()).setErrMsg(e.getMessage()); + mailEtlMapper.insert(mailEtl); + } + } + + } + +} diff --git a/mailbox-outer/src/main/java/com/biutag/outer/mapper/MailEtlMapper.java b/mailbox-outer/src/main/java/com/biutag/outer/mapper/MailEtlMapper.java new file mode 100644 index 0000000..96b858a --- /dev/null +++ b/mailbox-outer/src/main/java/com/biutag/outer/mapper/MailEtlMapper.java @@ -0,0 +1,9 @@ +package com.biutag.outer.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.outer.domain.MailEtl; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface MailEtlMapper extends BaseMapper { +} diff --git a/mailbox-outer/src/main/java/com/biutag/outer/mapper/MailMapper.java b/mailbox-outer/src/main/java/com/biutag/outer/mapper/MailMapper.java index 8d86437..3a4e47e 100644 --- a/mailbox-outer/src/main/java/com/biutag/outer/mapper/MailMapper.java +++ b/mailbox-outer/src/main/java/com/biutag/outer/mapper/MailMapper.java @@ -5,10 +5,15 @@ import com.biutag.outer.domain.Mail; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; +import java.util.List; + @Mapper public interface MailMapper extends BaseMapper { @Select("SELECT nextval('mail_id_seq') ") Integer getMailIdSeqVal(); + @Select("select m.* from mail m left join mail_etl etl on m.id = etl.mail_id and etl.success = 1 where etl.id is null") + List listByMailEtl(); + } diff --git a/mailbox-outer/src/main/resources/application-dev.yml b/mailbox-outer/src/main/resources/application-dev.yml index c2ffb0f..afb77f6 100644 --- a/mailbox-outer/src/main/resources/application-dev.yml +++ b/mailbox-outer/src/main/resources/application-dev.yml @@ -6,8 +6,11 @@ spring: oss: minio: - enable: false + enable: true endpoint: http://172.31.217.20:31401 accessKey: n8yPVAJk4yw879zi secretKey: eElQ7gCwuNxaFhKEbtRRq0lsovoOTgI1 - bucketName: mailbox \ No newline at end of file + bucketName: mailbox + +mailbox: + url: http://127.0.0.1:8082/v1/ \ No newline at end of file diff --git a/mailbox-outer/src/test/java/com/biutag/outer/ApiTest.java b/mailbox-outer/src/test/java/com/biutag/outer/ApiTest.java new file mode 100644 index 0000000..7081eb8 --- /dev/null +++ b/mailbox-outer/src/test/java/com/biutag/outer/ApiTest.java @@ -0,0 +1,19 @@ +package com.biutag.outer; + +import cn.hutool.crypto.digest.MD5; +import com.alibaba.fastjson2.JSON; +import com.biutag.outer.domain.Mail; +import org.junit.jupiter.api.Test; + +import java.time.LocalDateTime; +import java.util.Date; + +public class ApiTest { + + @Test + public void testAuth() { + Mail mail = new Mail(); + mail.setCreateTime(LocalDateTime.now()); + System.out.println(JSON.toJSONString(mail)); + } +}