Browse Source

对接拼团数据

master
wangfukang 4 weeks ago
parent
commit
a9e2dd9090
  1. 3
      hiver-core/src/main/java/cc/hiver/core/dao/UserDao.java
  2. 2
      hiver-core/src/main/java/cc/hiver/core/service/UserService.java
  3. 6
      hiver-core/src/main/java/cc/hiver/core/service/WorkerService.java
  4. 9
      hiver-core/src/main/java/cc/hiver/core/serviceimpl/UserServiceImpl.java
  5. 36
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/WorkerRelaPriceController.java
  6. 111
      hiver-modules/hiver-social/src/main/java/cc/hiver/social/controller/WechatController.java

3
hiver-core/src/main/java/cc/hiver/core/dao/UserDao.java

@ -95,6 +95,9 @@ public interface UserDao extends HiverBaseDao<User, String> {
@Query("select u from User u where u.unionid = ?1 ") @Query("select u from User u where u.unionid = ?1 ")
User findByUnionid(String unionid); User findByUnionid(String unionid);
@Query("select u from User u where u.officialAccountOpenid = ?1 ")
User findByOfficialAccountOpenid(String officialAccountOpenid);
@Query("select u from User u where u.miniProgramOpenid = ?1 ") @Query("select u from User u where u.miniProgramOpenid = ?1 ")
User findByMiniProgramOpenid(String miniProgramOpenid); User findByMiniProgramOpenid(String miniProgramOpenid);

2
hiver-core/src/main/java/cc/hiver/core/service/UserService.java

@ -133,6 +133,8 @@ public interface UserService extends HiverBaseService<User, String> {
User findByUnionid(String unionid); User findByUnionid(String unionid);
User findByOfficialAccountOpenid(String officialAccountOpenid);
User findByMiniProgramOpenid(String miniProgramOpenid); User findByMiniProgramOpenid(String miniProgramOpenid);
void setUserPhoneToNull(String userPhone); void setUserPhoneToNull(String userPhone);

6
hiver-core/src/main/java/cc/hiver/core/service/WorkerService.java

@ -19,9 +19,9 @@ public interface WorkerService extends HiverBaseService<Worker, String> {
/** /**
* 多条件分页获取抢单工 * 多条件分页获取抢单工
* *
* @param Worker * @param
* @param searchVo * @param
* @param pageable * @param
* @return * @return
*/ */
Page<Worker> findByCondition(WorkerQueryVO worker); Page<Worker> findByCondition(WorkerQueryVO worker);

9
hiver-core/src/main/java/cc/hiver/core/serviceimpl/UserServiceImpl.java

@ -325,8 +325,8 @@ public class UserServiceImpl implements UserService {
*/ */
@Override @Override
public void unSubscribeWxServer(WxMpUser user) { public void unSubscribeWxServer(WxMpUser user) {
final String unionid = user.getUnionId(); final String officialAccountOpenid = user.getOpenId();
User wechatUser = findByUnionid(unionid); User wechatUser = findByOfficialAccountOpenid(officialAccountOpenid);
// 接触微信公众号的openId // 接触微信公众号的openId
wechatUser.setOfficialAccountOpenid(""); wechatUser.setOfficialAccountOpenid("");
save(wechatUser); save(wechatUser);
@ -337,6 +337,11 @@ public class UserServiceImpl implements UserService {
return userDao.findByUnionid(unionid); return userDao.findByUnionid(unionid);
} }
@Override
public User findByOfficialAccountOpenid(String officialAccountOpenid) {
return userDao.findByOfficialAccountOpenid(officialAccountOpenid);
}
@Override @Override
public User findByMiniProgramOpenid(String miniProgramOpenid) { public User findByMiniProgramOpenid(String miniProgramOpenid) {
return userDao.findByMiniProgramOpenid(miniProgramOpenid); return userDao.findByMiniProgramOpenid(miniProgramOpenid);

36
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/WorkerRelaPriceController.java

@ -17,7 +17,9 @@ package cc.hiver.mall.controller;
import cc.hiver.core.common.utils.ResultUtil; import cc.hiver.core.common.utils.ResultUtil;
import cc.hiver.core.common.vo.Result; import cc.hiver.core.common.vo.Result;
import cc.hiver.core.entity.User;
import cc.hiver.core.entity.Worker; import cc.hiver.core.entity.Worker;
import cc.hiver.core.service.UserService;
import cc.hiver.core.service.WorkerService; import cc.hiver.core.service.WorkerService;
import cc.hiver.mall.entity.WorkerRelaPrice; import cc.hiver.mall.entity.WorkerRelaPrice;
import cc.hiver.mall.pojo.vo.WorkerRealPriceVo; import cc.hiver.mall.pojo.vo.WorkerRealPriceVo;
@ -47,6 +49,9 @@ public class WorkerRelaPriceController {
@Autowired @Autowired
private WorkerService workerService; private WorkerService workerService;
@Autowired
private UserService userService;
@RequestMapping(value = "/getByWorkerId", method = RequestMethod.GET) @RequestMapping(value = "/getByWorkerId", method = RequestMethod.GET)
@ApiOperation("根据配送员id获取") @ApiOperation("根据配送员id获取")
public Result<WorkerRealPriceVo> getByProductId(@RequestParam String workerId) { public Result<WorkerRealPriceVo> getByProductId(@RequestParam String workerId) {
@ -64,21 +69,42 @@ public class WorkerRelaPriceController {
@PostMapping(value = "/batchAdd") @PostMapping(value = "/batchAdd")
@ApiOperation("批量新增") @ApiOperation("批量新增")
public Result batchAdd(@RequestBody WorkerRealPriceVo workerRealPriceVo) { public Result<User> batchAdd(@RequestBody WorkerRealPriceVo workerRealPriceVo) {
User user = userService.findById(workerRealPriceVo.getUserId());
Worker worker = workerService.findByUserId(workerRealPriceVo.getUserId());
if(workerRealPriceVo != null){ if(workerRealPriceVo != null){
workerRelaPriceService.deleteByWorkerId(workerRealPriceVo.getWorkerRelaPriceList().get(0).getWorkerId()); workerRelaPriceService.deleteByWorkerId(worker.getWorkerId());
} }
//更新配送员信息 //更新配送员信息
Worker worker = new Worker();
worker.setWorkerId(workerRealPriceVo.getWorkerRelaPriceList().get(0).getWorkerId());
worker.setWorkerName(workerRealPriceVo.getWorkerName()); worker.setWorkerName(workerRealPriceVo.getWorkerName());
worker.setCardPicture(workerRealPriceVo.getCardPicture()); worker.setCardPicture(workerRealPriceVo.getCardPicture());
worker.setHighFloorFee(workerRealPriceVo.getHighFloorFee()); worker.setHighFloorFee(workerRealPriceVo.getHighFloorFee());
workerService.update(worker); workerService.update(worker);
// 批量新增配送规则 // 批量新增配送规则
if(workerRealPriceVo.getWorkerRelaPriceList() != null){
workerRealPriceVo.getWorkerRelaPriceList().forEach(workerRelaPrice -> {
workerRelaPrice.setWorkerId(worker.getWorkerId());
});
}
final boolean b = workerRelaPriceService.saveBatch(workerRealPriceVo.getWorkerRelaPriceList()); final boolean b = workerRelaPriceService.saveBatch(workerRealPriceVo.getWorkerRelaPriceList());
if (b) { if (b) {
return ResultUtil.success("保存成功!"); return new ResultUtil<User>().setData(user);
} else {
return ResultUtil.error("保存失败!");
}
}
@PostMapping(value = "/batchUpdate")
@ApiOperation("批量更新")
public Result batchUpdate(@RequestBody WorkerRealPriceVo workerRealPriceVo) {
Worker worker = workerService.findByUserId(workerRealPriceVo.getUserId());
//更新配送员信息 接受指派单
worker.setGetPushOrder(1);
workerService.update(worker);
// 批量更新配送规则
final boolean b = workerRelaPriceService.saveOrUpdateBatch(workerRealPriceVo.getWorkerRelaPriceList());
if (b) {
return ResultUtil.success("更新成功!");
} else { } else {
return ResultUtil.error("保存失败!"); return ResultUtil.error("保存失败!");
} }

111
hiver-modules/hiver-social/src/main/java/cc/hiver/social/controller/WechatController.java

@ -38,8 +38,13 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -231,39 +236,95 @@ public class WechatController {
* 公众号回调接口验证成功之后 * 公众号回调接口验证成功之后
* @author 王富康 * @author 王富康
* @date 2025/1/15 * @date 2025/1/15
* @param requestBody
* @param signature * @param signature
* @param timestamp * @param timestamp
* @param nonce * @param nonce
* @return String * @return String
*/ */
@RequestMapping("echo") @RequestMapping(value = "/echo", method = {RequestMethod.GET, RequestMethod.POST})
@ResponseBody @ResponseBody
public String configAccess(@RequestBody String requestBody, @RequestParam("signature") String signature, @RequestParam("timestamp") String timestamp, @RequestParam("nonce") String nonce) { public String configAccess(HttpServletRequest request,
// 校验签名 @RequestParam(value = "signature", required = false) String signature,
if (!wxMpService.checkSignature(timestamp, nonce, signature)) { @RequestParam(value = "timestamp", required = false) String timestamp,
log.error("签名校验 ===》 非法请求"); @RequestParam(value = "nonce", required = false) String nonce,
// 消息签名不正确,说明不是公众平台发过来的消息 @RequestParam(value = "echostr", required = false) String echostr) {
return null;
} String method = request.getMethod();
log.error("签名校验 ===》 验证成功"); log.info("====== 收到微信请求 [{}] ======", method);
// 解析消息体,封装为对象 // 1. 处理 GET 请求 (验证)
final WxMpXmlMessage xmlMessage = WxMpXmlMessage.fromXml(requestBody); if ("GET".equalsIgnoreCase(method)) {
WxMpXmlOutMessage outMessage = null; if (!wxMpService.checkSignature(timestamp, nonce, signature)) {
try { log.error("签名校验失败 (GET)");
// 将消息路由给对应的处理器,获取响应 return "error";
outMessage = wxMpMessageRouter.route(xmlMessage); }
} catch (Exception e) { log.info("验证成功,返回 echostr: {}", echostr);
log.error("消息路由异常", e); return echostr;
} }
if (outMessage != null) {
log.info("到了返回了========" + outMessage.toXml()); // 2. 处理 POST 请求 (消息推送)
} else { if ("POST".equalsIgnoreCase(method)) {
log.info("到了返回了========outMessage为空!"); if (!wxMpService.checkSignature(timestamp, nonce, signature)) {
log.error("签名校验失败 (POST)");
return "";
}
// 【核心修复】兼容 Java 8 的流读取方式
String requestBody = "";
try {
InputStream inputStream = request.getInputStream();
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
result.write(buffer, 0, length);
}
// 微信默认 UTF-8 编码
requestBody = result.toString(StandardCharsets.UTF_8.name());
} catch (IOException e) {
log.error("读取请求体 IO 异常", e);
return "success";
}
log.info(">>> 原始 XML 内容:\n{}", requestBody);
if (requestBody == null || requestBody.trim().isEmpty()) {
log.error("!!! 请求体为空,无法解析 !!!");
return "success";
}
// 解析 XML
WxMpXmlMessage xmlMessage;
try {
xmlMessage = WxMpXmlMessage.fromXml(requestBody);
} catch (Exception e) {
log.error("XML 解析异常", e);
log.error("原始内容可能是: {}", requestBody.substring(0, Math.min(100, requestBody.length())));
return "success";
}
log.info("解析结果 -> MsgType: {}, Event: {}, FromUser: {}",
xmlMessage.getMsgType(), xmlMessage.getEvent(), xmlMessage.getFromUser());
// 路由
WxMpXmlOutMessage outMessage = null;
try {
outMessage = wxMpMessageRouter.route(xmlMessage);
} catch (Exception e) {
log.error("消息路由异常", e);
}
if (outMessage != null) {
String xmlStr = outMessage.toXml();
log.info("返回消息: {}", xmlStr);
return xmlStr;
} else {
log.info("路由未匹配,返回 success");
return "success";
}
} }
// 将响应消息转换为xml格式返回
return outMessage == null ? null : outMessage.toXml(); return "";
} }
/** /**

Loading…
Cancel
Save