diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wisdomarbitrate/sendrecord/ShortMessageController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wisdomarbitrate/sendrecord/ShortMessageController.java index 9ebd03b..9eba364 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wisdomarbitrate/sendrecord/ShortMessageController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wisdomarbitrate/sendrecord/ShortMessageController.java @@ -4,12 +4,9 @@ import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.wisdomarbitrate.domain.dto.sendrecord.SmsSendRecord; import com.ruoyi.wisdomarbitrate.mapper.sendrecord.SmsRecordMapper; -import com.ruoyi.wisdomarbitrate.service.sendrecord.ShortMessageService; +import com.ruoyi.wisdomarbitrate.service.shortmessage.ShortMessageService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -46,4 +43,17 @@ public class ShortMessageController { } return AjaxResult.error("发送失败"); } + + /** + * 查询UID好的密钥 + */ + @Anonymous + @GetMapping("/getEncryptInfoByid") + public Object getEncryptInfoByUid(@RequestParam(name = "id",required = true) String id) { + if (id != null) { + Object result = shortMessageService.getEncryptInfoByUid(id); + return result; + } + return AjaxResult.error("查询失败"); + } } diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index c0a1dad..169b903 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -217,4 +217,5 @@ BMConfig: # max-tasks-per-process: 100 beimingapihost: https://zj.odrcloud.cn beimingapiprefix: /onestop/sync -beimingprivatekey: d7724e72c4be93196a35203e8379ded5 \ No newline at end of file +beimingprivatekey: d7724e72c4be93196a35203e8379ded5 +shortMessageKey: 936df5fd9aba3b86adc3c1a1c52dcde1 \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/EncryptUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/EncryptUtils.java index 579e6be..455ec3f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/EncryptUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/EncryptUtils.java @@ -112,10 +112,17 @@ public class EncryptUtils { public static void main(String[] args) { String privateKey = "936df5fd9aba3b86adc3c1a1c52dcde1"; ObjectNode param = new ObjectMapper().createObjectNode(); - param.put("name", "姓名"); + param.put("userName", "张三"); + param.put("caseNo", "ZC1234125"); + param.put("userId", "124124"); + param.put("roomId", "124125"); + param.put("systemType", "tiaojiexitong"); String encryptString = sm4Encrypt(param.toString(), privateKey); System.out.println("加密后的字符串:" + encryptString); + String uid = UUID.randomUUID().toString().replace("-", ""); + System.out.println("uid:" + uid); System.out.println("解密后的字符串:" + sm4Decrypt(encryptString, privateKey)); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/entity/shortmessage/EncryptendInfo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/entity/shortmessage/EncryptendInfo.java new file mode 100644 index 0000000..89fc581 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/entity/shortmessage/EncryptendInfo.java @@ -0,0 +1,31 @@ +package com.ruoyi.system.domain.entity.shortmessage; + +import java.util.Date; +import javax.persistence.*; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter +@ToString +@Table(name = "encryptend_info") +public class EncryptendInfo { + /** + * 主键 + */ + @Id + private String uid; + + /** + * 加密后的内容 + */ + @Column(name = "encrypted_content") + private String encryptedContent; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/shortmessage/EncryptendInfoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/shortmessage/EncryptendInfoMapper.java new file mode 100644 index 0000000..13c656e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/shortmessage/EncryptendInfoMapper.java @@ -0,0 +1,7 @@ +package com.ruoyi.system.mapper.shortmessage; + +import com.ruoyi.system.domain.entity.shortmessage.EncryptendInfo; +import tk.mybatis.mapper.common.Mapper; + +public interface EncryptendInfoMapper extends Mapper { +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/domain/vo/secret/SecretInfo.java b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/domain/vo/secret/SecretInfo.java new file mode 100644 index 0000000..ecf3dd2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/domain/vo/secret/SecretInfo.java @@ -0,0 +1,21 @@ +package com.ruoyi.wisdomarbitrate.domain.vo.secret; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class SecretInfo { + /** + * 用户登录名、案件编号、用户id、房间号、跳转系统类型(tiaojie、zhongcai) + */ + private String userName; + private String caseNo; + private String userId; + private Integer roomId; + private String systemType; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/sendrecord/impl/ShortMessageServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/sendrecord/impl/ShortMessageServiceImpl.java deleted file mode 100644 index 16290df..0000000 --- a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/sendrecord/impl/ShortMessageServiceImpl.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.ruoyi.wisdomarbitrate.service.sendrecord.impl; - -import cn.hutool.json.JSONObject; -import com.ruoyi.common.core.domain.AjaxResult; -import com.ruoyi.common.enums.SMSStatusEnum; -import com.ruoyi.common.utils.SmsUtils; -import com.ruoyi.system.domain.entity.shortmessage.MsSmsSendHistoryRecord; -import com.ruoyi.system.mapper.shortmessage.MsSmsSendHistoryRecordMapper; -import com.ruoyi.wisdomarbitrate.domain.dto.sendrecord.SmsSendRecord; -import com.ruoyi.wisdomarbitrate.service.sendrecord.ShortMessageService; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class ShortMessageServiceImpl implements ShortMessageService { - @Autowired - MsSmsSendHistoryRecordMapper msSmsSendHistoryRecordMapper; - /** - * 新增发送历史记录 - * - * @param smsSendRecord - */ - @Override - public void insertShortMessageHistoryRecord(SmsSendRecord smsSendRecord) { - if(smsSendRecord!=null){ - MsSmsSendHistoryRecord historyRecord=new MsSmsSendHistoryRecord(); - BeanUtils.copyProperties(smsSendRecord,historyRecord); - historyRecord.setId(null); - historyRecord.setParentId(smsSendRecord.getId()); - msSmsSendHistoryRecordMapper.insert(historyRecord); - } - } - - /** - * 重新发送短信 - * - * @param smsSendRecord - */ - @Override - public AjaxResult reSendShortMessage(SmsSendRecord smsSendRecord) { - SmsUtils.SendSmsRequest request = new SmsUtils.SendSmsRequest(); - //TODO 模版id待替换 - request.setTemplateId("1955047"); - request.setPhone(smsSendRecord.getPhone()); - request.setTemplateParamSet(new String[]{ smsSendRecord.getSendContent()}); - JSONObject resultObj = SmsUtils.sendSms(request); - if(resultObj.get("status")!=null && !resultObj.get("status").equals(SMSStatusEnum.FAIL.getCode())){ - return AjaxResult.success("短信发送成功"); - }else { - return AjaxResult.warn("短信发送失败"); - } - } -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/sendrecord/ShortMessageService.java b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/shortmessage/ShortMessageService.java similarity index 58% rename from ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/sendrecord/ShortMessageService.java rename to ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/shortmessage/ShortMessageService.java index bd9f290..adfbd1c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/sendrecord/ShortMessageService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/shortmessage/ShortMessageService.java @@ -1,9 +1,10 @@ -package com.ruoyi.wisdomarbitrate.service.sendrecord; +package com.ruoyi.wisdomarbitrate.service.shortmessage; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.system.domain.entity.shortmessage.MsSmsSendHistoryRecord; import com.ruoyi.system.mapper.shortmessage.MsSmsSendHistoryRecordMapper; import com.ruoyi.wisdomarbitrate.domain.dto.sendrecord.SmsSendRecord; +import com.ruoyi.wisdomarbitrate.domain.vo.secret.SecretInfo; public interface ShortMessageService { /** @@ -16,4 +17,15 @@ public interface ShortMessageService { * @param smsSendRecord */ AjaxResult reSendShortMessage(SmsSendRecord smsSendRecord); + + /** + * 根据信息生成加密信息记录 + * @param secretInfo + * @return + */ + String buildEncryptInfoRecord(SecretInfo secretInfo); + /** + * 通过UID查询加密信息并解密成明文对象 + */ + Object getEncryptInfoByUid(String uid); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/shortmessage/impl/ShortMessageServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/shortmessage/impl/ShortMessageServiceImpl.java new file mode 100644 index 0000000..12b9ae0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/shortmessage/impl/ShortMessageServiceImpl.java @@ -0,0 +1,109 @@ +package com.ruoyi.wisdomarbitrate.service.shortmessage.impl; + +import cn.hutool.json.JSONObject; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.SMSStatusEnum; +import com.ruoyi.common.utils.SmsUtils; +import com.ruoyi.system.domain.entity.shortmessage.EncryptendInfo; +import com.ruoyi.system.domain.entity.shortmessage.MsSmsSendHistoryRecord; +import com.ruoyi.system.mapper.shortmessage.EncryptendInfoMapper; +import com.ruoyi.system.mapper.shortmessage.MsSmsSendHistoryRecordMapper; +import com.ruoyi.wisdomarbitrate.domain.dto.sendrecord.SmsSendRecord; +import com.ruoyi.wisdomarbitrate.domain.vo.secret.SecretInfo; +import com.ruoyi.wisdomarbitrate.service.shortmessage.ShortMessageService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.UUID; + +import static com.ruoyi.common.utils.EncryptUtils.sm4Decrypt; +import static com.ruoyi.common.utils.EncryptUtils.sm4Encrypt; + +@Service +public class ShortMessageServiceImpl implements ShortMessageService { + @Value("${shortMessageKey}") + private String shortMessageKey; + @Autowired + MsSmsSendHistoryRecordMapper msSmsSendHistoryRecordMapper; + @Autowired + EncryptendInfoMapper encryptendInfoMapper; + + /** + * 新增发送历史记录 + * + * @param smsSendRecord + */ + @Override + public void insertShortMessageHistoryRecord(SmsSendRecord smsSendRecord) { + if (smsSendRecord != null) { + MsSmsSendHistoryRecord historyRecord = new MsSmsSendHistoryRecord(); + BeanUtils.copyProperties(smsSendRecord, historyRecord); + historyRecord.setId(null); + historyRecord.setParentId(smsSendRecord.getId()); + msSmsSendHistoryRecordMapper.insert(historyRecord); + } + } + + /** + * 重新发送短信 + * + * @param smsSendRecord + */ + @Override + public AjaxResult reSendShortMessage(SmsSendRecord smsSendRecord) { + SmsUtils.SendSmsRequest request = new SmsUtils.SendSmsRequest(); + //TODO 模版id待替换 + request.setTemplateId("1955047"); + request.setPhone(smsSendRecord.getPhone()); + request.setTemplateParamSet(new String[]{smsSendRecord.getSendContent()}); + JSONObject resultObj = SmsUtils.sendSms(request); + if (resultObj.get("status") != null && !resultObj.get("status").equals(SMSStatusEnum.FAIL.getCode())) { + return AjaxResult.success("短信发送成功"); + } else { + return AjaxResult.warn("短信发送失败"); + } + } + + /** + * 根据信息生成加密信息记录 + * + * @param secretInfo + * @return + */ + @Override + public String buildEncryptInfoRecord(SecretInfo secretInfo) { + String privateKey = shortMessageKey; + ObjectNode param = new ObjectMapper().createObjectNode(); + param.put("userName", secretInfo.getUserName()); + param.put("caseNo", secretInfo.getCaseNo()); + param.put("userId", secretInfo.getUserId()); + param.put("roomId", secretInfo.getRoomId()); + param.put("systemType", secretInfo.getSystemType()); + String encryptString = sm4Encrypt(param.toString(), privateKey); + String uid = UUID.randomUUID().toString().replace("-", ""); + EncryptendInfo encryptendInfo = new EncryptendInfo(); + encryptendInfo.setUid(uid); + encryptendInfo.setEncryptedContent(encryptString); + encryptendInfoMapper.insertSelective(encryptendInfo); + System.out.println("加密后的字符串:" + encryptString); + return uid; + } + + /** + * 通过UID查询加密信息并解密成明文对象 + * + * @param uid + */ + @Override + public Object getEncryptInfoByUid(String uid) { + EncryptendInfo encryptendInfo = encryptendInfoMapper.selectByPrimaryKey(uid); + if (encryptendInfo != null) { + return sm4Decrypt(encryptendInfo.getEncryptedContent(), shortMessageKey); + } + return null; + } +} diff --git a/ruoyi-system/src/main/resources/com/ruoyi/system/mapper/shortmessage/EncryptendInfoMapper.xml b/ruoyi-system/src/main/resources/com/ruoyi/system/mapper/shortmessage/EncryptendInfoMapper.xml new file mode 100644 index 0000000..e7d32a8 --- /dev/null +++ b/ruoyi-system/src/main/resources/com/ruoyi/system/mapper/shortmessage/EncryptendInfoMapper.xml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file