Commit 45f39837 authored by shiyu's avatar shiyu

生成jsapi签名

parent 656ec308
......@@ -25,19 +25,19 @@ public class IdentifyOrderController {
SysIdentifyOrderService sysIdentifyOrderService;
@ApiOperation(value = "查询鉴定单")
@ApiOperation(value = "查询鉴定单列表")
@PostMapping("/findList")
public Result findList(@RequestBody IdentifyOrderRequestDto dto) {
logger.info("审核鉴定单,请求参数:{}", JSON.toJSONString(dto));
Validator validator = new Validator(FormHandler.ofEntity(dto));
validator.set("distributionOrderId", "分销订单号").must().string()
.set("identifyOrderId", "鉴定单号").must().string()
.set("approved", "审核结果").must().number()
.end();
if (!validator.isValid()) {
return Result.failed(validator.getErrorInfo());
logger.info("查询鉴定单列表,请求参数:{}", JSON.toJSONString(dto));
return sysIdentifyOrderService.findList(dto);
}
return sysIdentifyOrderService.identify(dto);
@ApiOperation(value = "查询鉴定单详情")
@PostMapping("/findDetail")
public Result findDetail(@RequestBody IdentifyOrderRequestDto dto) {
logger.info("查询鉴定单详情,请求参数:{}", JSON.toJSONString(dto));
return sysIdentifyOrderService.findDetail(dto);
}
......
......@@ -3,6 +3,7 @@ package com.wwdz.ch.admin.controller;
import com.alibaba.fastjson.JSON;
import com.wwdz.ch.admin.service.ImageCatelogDetailService;
import com.wwdz.ch.admin.service.ImageCatelogService;
import com.wwdz.ch.core.api.OfficialAccountApi;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.distribution.ImageCatelogRequestDto;
import io.swagger.annotations.ApiOperation;
......@@ -26,6 +27,9 @@ public class ImageCatelogController {
@Autowired
ImageCatelogDetailService imageCatelogDetailService;
@Autowired
OfficialAccountApi officialAccountApi;
@ApiOperation(value = "查询图录列表")
@PostMapping("/find")
public Result find(@RequestBody ImageCatelogRequestDto dto) {
......@@ -40,4 +44,12 @@ public class ImageCatelogController {
logger.info("查询图录内容,请求参数:{}", JSON.toJSONString(dto));
return imageCatelogDetailService.findDetailList(dto);
}
@ApiOperation(value = "分享图录生成签名信息")
@PostMapping("/createSignature")
public Result createSignature(@RequestBody ImageCatelogRequestDto dto) {
logger.info("分享图录生成签名信息,请求参数:{}", JSON.toJSONString(dto));
return officialAccountApi.getSignature(dto.getShareUrl());
}
}
......@@ -192,5 +192,38 @@ public class SysDistributionOrderVo implements Entity {
* 介绍人
*/
private String introducerName;
/**
* 中转状态
*/
private Integer transferState;
/**
* 中转状态
*/
private String transferStateName;
/**
* 鉴定是否通过
*/
private Integer approved;
/**
* 退回收货人名称
*/
private String returnName;
/**
* 退回收货人电话
*/
private String returnPhone;
/**
* 退回收货人地址
*/
private String returnAddress;
}
package com.wwdz.ch.admin.impl;
import com.github.pagehelper.PageInfo;
import com.wechat.pay.java.service.refund.model.Refund;
import com.wechat.pay.java.service.refund.model.Status;
import com.wwdz.ch.admin.entity.vo.SysDistributionOrderVo;
import com.wwdz.ch.admin.service.SysIdentifyOrderService;
import com.wwdz.ch.core.api.wxpay.WxPayServiceApi;
import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.consts.DistributionEnum;
import com.wwdz.ch.core.consts.LogisticsEnum;
import com.wwdz.ch.core.consts.RefundOrderEnum;
import com.wwdz.ch.core.entity.DeliveryNoticeMsg;
import com.wwdz.ch.core.entity.wxPay.DistributionOrderRefundRequestDto;
import com.wwdz.ch.core.service.SendMsgService;
import com.wwdz.ch.core.type.PageSearchResult;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.CacheUtil;
import com.wwdz.ch.core.util.IdUtils;
import com.wwdz.ch.core.util.MediaUtil;
import com.wwdz.ch.core.util.PriceUtil;
import com.wwdz.ch.db.dao.UserDao;
import com.wwdz.ch.db.dao.distribution.*;
import com.wwdz.ch.db.domain.User;
import com.wwdz.ch.db.domain.distribution.DistributionOrder;
import com.wwdz.ch.db.domain.distribution.IdentifyOrder;
import com.wwdz.ch.db.domain.distribution.RefundOrder;
import com.wwdz.ch.db.domain.distribution.SupplierItem;
import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto;
import com.wwdz.ch.db.dto.request.distribution.IdentifyOrderRequestDto;
import com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto;
import com.xxdxxs.utils.EntityMapper;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.slf4j.Logger;
......@@ -27,8 +38,17 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Service
public class SysIdentifyOrderServiceImpl implements SysIdentifyOrderService {
......@@ -59,6 +79,86 @@ public class SysIdentifyOrderServiceImpl implements SysIdentifyOrderService {
@Autowired
RedissonClient redissonClient;
@Autowired
UserDao userDao;
@Autowired
CacheUtil cacheUtil;
@Override
public Result findList(IdentifyOrderRequestDto dto) {
try {
List<SysDistributionOrderVo> distributionOrderVoList = new ArrayList<>();
if (StringUtils.hasLength(dto.getItemName())) {
//根据商品名称模糊查询
SupplierItemRequestDto supplierItemRequestDto = new SupplierItemRequestDto();
supplierItemRequestDto.setName(dto.getItemName());
List<SupplierItem> supplierItemList = supplierItemDao.findList(supplierItemRequestDto);
List<Long> itemIds = supplierItemList.stream().map(SupplierItem::getId).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(itemIds)) {
dto.setItemIdList(itemIds);
} else {
//没有对应名称的商品则直接返回空数据
return Result.success();
}
}
if (StringUtils.hasLength(dto.getSellerName())) {
//获取用户id
List<User> userList = userDao.findByNickName(dto.getSellerName());
List<Long> userIds = userList.stream().map(User::getId).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(userIds)) {
dto.setSellerIdList(userIds);
} else {
//没有对应的卖家返回空数据
return Result.success();
}
}
List<IdentifyOrder> identifyOrderList = identifyOrderDao.findList(dto);
PageInfo pageInfo = new PageInfo<>(identifyOrderList);
identifyOrderList.forEach(identifyOrder -> {
DistributionOrder distributionOrder = distributionOrderDao.findById(identifyOrder.getDistributionOrderId());
SysDistributionOrderVo distributionOrderVo = new SysDistributionOrderVo();
EntityMapper.copyAttribute(distributionOrder, distributionOrderVo);
SupplierItem supplierItem = supplierItemDao.findById(identifyOrder.getItemId());
distributionOrderVo.setItemName(supplierItem.getName());
long itemPrice = distributionOrder.getAmount() / distributionOrder.getItemNum();
distributionOrderVo.setAmount(PriceUtil.convertPriceFenToYuan(distributionOrder.getAmount()));
distributionOrderVo.setReturnName(identifyOrder.getReturnName());
distributionOrderVo.setReturnPhone(identifyOrder.getReturnPhone());
distributionOrderVo.setReturnAddress(identifyOrder.getReturnAddress());
distributionOrderVo.setItemPrice(PriceUtil.convertPriceFenToYuan(itemPrice));
distributionOrderVo.setStateName(DistributionEnum.DistributionOrderStateEnum.getNameByCode(identifyOrder.getState()));
distributionOrderVo.setTypeName(DistributionEnum.DistributionTypeEnum.getNameByCode(distributionOrder.getType()));
distributionOrderVo.setHomePageImage(MediaUtil.getHomePageImage(supplierItem.getImages(), supplierItem.getVideos()));
distributionOrderVo.setLogisticsName(LogisticsEnum.getNameByCode(distributionOrder.getLogisticsCode()));
distributionOrderVo.setBuyerName(cacheUtil.getAppletUserNameById(distributionOrder.getBuyerId()));
distributionOrderVo.setTransferState(identifyOrder.getState());
distributionOrderVo.setTransferStateName(DistributionEnum.IdentifyOrderStateEnum.getNameByCode(identifyOrder.getState()));
distributionOrderVo.setApproved(identifyOrder.getApproved());
distributionOrderVo.setSellerName(identifyOrder.getSellerId() == CommConsts.SYSTEM_ACCOUNT.longValue()? "系统账号" : cacheUtil.getAppletUserNameById(identifyOrder.getSellerId()));
distributionOrderVoList.add(distributionOrderVo);
});
return Result.success(PageSearchResult.of(pageInfo, distributionOrderVoList));
} catch (Exception e) {
logger.error("查询鉴定单列表失败 error : {}", e);
}
return Result.failed();
}
@Override
public Result findDetail(IdentifyOrderRequestDto dto) {
try {
} catch (Exception e) {
logger.error("鉴定单审核 error:{}", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
return Result.failed();
}
@Override
@Transactional
public Result identify(IdentifyOrderRequestDto dto) {
......@@ -91,6 +191,7 @@ public class SysIdentifyOrderServiceImpl implements SysIdentifyOrderService {
return Result.failed();
}
@Override
public Result delivery(IdentifyOrderRequestDto dto) {
try {
......
......@@ -6,6 +6,20 @@ import com.wwdz.ch.db.dto.request.distribution.IdentifyOrderRequestDto;
public interface SysIdentifyOrderService {
/**
* 查询鉴定单
* @param dto
* @return
*/
Result findList(IdentifyOrderRequestDto dto);
/**
* 查询鉴定单详情
* @param dto
* @return
*/
Result findDetail(IdentifyOrderRequestDto dto);
/**
* 审核鉴定单
* @param dto
......
package com.wwdz.ch.core.api;
import com.wwdz.ch.core.entity.ConsignSaleSubscribeMsg;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.OkHttpUtil;
import com.wwdz.ch.core.util.RedisUtils;
import com.xxdxxs.utils.JsonUtils;
......@@ -10,8 +11,14 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
/**
......@@ -26,6 +33,8 @@ public class OfficialAccountApi {
private final static String SEND_MSG_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send";
private final static String GET_JSAPI_TICKET = "https://api.weixin.qq.com/cgi-bin/ticket/getticket";
/**
......@@ -175,6 +184,95 @@ public class OfficialAccountApi {
}
public String getJsapiTicket() {
String key = OFFICIAL_ACCOUNT_APPID + "_jsapi_ticket";
String ticket = redisUtils.hasKey(key)? redisUtils.get(key).toString() : null;
if (StringUtils.isEmpty(ticket)) {
String token = getAccessToken();
String url = GET_USER_BASE_INFO_URL + "&access_token=" + token + "&type=jsapi";
OkHttpUtil okHttpUtil = OkHttpUtil.builder().url(url);
okHttpUtil.get();
String responseStr = okHttpUtil.async();
if (!responseStr.contains("ticket")) {
String errorCode = JsonUtils.getValueByPath(responseStr, "errcode");
String errmsg = JsonUtils.getValueByPath(responseStr, "errmsg");
//token失效
if (("40001").equals(errorCode)) {
refreshAccessToken();
}
logger.error(">>>>>>>> 获取JsapiTicket失败: {} ", errmsg);
} else {
ticket = JsonUtils.getValueByPath(responseStr, "ticket");
String expires_in = JsonUtils.getValueByPath(responseStr, "expires_in");
redisUtils.set(key, ticket, Long.valueOf(expires_in) - 10, TimeUnit.SECONDS);
}
}
return ticket;
}
public Result getSignature(String url) {
try {
String ticket = getJsapiTicket();
Map<String, String> map = new HashMap();
String nonce_str = create_nonce_str();
String timestamp = create_timestamp();
//注意这里参数名必须全部小写,且必须有序
String str = "jsapi_ticket=" + ticket +
"&noncestr=" + nonce_str +
"&timestamp=" + timestamp +
"&url=" + url;
logger.info("公众号生成jsapi签名原串 : {}", str);
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(str.getBytes("UTF-8"));
String signature = byteToHex(crypt.digest());
map.put("url", url);
map.put("jsapi_ticket", ticket);
map.put("nonceStr", nonce_str);
map.put("timestamp", timestamp);
map.put("signature", signature);
map.put("appId", OFFICIAL_ACCOUNT_APPID);//公众号appid
logger.info("获取签名返回的数据 : {}", map);
return Result.success(map);
} catch (Exception e) {
logger.error("获取公众号jsapi签名 error :{}", e);
}
return Result.failed();
}
/**
* 随机加密
* @param hash
* @return
*/
private static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
/**
* 产生随机串--由程序自己随机产生
* @return
*/
private String create_nonce_str() {
return UUID.randomUUID().toString();
}
/**
* 由程序自己获取当前时间
* @return
*/
private static String create_timestamp() {
return Long.toString(System.currentTimeMillis() / 1000);
}
}
......@@ -28,9 +28,9 @@ public class UploadImageCatelogUtil {
private static final Logger logger = LoggerFactory.getLogger(UploadImageCatelogUtil.class);
private final static String IMAGE_PATH = "/Users/xxdxxs/Documents/image_catelog/img/";
private final static String IMAGE_PATH = "/Users/xxdxxs/Documents/image_catelog/古泉园地2023秋季拍卖会/";
private final static Integer CATELOG_ID = 1;
private final static Integer CATELOG_ID = 2;
@Autowired
ImageCatelogDetailDao imageCatelogDetailDao;
......
package com.wwdz.ch.db.dao.distribution;
import com.wwdz.ch.db.domain.distribution.IdentifyOrder;
import com.wwdz.ch.db.dto.request.distribution.IdentifyOrderRequestDto;
import java.util.List;
public interface IdentifyOrderDao {
......@@ -25,6 +28,7 @@ public interface IdentifyOrderDao {
IdentifyOrder findByDistributionOrderId(String distributionOrderId);
List<IdentifyOrder> findList(IdentifyOrderRequestDto dto);
int updateState(String identifyOrderId, int state);
......
......@@ -5,6 +5,7 @@ import com.xxdxxs.entity.Entity;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class IdentifyOrderRequestDto extends BaseRequestDto implements Entity {
......@@ -26,11 +27,19 @@ public class IdentifyOrderRequestDto extends BaseRequestDto implements Entity {
*/
private Long sellerId;
private String sellerName;
private List<Long> sellerIdList;
/**
* 商品id
*/
private Long itemId;
private List<Long> itemIdList;
private String itemName;
/**
* 商品数量
*/
......
......@@ -44,6 +44,11 @@ public class ImageCatelogRequestDto extends BaseRequestDto implements Entity {
*/
private Boolean isValid;
/**
* 分享图录的页面地址
*/
private String shareUrl;
private static final long serialVersionUID = 1L;
@Override
......
package com.wwdz.ch.db.impl.distribution;
import com.github.pagehelper.PageHelper;
import com.wwdz.ch.db.dao.distribution.IdentifyOrderDao;
import com.wwdz.ch.db.domain.distribution.DistributionOrder;
import com.wwdz.ch.db.domain.distribution.DistributionOrderExample;
import com.wwdz.ch.db.domain.distribution.IdentifyOrder;
import com.wwdz.ch.db.domain.distribution.IdentifyOrderExample;
import com.wwdz.ch.db.dto.request.distribution.IdentifyOrderRequestDto;
import com.wwdz.ch.db.mapper.distribution.IdentifyOrderMapper;
import com.xxdxxs.db.component.JdbcHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.Date;
import java.util.List;
@Repository
public class IdentifyOrderDaoImpl implements IdentifyOrderDao {
......@@ -57,4 +61,18 @@ public class IdentifyOrderDaoImpl implements IdentifyOrderDao {
identifyOrder.setUpdateTime(new Date());
return identifyOrderMapper.updateByExampleSelective(identifyOrder, example);
}
@Override
public List<IdentifyOrder> findList(IdentifyOrderRequestDto dto) {
IdentifyOrderExample example = new IdentifyOrderExample();
IdentifyOrderExample.Criteria criteria = example.createCriteria();
JdbcHelper.ifPresent(dto.getDistributionOrderId(), criteria::andDistributionOrderIdEqualTo);
JdbcHelper.ifPresent(dto.getIdentifyOrderId(), criteria::andIdentifyOrderIdEqualTo);
JdbcHelper.ifPresent(dto.getItemIdList(), criteria::andItemIdIn);
JdbcHelper.ifPresent(dto.getSellerIdList(), criteria::andSellerIdIn);
JdbcHelper.ifPresent(dto.getState(), criteria::andStateEqualTo);
example.setOrderByClause("update_time desc");
PageHelper.startPage(dto.getPage(), dto.getLimit());
return identifyOrderMapper.selectByExample(example);
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment