diff --git a/src/main/java/com/yuyou/openapi/openapi/api/ABClient.java b/src/main/java/com/yuyou/openapi/openapi/api/ABClient.java index 35d1447..1c69f95 100644 --- a/src/main/java/com/yuyou/openapi/openapi/api/ABClient.java +++ b/src/main/java/com/yuyou/openapi/openapi/api/ABClient.java @@ -396,4 +396,33 @@ public class ABClient { return abClientService.recordSongshuClientMsg(atoCvt)? CommonResponse.createBySuccess() : CommonResponse.createByErrorMessage("调用失败请重试"); } + + /** + * 获取等待提交的数据 + * + * @return 返回调用信息 + */ + @PostMapping("/api/req/forminput/xueba") + @ResponseBody + public CommonResponse getFormData(@RequestBody ABClientXuebaMessageVO vo){ + //记录日志 + log.info("====== [ one request comming, request content is {} ] ======", vo.toString()); + // 验证参数,并进行解密 + String callLog = vo.getCalllog(); + if (StringUtils.isEmpty(callLog)){ + return CommonResponse.createByErrorMessage(ResponseCode.EMPTY_ARGUMENT.getDesc()); + } + // 获取的是解密且解码后的Json字符串 + String jsonResult = SecurityOperationUtil.decCallLogSecurityInfo(callLog); + // Json转成对应的实体类 + if (StringUtils.isEmpty(jsonResult)){ + return CommonResponse.createByErrorMessage(ResponseCode.DECRYPT_ERROR.getDesc()); + } + // vo赋值到DTO + XuebaMessageDTO xuebaMessageDTO = JSONUtil.toBean(jsonResult, XuebaMessageDTO.class); + XuebaMessageDTO atoCvt = XuebaMessageConverter.convertXuebaMessageDTOFromVO(xuebaMessageDTO, vo); + // 处理具体逻辑,返回校验成功的结果 + return abClientService.recordXuebaClientMsg(atoCvt)? + CommonResponse.createBySuccess() : CommonResponse.createByErrorMessage("调用失败请重试"); + } } diff --git a/src/main/java/com/yuyou/openapi/openapi/dao/XuebaMessageRepository.java b/src/main/java/com/yuyou/openapi/openapi/dao/XuebaMessageRepository.java new file mode 100644 index 0000000..c12a644 --- /dev/null +++ b/src/main/java/com/yuyou/openapi/openapi/dao/XuebaMessageRepository.java @@ -0,0 +1,21 @@ +package com.yuyou.openapi.openapi.dao; + +import com.yuyou.openapi.openapi.model.dataobject.SongshuMessageDO; +import com.yuyou.openapi.openapi.model.dataobject.XuebaMessageDO; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface XuebaMessageRepository extends JpaRepository { + + /** + * 根据RecId来进行查询 + * + * @param recId 记录Id + * @return + */ + List findByRecId(Long recId); + +} diff --git a/src/main/java/com/yuyou/openapi/openapi/model/convert/XuebaMessageConverter.java b/src/main/java/com/yuyou/openapi/openapi/model/convert/XuebaMessageConverter.java new file mode 100644 index 0000000..ab574cc --- /dev/null +++ b/src/main/java/com/yuyou/openapi/openapi/model/convert/XuebaMessageConverter.java @@ -0,0 +1,94 @@ +package com.yuyou.openapi.openapi.model.convert; + +import cn.hutool.core.codec.Base64; +import com.yuyou.openapi.openapi.common.enums.ConstantEnum; +import com.yuyou.openapi.openapi.common.enums.GradeEnum; +import com.yuyou.openapi.openapi.common.enums.SubjectEnum; +import com.yuyou.openapi.openapi.common.security.SecurityConstants; +import com.yuyou.openapi.openapi.common.security.SecurityService; +import com.yuyou.openapi.openapi.model.dataobject.SongshuMessageDO; +import com.yuyou.openapi.openapi.model.dataobject.XuebaMessageDO; +import com.yuyou.openapi.openapi.model.dto.SongshuMessageDTO; +import com.yuyou.openapi.openapi.model.dto.XuebaMessageDTO; +import com.yuyou.openapi.openapi.model.vo.ABClientSongshuMessageVO; +import com.yuyou.openapi.openapi.model.vo.ABClientXuebaMessageVO; +import com.yuyou.openapi.openapi.utils.DateUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * 掌门记录转换类 + * + * @version 1.0 + * @date 2020/8/10 + */ +@Slf4j +public class XuebaMessageConverter { + + /** + * VO层转为DTO层 + * @param abClientXuebaMessageVO + * @return + */ + public static XuebaMessageDTO convertXuebaMessageDTOFromVO(XuebaMessageDTO xuebaMessageDTO, ABClientXuebaMessageVO abClientXuebaMessageVO) { + BeanUtils.copyProperties(abClientXuebaMessageVO, xuebaMessageDTO); + return xuebaMessageDTO; + } + + /** + * 批量DTO转DO + * @param list + * @return + */ + public static List convertXuebaMessageDOFromDTO(List list) { + if (CollectionUtils.isEmpty(list)) { + return null; + } + List xuebaMessageDOs = new ArrayList<>(); + list.forEach(each -> { + XuebaMessageDO xuebaMessageDO = convertXuebaMessageDOFromDTO(each); + if (xuebaMessageDO != null) { + xuebaMessageDOs.add(xuebaMessageDO); + } + }); + return xuebaMessageDOs; + } + + /** + * DTO层转为DO层 + * @param xuebaMessageDTO + * @return + */ + public static XuebaMessageDO convertXuebaMessageDOFromDTO(XuebaMessageDTO xuebaMessageDTO) { + if (xuebaMessageDTO == null || xuebaMessageDTO.getTag() == null || xuebaMessageDTO.getData() == null) { + return null; + } + XuebaMessageDO xuebaMessageDO = new XuebaMessageDO(); + BeanUtils.copyProperties(xuebaMessageDTO.getData(), xuebaMessageDO); + try { + xuebaMessageDTO.getData().setMobile(Base64.encode(xuebaMessageDTO.getData().getMobile())); + String encryptedMobile = SecurityService.encrypt(xuebaMessageDTO.getData().getMobile(), SecurityConstants.PHONE); + String encryptedName = SecurityService.encrypt(xuebaMessageDTO.getData().getName(), SecurityConstants.SIMPLE); + xuebaMessageDO.setPnum(encryptedMobile); + xuebaMessageDO.setStuName(encryptedName); + } catch (Exception e) { + log.error("Encrypt data raise Error, recId = {}, error is :", xuebaMessageDTO.getTag().getTag_key_id(), e); + xuebaMessageDO.setPnum(xuebaMessageDTO.getData().getMobile()); + xuebaMessageDO.setStuName(xuebaMessageDTO.getData().getName()); + } + + xuebaMessageDO.setAppId(xuebaMessageDTO.getAppId()); + xuebaMessageDO.setPushTime(DateUtils.date(xuebaMessageDTO.getTimestamp())); + + xuebaMessageDO.setStuGrade(GradeEnum.codeOf(xuebaMessageDTO.getData().getGrade())); + xuebaMessageDO.setStuSub(SubjectEnum.codeOf(xuebaMessageDTO.getData().getCourse())); + xuebaMessageDO.setDevice(ConstantEnum.YesOrNo.codeOf(xuebaMessageDTO.getData().getDevice())); + xuebaMessageDO.setRecId(xuebaMessageDTO.getTag().getTag_key_id()); + + return xuebaMessageDO; + } +} diff --git a/src/main/java/com/yuyou/openapi/openapi/model/convert/ZhangmenKidMessageConverter.java b/src/main/java/com/yuyou/openapi/openapi/model/convert/ZhangmenKidMessageConverter.java index fe1f464..b3d6aa5 100644 --- a/src/main/java/com/yuyou/openapi/openapi/model/convert/ZhangmenKidMessageConverter.java +++ b/src/main/java/com/yuyou/openapi/openapi/model/convert/ZhangmenKidMessageConverter.java @@ -87,7 +87,6 @@ public class ZhangmenKidMessageConverter { zhangmenKidMessageDO.setStuGrade(GradeEnum.codeOf(zhangmenKidMessageDTO.getData().getGrade())); zhangmenKidMessageDO.setStuSub(SubjectEnum.codeOf(zhangmenKidMessageDTO.getData().getCourse())); zhangmenKidMessageDO.setDevice(ConstantEnum.YesOrNo.codeOf(zhangmenKidMessageDTO.getData().getDevice())); - zhangmenKidMessageDO.setRecId(zhangmenKidMessageDTO.getTag().getTag_key_id()); return zhangmenKidMessageDO; diff --git a/src/main/java/com/yuyou/openapi/openapi/model/convert/ZhangmenMessageConverter.java b/src/main/java/com/yuyou/openapi/openapi/model/convert/ZhangmenMessageConverter.java index 55538ad..00ca168 100644 --- a/src/main/java/com/yuyou/openapi/openapi/model/convert/ZhangmenMessageConverter.java +++ b/src/main/java/com/yuyou/openapi/openapi/model/convert/ZhangmenMessageConverter.java @@ -1,6 +1,7 @@ package com.yuyou.openapi.openapi.model.convert; import cn.hutool.core.codec.Base64; +import com.yuyou.openapi.openapi.common.enums.ConstantEnum; import com.yuyou.openapi.openapi.common.enums.GradeEnum; import com.yuyou.openapi.openapi.common.enums.SubjectEnum; import com.yuyou.openapi.openapi.common.security.SecurityConstants; @@ -82,7 +83,7 @@ public class ZhangmenMessageConverter { zhangmenMessageDO.setStuGrade(GradeEnum.codeOf(abzmMessageDTO.getData().getGrade())); zhangmenMessageDO.setStuSub(SubjectEnum.codeOf(abzmMessageDTO.getData().getCourse())); - + zhangmenMessageDO.setDevice(ConstantEnum.YesOrNo.codeOf(abzmMessageDTO.getData().getDevice())); zhangmenMessageDO.setRecId(abzmMessageDTO.getTag().getTag_key_id()); return zhangmenMessageDO; diff --git a/src/main/java/com/yuyou/openapi/openapi/model/dataobject/XuebaMessageDO.java b/src/main/java/com/yuyou/openapi/openapi/model/dataobject/XuebaMessageDO.java new file mode 100644 index 0000000..c84dbc6 --- /dev/null +++ b/src/main/java/com/yuyou/openapi/openapi/model/dataobject/XuebaMessageDO.java @@ -0,0 +1,83 @@ +package com.yuyou.openapi.openapi.model.dataobject; + +import lombok.Data; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.util.Date; + +/** + * 掌门少儿成单记录表 + * @version 1.0 + * @date 2020/8/10 + */ +@Data +@Table(name = "xueba_message") +@Entity +@EntityListeners(AuditingEntityListener.class) +public class XuebaMessageDO { + + /** + * id + */ + @Id + @GeneratedValue(strategy= GenerationType.IDENTITY) + private Long id; + + @Column(name = "gmt_create") + @CreatedDate + private Date gmtCreate; + + @Column(name = "gmt_modified") + @LastModifiedDate + private Date gmtModified; + + /** + * 记录推送id + */ + @Column(name = "rec_id") + private Long recId; + + /** + * 报课学生名 + */ + @Column(name = "stu_name") + private String stuName; + + /** + * 报课学生码 + */ + private String pnum; + + /** + * 报课学生年级 + */ + @Column(name = "stu_grade") + private Integer stuGrade; + + /** + * 报课学生学科 + */ + @Column(name = "stu_sub") + private Integer stuSub; + + @Column(name = "device") + private Integer device; + + /** + * 上游推送用户id + */ + @Column(name = "app_id") + private String appId; + + /** + * 上游推送时间 + */ + @Column(name = "push_time") + private Date pushTime; + + @Column(name = "submit_status") + private Integer submitStatus = 0; +} diff --git a/src/main/java/com/yuyou/openapi/openapi/model/dataobject/ZhangmenMessageDO.java b/src/main/java/com/yuyou/openapi/openapi/model/dataobject/ZhangmenMessageDO.java index d418b40..9747874 100644 --- a/src/main/java/com/yuyou/openapi/openapi/model/dataobject/ZhangmenMessageDO.java +++ b/src/main/java/com/yuyou/openapi/openapi/model/dataobject/ZhangmenMessageDO.java @@ -63,6 +63,9 @@ public class ZhangmenMessageDO { @Column(name = "stu_sub") private Integer stuSub; + @Column(name = "device") + private Integer device; + /** * 上游推送用户id */ diff --git a/src/main/java/com/yuyou/openapi/openapi/model/dto/ABZMMessageDTO.java b/src/main/java/com/yuyou/openapi/openapi/model/dto/ABZMMessageDTO.java index a750511..ff6a3cb 100644 --- a/src/main/java/com/yuyou/openapi/openapi/model/dto/ABZMMessageDTO.java +++ b/src/main/java/com/yuyou/openapi/openapi/model/dto/ABZMMessageDTO.java @@ -99,7 +99,7 @@ public class ABZMMessageDTO { /** * 试听设备 */ - private Integer device; + private String device; /** * 预约时间段 diff --git a/src/main/java/com/yuyou/openapi/openapi/model/dto/XuebaMessageDTO.java b/src/main/java/com/yuyou/openapi/openapi/model/dto/XuebaMessageDTO.java new file mode 100644 index 0000000..5c687f8 --- /dev/null +++ b/src/main/java/com/yuyou/openapi/openapi/model/dto/XuebaMessageDTO.java @@ -0,0 +1,101 @@ +package com.yuyou.openapi.openapi.model.dto; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class XuebaMessageDTO { + + /** + * 推送用户的ID + */ + private String appId; + + /** + * 请求时间戳 + */ + private Long timestamp; + + /** + * 标记集合 + */ + private Tag tag; + + /** + * 数据集合 + */ + private Datas data; + + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class Tag { + /** + * 记录id + */ + private Long tag_key_id; + + /** + * 学生姓名 + */ + private String tag_key_name; + + /** + * 联系方式 + */ + private String tag_key_mobile; + + /** + * 课程年级 + */ + private String tag_key_grade; + + /** + * 课程科目 + */ + private String tag_key_course; + + /** + * 试听设备 + */ + private String tag_key_device; + + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class Datas { + + /** + * 学生姓名 + */ + private String name; + + /** + * 手机号 + */ + private String mobile; + + /** + * 学生报学年级 + */ + private String grade; + + /** + * 学生报课科目 + */ + private String course; + + /** + * 是否有设备 + */ + private String device; + } + +} diff --git a/src/main/java/com/yuyou/openapi/openapi/model/vo/ABClientXuebaMessageVO.java b/src/main/java/com/yuyou/openapi/openapi/model/vo/ABClientXuebaMessageVO.java new file mode 100644 index 0000000..d1d0620 --- /dev/null +++ b/src/main/java/com/yuyou/openapi/openapi/model/vo/ABClientXuebaMessageVO.java @@ -0,0 +1,27 @@ +package com.yuyou.openapi.openapi.model.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * Copyright (C), 2012 - 2018, qyx + * FileName: ABClientMessageVO + * Author: x + * Date: 2020/8/4 6:59 PM + * Description: ABClient接口对应接口表现层映射 + * History: + *