Browse Source

生成哨卡小程序码接口

dev
Jackwang 6 years ago
parent
commit
f010efcee6
  1. 26
      esua-epdc/epdc-module/epdc-custom/epdc-custom-client/src/main/java/com/elink/esua/epdc/dto/form/CreateCodeFormDTO.java
  2. 25
      esua-epdc/epdc-module/epdc-custom/epdc-custom-server/pom.xml
  3. 30
      esua-epdc/epdc-module/epdc-custom/epdc-custom-server/src/main/java/com/elink/esua/epdc/modules/epidemic/controller/EpidemicSentryPostController.java
  4. 31
      esua-epdc/epdc-module/epdc-custom/epdc-custom-server/src/main/java/com/elink/esua/epdc/modules/epidemic/feign/OssFeignClient.java
  5. 22
      esua-epdc/epdc-module/epdc-custom/epdc-custom-server/src/main/java/com/elink/esua/epdc/modules/epidemic/feign/fallback/OssFeignClientFallback.java
  6. 22
      esua-epdc/epdc-module/epdc-custom/epdc-custom-server/src/main/java/com/elink/esua/epdc/modules/epidemic/service/EpidemicSentryPostService.java
  7. 128
      esua-epdc/epdc-module/epdc-custom/epdc-custom-server/src/main/java/com/elink/esua/epdc/modules/epidemic/service/impl/EpidemicSentryPostServiceImpl.java
  8. 19
      esua-epdc/epdc-module/epdc-custom/epdc-custom-server/src/main/resources/application.yml

26
esua-epdc/epdc-module/epdc-custom/epdc-custom-client/src/main/java/com/elink/esua/epdc/dto/form/CreateCodeFormDTO.java

@ -0,0 +1,26 @@
package com.elink.esua.epdc.dto.form;
import lombok.Data;
import java.io.Serializable;
/**
* @program: esua-epdc-cloud
* @description: 生成小程序码
* @author: wangtong
* @create: 2020-02-14 17:38
**/
@Data
public class CreateCodeFormDTO implements Serializable {
/**
* 网格id
*/
private String gridId;
/**
* 哨卡id
*/
private String postId;
}

25
esua-epdc/epdc-module/epdc-custom/epdc-custom-server/pom.xml

