小程序代码迁移完毕
This commit is contained in:
parent
aa3e2a4f33
commit
ae58cafd81
@ -22,6 +22,17 @@
|
|||||||
<artifactId>ruoyi-common</artifactId>
|
<artifactId>ruoyi-common</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.binarywang</groupId>
|
||||||
|
<artifactId>weixin-java-miniapp</artifactId>
|
||||||
|
<version>${wx-java.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.binarywang</groupId>
|
||||||
|
<artifactId>weixin-java-pay</artifactId>
|
||||||
|
<version>${wx-java.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
@ -0,0 +1,91 @@
|
|||||||
|
package com.ruoyi.winery.component;
|
||||||
|
|
||||||
|
import cn.binarywang.wx.miniapp.api.WxMaService;
|
||||||
|
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
|
||||||
|
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.ruoyi.common.core.redis.RedisCache;
|
||||||
|
import com.ruoyi.winery.domain.WineryMauser;
|
||||||
|
import com.ruoyi.winery.service.IWineryMauserService;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import me.chanjar.weixin.common.error.WxErrorException;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author tottimctj
|
||||||
|
* @since 2020-12-15
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class MiniComponent {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
IWineryMauserService wineryMauserService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
WxMaService wxMaService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RedisCache redisCache;
|
||||||
|
|
||||||
|
|
||||||
|
public WxMaJscode2SessionResult login(String code) throws WxErrorException {
|
||||||
|
|
||||||
|
WxMaJscode2SessionResult sessionInfo = wxMaService.getUserService().getSessionInfo(code);
|
||||||
|
|
||||||
|
WineryMauser user = wineryMauserService.getById(sessionInfo.getOpenid());
|
||||||
|
String key = sessionInfo.getOpenid();
|
||||||
|
redisCache.setCacheObject(key, sessionInfo.getSessionKey(), 7200, TimeUnit.SECONDS);
|
||||||
|
if (user == null) {
|
||||||
|
user = new WineryMauser();
|
||||||
|
user.setOpenId(sessionInfo.getOpenid());
|
||||||
|
log.info("新增user:{}", user);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StrUtil.isNotBlank(sessionInfo.getUnionid())) {
|
||||||
|
user.setUnionId(sessionInfo.getUnionid());
|
||||||
|
}
|
||||||
|
wineryMauserService.saveOrUpdate(user);
|
||||||
|
|
||||||
|
return sessionInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取手机号
|
||||||
|
*
|
||||||
|
* @param json 微信加密信息
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getMobile(JSONObject json) {
|
||||||
|
|
||||||
|
String openid = json.getStr("openid");
|
||||||
|
WineryMauser user = wineryMauserService.getById(openid);
|
||||||
|
|
||||||
|
JSONObject detail = json.getJSONObject("detail");
|
||||||
|
String encryptedData = detail.getStr("encryptedData");
|
||||||
|
String iv = detail.getStr("iv");
|
||||||
|
|
||||||
|
|
||||||
|
String sessionKey = redisCache.getCacheObject(openid);
|
||||||
|
|
||||||
|
if (StrUtil.isBlank(sessionKey)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
WxMaPhoneNumberInfo mobile = wxMaService.getUserService().getPhoneNoInfo(sessionKey, encryptedData, iv);
|
||||||
|
|
||||||
|
user.setMobile(mobile.getPhoneNumber());
|
||||||
|
wineryMauserService.saveOrUpdate(user);
|
||||||
|
|
||||||
|
return mobile.getPhoneNumber();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,132 @@
|
|||||||
|
package com.ruoyi.winery.config.wx;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author tottimctj
|
||||||
|
* @since 2020-12-04
|
||||||
|
*/
|
||||||
|
|
||||||
|
import cn.binarywang.wx.miniapp.api.WxMaService;
|
||||||
|
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
|
||||||
|
import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage;
|
||||||
|
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
|
||||||
|
import cn.binarywang.wx.miniapp.message.WxMaMessageHandler;
|
||||||
|
import cn.binarywang.wx.miniapp.message.WxMaMessageRouter;
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
|
||||||
|
import me.chanjar.weixin.common.error.WxErrorException;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="https://github.com/binarywang">Binary Wang</a>
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Configuration
|
||||||
|
@EnableConfigurationProperties(WxMiniProperties.class)
|
||||||
|
public class WxMaConfiguration {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private WxMiniProperties properties;
|
||||||
|
|
||||||
|
private static final Map<String, WxMaMessageRouter> routers = Maps.newHashMap();
|
||||||
|
|
||||||
|
public static WxMaMessageRouter getRouter(String appid) {
|
||||||
|
return routers.get(appid);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@ConditionalOnMissingBean(name = "wxMaService")
|
||||||
|
public WxMaService wxMaService() {
|
||||||
|
|
||||||
|
|
||||||
|
WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
|
||||||
|
|
||||||
|
config.setAppid(properties.getAppId());
|
||||||
|
config.setSecret(properties.getSecret());
|
||||||
|
config.setToken(properties.getToken());
|
||||||
|
config.setAesKey(properties.getAesKey());
|
||||||
|
config.setMsgDataFormat(properties.getMsgDataFormat());
|
||||||
|
|
||||||
|
WxMaService service = new WxMaServiceImpl();
|
||||||
|
service.setWxMaConfig(config);
|
||||||
|
routers.put(properties.getAppId(), this.newRouter(service));
|
||||||
|
return service;
|
||||||
|
}
|
||||||
|
|
||||||
|
private WxMaMessageRouter newRouter(WxMaService service) {
|
||||||
|
final WxMaMessageRouter router = new WxMaMessageRouter(service);
|
||||||
|
// router
|
||||||
|
// .rule().handler(logHandler).next()
|
||||||
|
// .rule().async(false).content("订阅消息").handler(subscribeMsgHandler).end()
|
||||||
|
// .rule().async(false).content("文本").handler(textHandler).end()
|
||||||
|
// .rule().async(false).content("图片").handler(picHandler).end()
|
||||||
|
// .rule().async(false).content("二维码").handler(qrcodeHandler).end();
|
||||||
|
return router;
|
||||||
|
}
|
||||||
|
|
||||||
|
// private final WxMaMessageHandler subscribeMsgHandler = (wxMessage, context, service, sessionManager) -> {
|
||||||
|
// service.getMsgService().sendSubscribeMsg(WxMaSubscribeMessage.builder()
|
||||||
|
// .templateId("此处更换为自己的模板id")
|
||||||
|
// .data(Lists.newArrayList(
|
||||||
|
// new WxMaSubscribeMessage.Data("keyword1", "339208499")))
|
||||||
|
// .toUser(wxMessage.getFromUser())
|
||||||
|
// .build());
|
||||||
|
// return null;
|
||||||
|
// };
|
||||||
|
|
||||||
|
private final WxMaMessageHandler logHandler = (wxMessage, context, service, sessionManager) -> {
|
||||||
|
log.info("收到消息:" + wxMessage.toString());
|
||||||
|
service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("收到信息为:" + wxMessage.toJson())
|
||||||
|
.toUser(wxMessage.getFromUser()).build());
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
private final WxMaMessageHandler textHandler = (wxMessage, context, service, sessionManager) -> {
|
||||||
|
service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("回复文本消息")
|
||||||
|
.toUser(wxMessage.getFromUser()).build());
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
private final WxMaMessageHandler picHandler = (wxMessage, context, service, sessionManager) -> {
|
||||||
|
try {
|
||||||
|
WxMediaUploadResult uploadResult = service.getMediaService()
|
||||||
|
.uploadMedia("image", "png",
|
||||||
|
ClassLoader.getSystemResourceAsStream("tmp.png"));
|
||||||
|
service.getMsgService().sendKefuMsg(
|
||||||
|
WxMaKefuMessage
|
||||||
|
.newImageBuilder()
|
||||||
|
.mediaId(uploadResult.getMediaId())
|
||||||
|
.toUser(wxMessage.getFromUser())
|
||||||
|
.build());
|
||||||
|
} catch (WxErrorException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
private final WxMaMessageHandler qrcodeHandler = (wxMessage, context, service, sessionManager) -> {
|
||||||
|
try {
|
||||||
|
final File file = service.getQrcodeService().createQrcode("123", 430);
|
||||||
|
WxMediaUploadResult uploadResult = service.getMediaService().uploadMedia("image", file);
|
||||||
|
service.getMsgService().sendKefuMsg(
|
||||||
|
WxMaKefuMessage
|
||||||
|
.newImageBuilder()
|
||||||
|
.mediaId(uploadResult.getMediaId())
|
||||||
|
.toUser(wxMessage.getFromUser())
|
||||||
|
.build());
|
||||||
|
} catch (WxErrorException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,66 @@
|
|||||||
|
package com.ruoyi.winery.config.wx;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ConfigurationProperties(prefix = "wxmini")
|
||||||
|
public class WxMiniProperties {
|
||||||
|
/**
|
||||||
|
* 设置微信App的appid
|
||||||
|
*/
|
||||||
|
private String appId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信支付商户号
|
||||||
|
*/
|
||||||
|
private String mchId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信支付商户密钥
|
||||||
|
*/
|
||||||
|
private String mchKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务商模式下的子商户公众账号ID,普通模式请不要配置,请在配置文件中将对应项删除
|
||||||
|
*/
|
||||||
|
private String subAppId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务商模式下的子商户号,普通模式请不要配置,最好是请在配置文件中将对应项删除
|
||||||
|
*/
|
||||||
|
private String subMchId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* apiclient_cert.p12文件的绝对路径,或者如果放在项目中,请以classpath:开头指定
|
||||||
|
*/
|
||||||
|
private String keyPath;
|
||||||
|
/**
|
||||||
|
* 通知地址
|
||||||
|
*/
|
||||||
|
private String notifyUrl;
|
||||||
|
/**
|
||||||
|
* 交易类型
|
||||||
|
*/
|
||||||
|
private String tradeType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置微信小程序的Secret
|
||||||
|
*/
|
||||||
|
private String secret;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置微信小程序消息服务器配置的token
|
||||||
|
*/
|
||||||
|
private String token;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置微信小程序消息服务器配置的EncodingAESKey
|
||||||
|
*/
|
||||||
|
private String aesKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息格式,XML或者JSON
|
||||||
|
*/
|
||||||
|
private String msgDataFormat;
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
package com.ruoyi.winery.config.wx;
|
||||||
|
|
||||||
|
import com.github.binarywang.wxpay.config.WxPayConfig;
|
||||||
|
import com.github.binarywang.wxpay.service.WxPayService;
|
||||||
|
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kino
|
||||||
|
* @create 2019-07-23 14:53
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
@EnableConfigurationProperties({WxMiniProperties.class})
|
||||||
|
public class WxPayConfiguration {
|
||||||
|
private WxMiniProperties miniProperties;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public WxPayConfiguration(WxMiniProperties miniProperties) {
|
||||||
|
this.miniProperties = miniProperties;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@ConditionalOnMissingBean(name = "wxServiceMini") //微信小程序
|
||||||
|
public WxPayService wxServiceMini() {
|
||||||
|
WxPayConfig payConfig = new WxPayConfig();
|
||||||
|
payConfig.setAppId(StringUtils.trimToNull(this.miniProperties.getAppId()));
|
||||||
|
payConfig.setMchId(StringUtils.trimToNull(this.miniProperties.getMchId()));
|
||||||
|
payConfig.setMchKey(StringUtils.trimToNull(this.miniProperties.getMchKey()));
|
||||||
|
payConfig.setSubAppId(StringUtils.trimToNull(this.miniProperties.getSubAppId()));
|
||||||
|
payConfig.setSubMchId(StringUtils.trimToNull(this.miniProperties.getSubMchId()));
|
||||||
|
payConfig.setKeyPath(StringUtils.trimToNull(this.miniProperties.getKeyPath()));
|
||||||
|
payConfig.setNotifyUrl(StringUtils.trimToNull(this.miniProperties.getNotifyUrl()));
|
||||||
|
payConfig.setTradeType(StringUtils.trimToNull(this.miniProperties.getTradeType()));
|
||||||
|
|
||||||
|
// 可以指定是否使用沙箱环境
|
||||||
|
payConfig.setUseSandboxEnv(false);
|
||||||
|
|
||||||
|
WxPayService wxPayService = new WxPayServiceImpl();
|
||||||
|
wxPayService.setConfig(payConfig);
|
||||||
|
return wxPayService;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,15 +1,21 @@
|
|||||||
package com.ruoyi.winery.controller;
|
package com.ruoyi.winery.controller;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSON;
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
|
||||||
|
import java.security.Principal;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import com.ruoyi.common.annotation.DataScope;
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.PutMapping;
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
@ -46,6 +52,7 @@ public class WineryCompanyRecordController extends BaseController {
|
|||||||
@PreAuthorize("@ss.hasPermi('winery:winery_company_record:list')")
|
@PreAuthorize("@ss.hasPermi('winery:winery_company_record:list')")
|
||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
public TableDataInfo list(WineryCompanyRecord wineryCompanyRecord) {
|
public TableDataInfo list(WineryCompanyRecord wineryCompanyRecord) {
|
||||||
|
|
||||||
startPage();
|
startPage();
|
||||||
LambdaQueryWrapper<WineryCompanyRecord> lqw = Wrappers.lambdaQuery(wineryCompanyRecord);
|
LambdaQueryWrapper<WineryCompanyRecord> lqw = Wrappers.lambdaQuery(wineryCompanyRecord);
|
||||||
if (StringUtils.isNotBlank(wineryCompanyRecord.getStatus())) {
|
if (StringUtils.isNotBlank(wineryCompanyRecord.getStatus())) {
|
||||||
|
@ -64,8 +64,8 @@ public class WineryMauserController extends BaseController {
|
|||||||
if (wineryMauser.getCreateTime() != null){
|
if (wineryMauser.getCreateTime() != null){
|
||||||
lqw.eq(WineryMauser::getCreateTime ,wineryMauser.getCreateTime());
|
lqw.eq(WineryMauser::getCreateTime ,wineryMauser.getCreateTime());
|
||||||
}
|
}
|
||||||
if (StringUtils.isNotBlank(wineryMauser.getTenantId())){
|
if (StringUtils.isNotBlank(wineryMauser.getDeptId())){
|
||||||
lqw.eq(WineryMauser::getTenantId ,wineryMauser.getTenantId());
|
lqw.eq(WineryMauser::getDeptId ,wineryMauser.getDeptId());
|
||||||
}
|
}
|
||||||
List<WineryMauser> list = iWineryMauserService.list(lqw);
|
List<WineryMauser> list = iWineryMauserService.list(lqw);
|
||||||
return getDataTable(list);
|
return getDataTable(list);
|
||||||
@ -122,4 +122,5 @@ public class WineryMauserController extends BaseController {
|
|||||||
public AjaxResult remove(@PathVariable String[] openIds) {
|
public AjaxResult remove(@PathVariable String[] openIds) {
|
||||||
return toAjax(iWineryMauserService.removeByIds(Arrays.asList(openIds)) ? 1 : 0);
|
return toAjax(iWineryMauserService.removeByIds(Arrays.asList(openIds)) ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,172 @@
|
|||||||
|
package com.ruoyi.winery.controller.mini;
|
||||||
|
|
||||||
|
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.ruoyi.common.annotation.Log;
|
||||||
|
import com.ruoyi.common.core.domain.AjaxResult;
|
||||||
|
import com.ruoyi.common.enums.BusinessType;
|
||||||
|
import com.ruoyi.winery.component.MiniComponent;
|
||||||
|
import com.ruoyi.winery.domain.WineryCompanyRecord;
|
||||||
|
import com.ruoyi.winery.enums.IrrigationTypeEnum;
|
||||||
|
import com.ruoyi.winery.enums.SoilTypeEnum;
|
||||||
|
import com.ruoyi.winery.enums.WineryStatusEnum;
|
||||||
|
import com.ruoyi.winery.service.IWineryCompanyRecordService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import me.chanjar.weixin.common.error.WxErrorException;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author tottimctj
|
||||||
|
* @since 2020-11-10
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/winery/mini")
|
||||||
|
@Slf4j
|
||||||
|
public class MiniController {
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
MiniComponent miniComponent;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
IWineryCompanyRecordService recordWineryService;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过微信api授权获取手机号
|
||||||
|
*
|
||||||
|
* @param json
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Log(title = "发送小程序手机号码", businessType = BusinessType.OTHER)
|
||||||
|
@PostMapping("/sendMobile")
|
||||||
|
AjaxResult sendMobile(@RequestBody JSONObject json) {
|
||||||
|
|
||||||
|
String mobile = miniComponent.getMobile(json);
|
||||||
|
|
||||||
|
if (StrUtil.isBlank(mobile)) {
|
||||||
|
return AjaxResult.error("获取失败!");
|
||||||
|
}
|
||||||
|
|
||||||
|
JSONObject rsp = new JSONObject();
|
||||||
|
rsp.set("mobile", mobile);
|
||||||
|
|
||||||
|
return AjaxResult.success("获取成功.", rsp);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Log(title = "微信小程序登录", businessType = BusinessType.OTHER)
|
||||||
|
@GetMapping("/login")
|
||||||
|
public AjaxResult getSession(@RequestParam("code") String code) throws WxErrorException {
|
||||||
|
|
||||||
|
WxMaJscode2SessionResult sessionInfo = miniComponent.login(code);
|
||||||
|
|
||||||
|
JSONObject json = new JSONObject();
|
||||||
|
json.set("openid", sessionInfo.getOpenid());
|
||||||
|
log.info("微信小程序获取openid信息成功");
|
||||||
|
|
||||||
|
return AjaxResult.success(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Log(title = "提交酒庄厂家记录", businessType = BusinessType.INSERT)
|
||||||
|
@PostMapping("/postForm")
|
||||||
|
AjaxResult postForm(@RequestBody JSONObject json) {
|
||||||
|
|
||||||
|
WineryCompanyRecord record = parseRecordWineryModel(json);
|
||||||
|
WineryCompanyRecord old = recordWineryService.getOne(
|
||||||
|
new LambdaQueryWrapper<WineryCompanyRecord>().
|
||||||
|
eq(WineryCompanyRecord::getOpenid, json.getStr("openid")));
|
||||||
|
|
||||||
|
if (old != null) {
|
||||||
|
record.setId(old.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
return AjaxResult.success(recordWineryService.saveOrUpdate(record));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Log(title = "获取酒庄厂家记录", businessType = BusinessType.OTHER)
|
||||||
|
@GetMapping("/getForm")
|
||||||
|
AjaxResult getForm(@RequestParam String openid) {
|
||||||
|
|
||||||
|
WineryCompanyRecord record = recordWineryService.getOne(
|
||||||
|
new LambdaQueryWrapper<WineryCompanyRecord>().
|
||||||
|
eq(WineryCompanyRecord::getOpenid, openid));
|
||||||
|
|
||||||
|
return AjaxResult.success(record);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private WineryCompanyRecord parseRecordWineryModel(JSONObject json) {
|
||||||
|
|
||||||
|
WineryCompanyRecord record = new WineryCompanyRecord();
|
||||||
|
record.setOpenid(json.getStr("openid"));
|
||||||
|
record.setEmail(json.getStr("email"));
|
||||||
|
record.setPersonName(json.getStr("personName"));
|
||||||
|
record.setMobile(json.getStr("mobile"));
|
||||||
|
record.setWineryName(json.getStr("wineryName"));
|
||||||
|
record.setBuildTime(json.getStr("buildTime"));
|
||||||
|
|
||||||
|
record.setRegion(parseArrayToStr(json, "region"));
|
||||||
|
|
||||||
|
record.setAddress(json.getStr("address"));
|
||||||
|
record.setWineryArea(json.getLong("wineryArea"));
|
||||||
|
record.setBuildArea(json.getLong("buildArea"));
|
||||||
|
|
||||||
|
WineryStatusEnum wineryStatus = WineryStatusEnum.parseEnum(json.getStr("wineryStatus"));
|
||||||
|
record.setWineryStatus(wineryStatus);
|
||||||
|
|
||||||
|
|
||||||
|
record.setPlantArea(json.getLong("plantArea"));
|
||||||
|
record.setPlantWeight(json.getLong("plantWeight"));
|
||||||
|
|
||||||
|
SoilTypeEnum soilType = SoilTypeEnum.parseEnum(json.getStr("soilType"));
|
||||||
|
record.setSoilType(soilType);
|
||||||
|
|
||||||
|
|
||||||
|
record.setRedVariety(json.getJSONObject("redVariety").toStringPretty());
|
||||||
|
record.setWhiteVariety(json.getJSONObject("whiteVariety").toStringPretty());
|
||||||
|
|
||||||
|
IrrigationTypeEnum irrigationType = IrrigationTypeEnum.parseEnum(json.getStr("irrigationType"));
|
||||||
|
record.setIrrigationType(irrigationType);
|
||||||
|
|
||||||
|
record.setFermentationProcess(parseArrayToStr(json, "fermentationProcess"));
|
||||||
|
record.setContainer(parseArrayToStr(json, "container"));
|
||||||
|
record.setClarificationMethod(parseArrayToStr(json, "clarificationMethod"));
|
||||||
|
|
||||||
|
|
||||||
|
record.setAnnualOutput(json.getFloat("annualOutput"));
|
||||||
|
record.setStock(json.getFloat("stock"));
|
||||||
|
record.setBucketCount(json.getLong("bucketCount"));
|
||||||
|
|
||||||
|
record.setMainPrice(parseArrayToStr(json, "mainPrice"));
|
||||||
|
record.setSalesMode(parseArrayToStr(json, "salesMode"));
|
||||||
|
|
||||||
|
|
||||||
|
record.setAwards(parseArrayToStr(json, "awards"));
|
||||||
|
record.setAwardInformation(json.getStr("awardInformation"));
|
||||||
|
record.setSlogan(json.getStr("slogan"));
|
||||||
|
|
||||||
|
|
||||||
|
return record;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private String parseArrayToStr(JSONObject json, String key) {
|
||||||
|
List<String> list = json.getJSONArray(key).stream().map(x -> (String) x).collect(Collectors.toList());
|
||||||
|
return String.join(",", list);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String[] parseStrtoArray(JSONObject json, String key) {
|
||||||
|
return json.getStr(key).split(",");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -131,11 +131,11 @@ private static final long serialVersionUID=1L;
|
|||||||
|
|
||||||
/** 年产量 */
|
/** 年产量 */
|
||||||
@Excel(name = "年产量")
|
@Excel(name = "年产量")
|
||||||
private Long annualOutput;
|
private Float annualOutput;
|
||||||
|
|
||||||
/** 库存 */
|
/** 库存 */
|
||||||
@Excel(name = "库存")
|
@Excel(name = "库存")
|
||||||
private Long stock;
|
private Float stock;
|
||||||
|
|
||||||
/** 酒桶数量 */
|
/** 酒桶数量 */
|
||||||
@Excel(name = "酒桶数量")
|
@Excel(name = "酒桶数量")
|
||||||
|
@ -63,5 +63,5 @@ private static final long serialVersionUID=1L;
|
|||||||
|
|
||||||
/** 租户id */
|
/** 租户id */
|
||||||
@Excel(name = "租户id")
|
@Excel(name = "租户id")
|
||||||
private String tenantId;
|
private String deptId;
|
||||||
}
|
}
|
||||||
|
1
pom.xml
1
pom.xml
@ -34,6 +34,7 @@
|
|||||||
<jwt.version>0.9.1</jwt.version>
|
<jwt.version>0.9.1</jwt.version>
|
||||||
<mybatis-plus.version>3.4.1</mybatis-plus.version>
|
<mybatis-plus.version>3.4.1</mybatis-plus.version>
|
||||||
<hutool.version>5.4.0</hutool.version>
|
<hutool.version>5.4.0</hutool.version>
|
||||||
|
<wx-java.version>4.0.0</wx-java.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<!-- 依赖声明 -->
|
<!-- 依赖声明 -->
|
||||||
|
@ -190,3 +190,18 @@ xss:
|
|||||||
excludes: /system/notice/*
|
excludes: /system/notice/*
|
||||||
# 匹配链接
|
# 匹配链接
|
||||||
urlPatterns: /system/*,/monitor/*,/tool/*
|
urlPatterns: /system/*,/monitor/*,/tool/*
|
||||||
|
|
||||||
|
#微信小程序支付配置
|
||||||
|
wxmini:
|
||||||
|
appId: wx76ec015fc31a1946 #微信公众号或者小程序等的appid 必填
|
||||||
|
mchId: 1486984962
|
||||||
|
mchKey: 82aZ9Tb6eu5W2HdXKQWZU2SztU8w8nJ8
|
||||||
|
notifyUrl: http://41.mxl530.top:8087/zhongyihis/wxnotify
|
||||||
|
subAppId: #服务商模式下的子商户公众账号ID
|
||||||
|
subMchId: #服务商模式下的子商户号
|
||||||
|
tradeType: JSAPI #交易类型
|
||||||
|
keyPath: "classpath:/cert/apiclient_cert1486984962.p12" # p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
|
||||||
|
secret: 94ee42c0899a6ceccf353e1e729c50d4 #微信小程序的Secret
|
||||||
|
token: xiao4r #微信小程序消息服务器配置的token
|
||||||
|
aesKey: jNXajd2sQSMYQNg3rcdMF9HraUJxXF0iswgdMxVik9W #微信小程序消息服务器配置的EncodingAESKey
|
||||||
|
msgDataFormat: JSON
|
@ -3,8 +3,12 @@ package com.ruoyi.common.core.controller;
|
|||||||
import java.beans.PropertyEditorSupport;
|
import java.beans.PropertyEditorSupport;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||||
import org.springframework.web.bind.WebDataBinder;
|
import org.springframework.web.bind.WebDataBinder;
|
||||||
import org.springframework.web.bind.annotation.InitBinder;
|
import org.springframework.web.bind.annotation.InitBinder;
|
||||||
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageHelper;
|
||||||
@ -91,4 +95,20 @@ public class BaseController
|
|||||||
{
|
{
|
||||||
return StringUtils.format("redirect:{}", url);
|
return StringUtils.format("redirect:{}", url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取部门Id
|
||||||
|
* @param token
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getDeptId(UsernamePasswordAuthenticationToken token) {
|
||||||
|
JSONObject json = (JSONObject) JSONUtil.parse(token.getPrincipal());
|
||||||
|
|
||||||
|
String deptId = json.getJSONObject("user")
|
||||||
|
.getJSONObject("dept")
|
||||||
|
.getStr("deptId");
|
||||||
|
|
||||||
|
return deptId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -113,6 +113,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
|
|||||||
.antMatchers("/webjars/**").anonymous()
|
.antMatchers("/webjars/**").anonymous()
|
||||||
.antMatchers("/*/api-docs").anonymous()
|
.antMatchers("/*/api-docs").anonymous()
|
||||||
.antMatchers("/druid/**").anonymous()
|
.antMatchers("/druid/**").anonymous()
|
||||||
|
.antMatchers("/winery/mini/**").anonymous()
|
||||||
// 除上面外的所有请求全部需要鉴权认证
|
// 除上面外的所有请求全部需要鉴权认证
|
||||||
.anyRequest().authenticated()
|
.anyRequest().authenticated()
|
||||||
.and()
|
.and()
|
||||||
|
@ -46,9 +46,9 @@
|
|||||||
placeholder="选择创建时间">
|
placeholder="选择创建时间">
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="租户id" prop="tenantId">
|
<el-form-item label="租户id" prop="deptId">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.tenantId"
|
v-model="queryParams.deptId"
|
||||||
placeholder="请输入租户id"
|
placeholder="请输入租户id"
|
||||||
clearable
|
clearable
|
||||||
size="small"
|
size="small"
|
||||||
@ -115,7 +115,7 @@
|
|||||||
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="租户id" align="center" prop="tenantId" />
|
<el-table-column label="租户id" align="center" prop="deptId" />
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button
|
<el-button
|
||||||
@ -165,8 +165,8 @@
|
|||||||
<el-form-item label="unionid" prop="unionId">
|
<el-form-item label="unionid" prop="unionId">
|
||||||
<el-input v-model="form.unionId" placeholder="请输入unionid" :disabled="true" />
|
<el-input v-model="form.unionId" placeholder="请输入unionid" :disabled="true" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="租户id" prop="tenantId">
|
<el-form-item label="租户id" prop="deptId">
|
||||||
<el-input v-model="form.tenantId" placeholder="请输入租户id" />
|
<el-input v-model="form.deptId" placeholder="请输入租户id" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
@ -215,7 +215,7 @@ export default {
|
|||||||
nickName: undefined,
|
nickName: undefined,
|
||||||
unionId: undefined,
|
unionId: undefined,
|
||||||
createTime: undefined,
|
createTime: undefined,
|
||||||
tenantId: undefined
|
deptId: undefined
|
||||||
},
|
},
|
||||||
// 表单参数
|
// 表单参数
|
||||||
form: {},
|
form: {},
|
||||||
@ -259,7 +259,7 @@ export default {
|
|||||||
unionId: undefined,
|
unionId: undefined,
|
||||||
createTime: undefined,
|
createTime: undefined,
|
||||||
updateTime: undefined,
|
updateTime: undefined,
|
||||||
tenantId: undefined
|
deptId: undefined
|
||||||
};
|
};
|
||||||
this.resetForm("form");
|
this.resetForm("form");
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user