diff --git a/src/main/java/com/qs/serve/common/util/TianYiYunSmsUtil.java b/src/main/java/com/qs/serve/common/util/TianYiYunSmsUtil.java new file mode 100644 index 0000000..1143360 --- /dev/null +++ b/src/main/java/com/qs/serve/common/util/TianYiYunSmsUtil.java @@ -0,0 +1,70 @@ +package com.qs.serve.common.util; + +import cn.hutool.crypto.digest.DigestUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +/** + * @author YenHex + * @since 2024/1/26 + */ +@Slf4j +@Service +public class TianYiYunSmsUtil { + + private final static String url = "http://sms.189ek.com/yktsms/send?"; + + private final static String appId = "WIgWyCFn4DnHLtjKBIXBVyZbGevFg3J4"; + + private final static String appKey = "bjfsZlF01OZPUzyiCLSFOrOOnfsZhYZJ"; + + /** + * 发送短信 + * @param mobiles 需要发送的手机号(多个号码以英文逗号 “,”分隔) 一次性最多 100 个号码 + * @param message + */ + public static void send(String mobiles,String message){ + String sign = DigestUtil.md5Hex(appId+mobiles+message+appKey); + try { + String msg = URLEncoder.encode(message,"utf-8"); + String params = "appid="+ appId + + "&mobile="+ mobiles + + "&msg=" + msg + + "&sign=" + sign + + "&extPort="; + String result = HttpUtil.doPost(url + params,"{}",null); + log.debug("sms result = > {}",result); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + + /** + * 发送短信通知申请人 + * @param mobile 手机号 + * @param url 拜访申请实例页面地址 + * @param visitDate 来访时间 + * @param accessUser 拜访的人员 + */ + public static void sendVisitSuccess(String mobile,String url,LocalDateTime visitDate,String accessUser){ + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分"); + String visitDateFormat = visitDate.format(df); + String msg = "【嘉士利】预约成功通知:您的预约已被确认,请您于"+visitDateFormat +"访问:"+accessUser+ + ",您的访问信息如下:"+url+",点击链接展示来访二维码,门卫扫码即可完成登记。期待您的到访。"; + send(mobile,msg); + } + + public static void main(String[] args) { + String url = "https://crm.gdjsl.com/#/department-list"; + LocalDateTime visitStartDate = LocalDateTime.now(); + String accessUser = "员工2"; + sendVisitSuccess("13286630016",url,visitStartDate,accessUser); + } + + +} diff --git a/src/main/java/com/qs/serve/modules/visit/api/VisitMainOuterApi.java b/src/main/java/com/qs/serve/modules/visit/api/VisitMainOuterApi.java index 698763f..76b1900 100644 --- a/src/main/java/com/qs/serve/modules/visit/api/VisitMainOuterApi.java +++ b/src/main/java/com/qs/serve/modules/visit/api/VisitMainOuterApi.java @@ -40,7 +40,7 @@ public class VisitMainOuterApi { private VisitMainService visitMainService; /** - * 用户查看访问申请记录 + * 用户查看访问申请记录(已弃用,旧版本使用微信鉴权) * @param param * @return */ @@ -77,13 +77,13 @@ public class VisitMainOuterApi { } /** - * ID查询(查询主题id) + * ID查询(查询主题id(已弃用微信鉴权)) * @param id * @return */ - @GetMapping("/getThemeById/{id}") + //@GetMapping("/getThemeById/{id}") @SysLog(module = SystemModule.VISIT, title = "拜访", biz = BizType.QUERY) - public R getByThemeId(@PathVariable("id") String id){ + public R getByThemeId_old(@PathVariable("id") String id){ WxUser wxUser = wxUserService.getCurrentWxUser(); VisitMain dbMain = visitMainService.getOne(new LambdaQueryWrapper() @@ -101,7 +101,20 @@ public class VisitMainOuterApi { } /** - * 更新(主题id参数名 themeId ) + * ID查询(查询主题id) + * @param id + * @return + */ + @GetMapping("/getThemeById/{id}") + @SysLog(module = SystemModule.VISIT, title = "拜访", biz = BizType.QUERY) + public R getByThemeId(@PathVariable("id") String id){ + VisitTheme visitTheme = visitThemeService.getById(id); + VisitMainVo mainVo = CopierUtil.copy(visitTheme,new VisitMainVo()); + return R.ok(mainVo); + } + + /** + * 更新(主题id参数名 themeId )(已弃用,旧版本使用微信鉴权) * @param param * @return */ @@ -144,6 +157,41 @@ public class VisitMainOuterApi { @PostMapping("/submit") @SysLog(module = SystemModule.VISIT, title = "拜访", biz = BizType.SUBMIT) public R submit(@RequestBody @Valid VisitMain param){ + long count = visitMainService.count(new LambdaQueryWrapper() + .eq(VisitMain::getThemeId,param.getThemeId()) + .eq(VisitMain::getVisitorMobile,param.getVisitorMobile()) + ); + if(count>0){ + return R.error("请勿重复提交"); + } + VisitTheme visitTheme = visitThemeService.getById(param.getThemeId()); + if(visitTheme==null){ + return R.error("主题标识为空"); + } + VisitMain entity = CopierUtil.copy(visitTheme,new VisitMain()); + entity.setId(null); + param.setCheckState(null); + param.setVisitStatus(null); + param.setSubmitTime(null); + CopierUtil.copy(param,entity); + // 审批参数 + param.setSyFormId("test"); + param.setSubmitTime(LocalDateTime.now()); + param.setCheckState(VisitMainConst.CheckState_1); + param.setVisitStatus(VisitMainConst.VisitStatus_1); + visitMainService.saveOrUpdate(param); + //visitMainService.submitOaFlow(param.getId()); + return R.ok(param.getId()); + } + + /** + * 提交到OA + * @param param + * @return + */ + //@PostMapping("/submit") + @SysLog(module = SystemModule.VISIT, title = "拜访", biz = BizType.SUBMIT) + public R submit_old(@RequestBody @Valid VisitMain param){ WxUser wxUser = wxUserService.getCurrentWxUser(); if(wxUser.getUserType().equals(WxUserTypeConst.UMS_MEMBER)){ if(param.getId()==null){ diff --git a/src/main/java/com/qs/serve/modules/visit/entity/VisitMain.java b/src/main/java/com/qs/serve/modules/visit/entity/VisitMain.java index b540b73..8f7b062 100644 --- a/src/main/java/com/qs/serve/modules/visit/entity/VisitMain.java +++ b/src/main/java/com/qs/serve/modules/visit/entity/VisitMain.java @@ -123,6 +123,7 @@ public class VisitMain implements Serializable { /** 来访人电话 */ @Length(max = 255,message = "来访人电话长度不能超过255字") + @NotNull(message = "来访人电话不可为空") private String visitorMobile; /** 来访人数合计 */ diff --git a/src/main/java/com/qs/serve/modules/visit/entity/VisitTheme.java b/src/main/java/com/qs/serve/modules/visit/entity/VisitTheme.java index d58212c..dd32dc3 100644 --- a/src/main/java/com/qs/serve/modules/visit/entity/VisitTheme.java +++ b/src/main/java/com/qs/serve/modules/visit/entity/VisitTheme.java @@ -35,6 +35,9 @@ public class VisitTheme implements Serializable { /** 审批状态: 0=正常;1=关闭 */ private Integer stopState; + /** 跳过审批:0-需要审批;1-不需要审批 */ + private Integer skipApprovalFlag; + /** 部门id */ @Length(max = 255,message = "部门id长度不能超过255字") private String deptId; @@ -58,6 +61,18 @@ public class VisitTheme implements Serializable { /** 接待地点 */ private String userRoom; + /** 接待地址 */ + private String visitAddress; + + /** 接待公司 */ + private String visitCompany; + + /** 接待地址 */ + private String localX; + + /** 接待公司 */ + private String localY; + /** 预约拜访日期 */ @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") diff --git a/src/main/java/com/qs/serve/modules/visit/service/VisitThemeService.java b/src/main/java/com/qs/serve/modules/visit/service/VisitThemeService.java index 0518c56..2d0eb26 100644 --- a/src/main/java/com/qs/serve/modules/visit/service/VisitThemeService.java +++ b/src/main/java/com/qs/serve/modules/visit/service/VisitThemeService.java @@ -1,6 +1,7 @@ package com.qs.serve.modules.visit.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.modules.flow.service.SeeYonOptionService; import com.qs.serve.modules.visit.entity.VisitMain; import com.qs.serve.modules.visit.entity.VisitTheme; @@ -9,7 +10,7 @@ import com.qs.serve.modules.visit.entity.VisitTheme; * @author YenHex * @date 2024-09-11 */ -public interface VisitThemeService extends IService { +public interface VisitThemeService extends IService , SeeYonOptionService { } diff --git a/src/main/java/com/qs/serve/modules/visit/service/impl/VisitThemeServiceImpl.java b/src/main/java/com/qs/serve/modules/visit/service/impl/VisitThemeServiceImpl.java index e29154d..160723f 100644 --- a/src/main/java/com/qs/serve/modules/visit/service/impl/VisitThemeServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/visit/service/impl/VisitThemeServiceImpl.java @@ -34,7 +34,32 @@ import java.util.Map; */ @Slf4j @Service -public class VisitThemeServiceImpl extends ServiceImpl implements VisitThemeService { +public class VisitThemeServiceImpl extends ServiceImpl implements VisitThemeService, SeeYonOptionService { + + @Override + public String loadTemplateCode() { + return null; + } + + @Override + public Object doNext(String targetId, TbsAffairCommitBo commit) { + return null; + } + + @Override + public Object doBack(String targetId, TbsAffairCommitBo commit) { + return null; + } + + @Override + public Object doFinish(String targetId, TbsAffairCommitBo commit) { + return null; + } + + @Override + public Object doRefuse(String targetId, TbsAffairCommitBo commit) { + return null; + } }