@ -63,6 +63,24 @@
<artifactId>orika-spring-boot-starter</artifactId>
<version>1.8.0</version>
</dependency>
<dependency>
<groupId>com.esua.epdc</groupId>
<artifactId>epdc-admin-client</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.esua.epdc</groupId>-->
<!-- <artifactId>epdc-commons-tools-wx-ma</artifactId>-->
<!-- <version>1.0.0</version>-->
<!-- <scope>compile</scope>-->
<!-- </dependency>-->
<!--微信小程序-->
<dependency>
<groupId>com.esua.epdc</groupId>
<artifactId>epdc-commons-tools-wx-ma</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
@ -133,6 +151,13 @@
<spring.redis.port>6379</spring.redis.port>
<spring.redis.password>elink@888</spring.redis.password>
<!--小程序配置-->
<wx.ma.appId>wxdd8530c5f4926766</wx.ma.appId>
<wx.ma.secret>5bf4fb813145431b3493a10aa7e041e9</wx.ma.secret>
<!--工作端小程序-->
<work.wx.ma.appId>wx29b074840ef4bfd9</work.wx.ma.appId>
<work.wx.ma.secret>4adb1afccc69f205cdf5b521d74e2aca</work.wx.ma.secret>
<spring.datasource.druid.url>
<![CDATA[jdbc:mysql://47.104.224.45:3308/esua_epdc_custom?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai]]>
</spring.datasource.druid.url>

30
esua-epdc/epdc-module/epdc-custom/epdc-custom-server/src/main/java/com/elink/esua/epdc/modules/epidemic/controller/EpidemicSentryPostController.java

@ -23,9 +23,10 @@ import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.commons.tools.validator.AssertUtils;
import com.elink.esua.epdc.commons.tools.validator.ValidatorUtils;
import com.elink.esua.epdc.commons.tools.validator.group.AddGroup;
import com.elink.esua.epdc.commons.tools.validator.group.UpdateGroup;
import com.elink.esua.epdc.commons.tools.validator.group.DefaultGroup;
import com.elink.esua.epdc.commons.tools.validator.group.UpdateGroup;
import com.elink.esua.epdc.dto.EpidemicSentryPostDTO;
import com.elink.esua.epdc.dto.form.CreateCodeFormDTO;
import com.elink.esua.epdc.modules.epidemic.excel.EpidemicSentryPostExcel;
import com.elink.esua.epdc.modules.epidemic.service.EpidemicSentryPostService;
import org.springframework.beans.factory.annotation.Autowired;
@ -145,5 +146,32 @@ public class EpidemicSentryPostController {
return epidemicSentryPostService.insertEpidemicList(file);
}
/**
*生成哨卡单个小程序码
*
* @author wangtong
* @date 2020/2/14 17:46
* @param [formDto]
* @return com.elink.esua.epdc.commons.tools.utils.Result
*/
@PostMapping("createCode")
public Result createCode(@RequestBody CreateCodeFormDTO formDto){
ValidatorUtils.validateEntity(formDto, new Class[0]);
return this.epidemicSentryPostService.CreateCodeFormDTO(formDto);
}
/**
*生成哨卡多个小程序码
*
* @author wangtong
* @date 2020/2/14 17:46
* @param [formDto]
* @return com.elink.esua.epdc.commons.tools.utils.Result
*/
@PostMapping("createCodes")
public Result createCodes(@RequestBody CreateCodeFormDTO formDto){
ValidatorUtils.validateEntity(formDto, new Class[0]);
return this.epidemicSentryPostService.CreateCodeFormDTOs(formDto);
}
}

31
esua-epdc/epdc-module/epdc-custom/epdc-custom-server/src/main/java/com/elink/esua/epdc/modules/epidemic/feign/OssFeignClient.java

@ -0,0 +1,31 @@
package com.elink.esua.epdc.modules.epidemic.feign;
import com.elink.esua.epdc.commons.tools.constant.ServiceConstant;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.UploadToOssDTO;
import com.elink.esua.epdc.modules.epidemic.feign.fallback.OssFeignClientFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
/**
* @author work@yujt.net.cn
* @date 19/9/19 10:12
*/
@FeignClient(name = ServiceConstant.EPDC_OSS_SERVER, fallback = OssFeignClientFallback.class)
public interface OssFeignClient {
//,url = "http://127.0.0.1:9095"
/**
* File文件上传到文件服务器
*
* @param dto
* @return com.elink.esua.epdc.commons.tools.utils.Result<java.lang.String>
* @author work@yujt.net.cn
* @date 2019/9/19 10:15
*/
@PostMapping(value = "oss/file/uploadFile", consumes = MediaType.APPLICATION_JSON_VALUE)
Result<String> uploadFile(UploadToOssDTO dto);
}

22
esua-epdc/epdc-module/epdc-custom/epdc-custom-server/src/main/java/com/elink/esua/epdc/modules/epidemic/feign/fallback/OssFeignClientFallback.java

@ -0,0 +1,22 @@
package com.elink.esua.epdc.modules.epidemic.feign.fallback;
import com.elink.esua.epdc.commons.tools.constant.ServiceConstant;
import com.elink.esua.epdc.commons.tools.utils.ModuleUtils;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.UploadToOssDTO;
import com.elink.esua.epdc.modules.epidemic.feign.OssFeignClient;
import org.springframework.stereotype.Component;
/**
* @author work@yujt.net.cn
* @date 19/9/19 10:12
*/
@Component
public class OssFeignClientFallback implements OssFeignClient {
@Override
public Result<String> uploadFile(UploadToOssDTO dto) {
return ModuleUtils.feignConError(ServiceConstant.EPDC_OSS_SERVER, "uploadFile", dto.getFileName());
}
}

22
esua-epdc/epdc-module/epdc-custom/epdc-custom-server/src/main/java/com/elink/esua/epdc/modules/epidemic/service/EpidemicSentryPostService.java

@ -21,9 +21,8 @@ import com.elink.esua.epdc.commons.mybatis.service.BaseService;
import com.elink.esua.epdc.commons.tools.page.PageData;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.EpidemicSentryPostDTO;
import com.elink.esua.epdc.dto.form.CreateCodeFormDTO;
import com.elink.esua.epdc.modules.epidemic.entity.EpidemicSentryPostEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@ -132,4 +131,23 @@ public interface EpidemicSentryPostService extends BaseService<EpidemicSentryPos
* @date 2020/2/14 12:38
*/
Result insertEpidemicList(MultipartFile file);
/**
*生成单个哨卡小程序码
*
* @author wangtong
* @date 2020/2/14 17:57
* @param [formDto]
* @return com.elink.esua.epdc.commons.tools.utils.Result
*/
Result CreateCodeFormDTO(CreateCodeFormDTO formDto);
/**
*生成多个哨卡小程序码
* @author wangtong
* @date 2020/2/14 20:58
* @param [formDto]
* @return com.elink.esua.epdc.commons.tools.utils.Result
*/
Result CreateCodeFormDTOs(CreateCodeFormDTO formDto);
}

128
esua-epdc/epdc-module/epdc-custom/epdc-custom-server/src/main/java/com/elink/esua/epdc/modules/epidemic/service/impl/EpidemicSentryPostServiceImpl.java

@ -19,29 +19,36 @@ package com.elink.esua.epdc.modules.epidemic.service.impl;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl;
import com.elink.esua.epdc.commons.tools.constant.FieldConstant;
import com.elink.esua.epdc.commons.tools.constant.NumConstant;
import com.elink.esua.epdc.commons.tools.exception.RenException;
import com.elink.esua.epdc.commons.tools.page.PageData;
import com.elink.esua.epdc.commons.tools.utils.ConvertUtils;
import com.elink.esua.epdc.commons.tools.constant.FieldConstant;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.config.StreamUtils;
import com.elink.esua.epdc.modules.epidemic.dao.EpidemicSentryPostDao;
import com.elink.esua.epdc.dto.EpidemicSentryPostDTO;
import com.elink.esua.epdc.dto.UploadToOssDTO;
import com.elink.esua.epdc.dto.form.CreateCodeFormDTO;
import com.elink.esua.epdc.modules.epidemic.dao.EpidemicSentryPostDao;
import com.elink.esua.epdc.modules.epidemic.entity.EpidemicSentryPostEntity;
import com.elink.esua.epdc.modules.epidemic.excel.EpidemicSentryPostExcel;
import com.elink.esua.epdc.modules.epidemic.feign.OssFeignClient;
import com.elink.esua.epdc.modules.epidemic.redis.EpidemicSentryPostRedis;
import com.elink.esua.epdc.modules.epidemic.service.EpidemicSentryPostService;
import com.elink.esua.epdc.utils.WxMaServiceUtils;
import me.chanjar.weixin.common.error.WxErrorException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@ -59,6 +66,17 @@ public class EpidemicSentryPostServiceImpl extends BaseServiceImpl<EpidemicSentr
@Autowired
private EpidemicSentryPostRedis epidemicSentryPostRedis;
@Autowired
private WxMaServiceUtils wxMaServiceUtils;
@Autowired
private OssFeignClient ossFeignClient;
/**
* 小程序首页
*/
private static String MA_FRONT_PAGE_URL = "pages/index/index";
@Override
public PageData<EpidemicSentryPostDTO> page(Map<String, Object> params) {
IPage<EpidemicSentryPostEntity> page = baseDao.selectPage(
@ -163,4 +181,106 @@ public class EpidemicSentryPostServiceImpl extends BaseServiceImpl<EpidemicSentr
}
return ConvertUtils.sourceToTarget(newEpidemicList, EpidemicSentryPostDTO.class);
}
@Transactional
@Override
public Result CreateCodeFormDTO(CreateCodeFormDTO formDto) {
if(formDto.getPostId()==null || "".equals(formDto.getPostId())){
throw new RenException("哨卡id不可为空!");
}
EpidemicSentryPostEntity entity = baseDao.selectById(formDto.getPostId());
if(entity == null){
throw new RenException("根据哨卡id未查到哨卡信息!");
}
if(entity.getGridId()==null || "".equals(formDto.getGridId())){
throw new RenException("根据哨卡id未查到网格id信息!");
}
String param = "G="+entity.getGridId()+";P="+entity.getSentryPostCode();
entity.setMaCodeUrl(this.createMaCode(param,MA_FRONT_PAGE_URL));
// entity.setMaCodeUrl("testUrl111");
baseDao.updateById(entity);
return new Result().ok("生成单个小程序码成功。");
}
@Transactional
@Override
public Result CreateCodeFormDTOs(CreateCodeFormDTO formDto) {
if(formDto.getGridId()==null || "".equals(formDto.getGridId())){
throw new RenException("网格id不可为空!");
}
EpidemicSentryPostEntity data = new EpidemicSentryPostEntity();
data.setGridId(formDto.getGridId());
QueryWrapper<EpidemicSentryPostEntity> wrapper = new QueryWrapper<>(data);
List<EpidemicSentryPostEntity> categoryEntityList = baseDao.selectList(wrapper);
if(categoryEntityList.size()==0 || categoryEntityList==null){
throw new RenException("根据网格id未查到哨卡信息!");
}
for(EpidemicSentryPostEntity entity : categoryEntityList){
String param = "G="+entity.getGridId()+";P="+entity.getSentryPostCode();
entity.setMaCodeUrl(this.createMaCode(param,MA_FRONT_PAGE_URL));
// entity.setMaCodeUrl("testUrl222");
baseDao.updateById(entity);
}
return new Result().ok("批量生成小程序码成功。");
}
/**
* 创建微信小程序码并上传到oss
*
* @param param 小程序码的参数
* @param pageUrl 小程序码的跳转链接
* @return java.lang.String 小程序码的下载抵制
* @author work@yujt.net.cn
* @date 2019/10/22 10:14
*/
private String createMaCode(String param, String pageUrl) {
File wxaCodeUnlimit;
try {
wxaCodeUnlimit = wxMaServiceUtils.normalWxMaService().getQrcodeService()
.createWxaCodeUnlimit(param, pageUrl, 1280, true, null, false);
} catch (WxErrorException e) {
throw new RenException("请求微信接口失败");
}
UploadToOssDTO dto = new UploadToOssDTO();
dto.setFileByte(this.fileToByteArray(wxaCodeUnlimit));
dto.setFileName(wxaCodeUnlimit.getName());
Result<String> ossResult = ossFeignClient.uploadFile(dto);
if (null == ossResult || !ossResult.success() || null == ossResult.getData()) {
throw new RenException("小程序码上传失败");
}
return ossResult.getData();
}
/**
* File文件转为byte[]
*
* @param file
* @return byte[]
* @author work@yujt.net.cn
* @date 2019/9/19 15:56
*/
private byte[] fileToByteArray(File file) {
try {
//获取输入流
FileInputStream fis = new FileInputStream(file);
//新的 byte 数组输出流,缓冲区容量1024byte
ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
//缓存
byte[] b = new byte[1024];
int n;
while ((n = fis.read(b)) != NumConstant.ONE_NEG) {
bos.write(b, NumConstant.ZERO, n);
}
fis.close();
//改变为byte[]
byte[] data = bos.toByteArray();
bos.close();
return data;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

19
esua-epdc/epdc-module/epdc-custom/epdc-custom-server/src/main/resources/application.yml

@ -64,3 +64,22 @@ mybatis-plus:
map-underscore-to-camel-case: true
cache-enabled: false
call-setters-on-nulls: true
wx:
ma:
configs:
- appid: @wx.ma.appId@
secret: @wx.ma.secret@
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
msgDataFormat: JSON
- appid: @work.wx.ma.appId@
secret: @work.wx.ma.secret@
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
msgDataFormat: JSON
appId:
# 普通居民端的appId
normal: @wx.ma.appId@
# 工作端的appId
work: @work.wx.ma.appId@
Loading…
Cancel
Save