Commit 7b0a912f authored by shiyu's avatar shiyu

支付接口

parent b8eb0102
...@@ -190,7 +190,7 @@ public class ItemVo implements Entity { ...@@ -190,7 +190,7 @@ public class ItemVo implements Entity {
itemVo.setIsDeleted(item.getIsDeleted()); itemVo.setIsDeleted(item.getIsDeleted());
itemVo.setState(item.getState()); itemVo.setState(item.getState());
if (!ObjectUtils.isEmpty(item.getPrice())) { if (!ObjectUtils.isEmpty(item.getPrice())) {
itemVo.setPrice(Double.parseDouble(PriceUtil.convertPrice(item.getPrice()))); itemVo.setPrice(Double.parseDouble(PriceUtil.convertPriceFenToYuan(item.getPrice())));
} }
String topImage = item.getTopImage(); String topImage = item.getTopImage();
if (org.springframework.util.StringUtils.isEmpty(topImage)) { if (org.springframework.util.StringUtils.isEmpty(topImage)) {
......
...@@ -9,6 +9,7 @@ import com.wechat.pay.java.core.exception.ServiceException; ...@@ -9,6 +9,7 @@ import com.wechat.pay.java.core.exception.ServiceException;
import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension; import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension;
import com.wechat.pay.java.service.payments.jsapi.model.*; import com.wechat.pay.java.service.payments.jsapi.model.*;
import com.wechat.pay.java.service.payments.model.Transaction; import com.wechat.pay.java.service.payments.model.Transaction;
import com.wwdz.ch.core.consts.ResultCode;
import com.wwdz.ch.core.type.Result; import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto; import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto;
import com.xxdxxs.utils.JsonUtils; import com.xxdxxs.utils.JsonUtils;
...@@ -114,7 +115,7 @@ public class WxPayServiceApi { ...@@ -114,7 +115,7 @@ public class WxPayServiceApi {
* @param dto * @param dto
* @return * @return
*/ */
public Result<Object> queryOrderBytOutTradeNo(DistributionOrderRequestDto dto) { public Result<Transaction> queryOrderBytOutTradeNo(DistributionOrderRequestDto dto) {
QueryOrderByOutTradeNoRequest queryRequest = new QueryOrderByOutTradeNoRequest(); QueryOrderByOutTradeNoRequest queryRequest = new QueryOrderByOutTradeNoRequest();
queryRequest.setMchid(wxPayParamConfig.getMerchantId()); queryRequest.setMchid(wxPayParamConfig.getMerchantId());
queryRequest.setOutTradeNo(dto.getDistributionOrderId()); queryRequest.setOutTradeNo(dto.getDistributionOrderId());
...@@ -125,12 +126,15 @@ public class WxPayServiceApi { ...@@ -125,12 +126,15 @@ public class WxPayServiceApi {
.signType("RSA") // 不填默认为RSA .signType("RSA") // 不填默认为RSA
.build(); .build();
Transaction result = service.queryOrderByOutTradeNo(queryRequest); Transaction result = service.queryOrderByOutTradeNo(queryRequest);
logger.info("分销单号:{},查询支付结果返回:{}",dto.getDistributionOrderId(), result);
if (Transaction.TradeStateEnum.SUCCESS != result.getTradeState()) { if (Transaction.TradeStateEnum.SUCCESS != result.getTradeState()) {
logger.info("内部订单号【{}】,微信支付订单号【{}】支付未成功", result.getOutTradeNo(), result.getTransactionId()); logger.info("内部订单号【{}】, 微信支付订单号【{}】支付未成功", result.getOutTradeNo(), result.getTransactionId());
return Result.failed(ResultCode.PAY_FAILED);
} }
return Result.success(); logger.info("内部订单号【{}】, 微信支付订单号【{}】支付成功", result.getOutTradeNo(), result.getTransactionId());
return Result.success(result);
} catch (ServiceException e) { } catch (ServiceException e) {
logger.error("订单查询失败,返回码:{},返回信息:{}", e.getErrorCode(), e.getErrorMessage()); logger.error("订单查询失败,返回码:{} , 返回信息:{}", e.getErrorCode(), e.getErrorMessage());
return Result.failed(); return Result.failed();
} }
} }
......
...@@ -9,6 +9,7 @@ public class DistributionEnum { ...@@ -9,6 +9,7 @@ public class DistributionEnum {
PRE_PAY(1, "待付款"), PRE_PAY(1, "待付款"),
PRE_SEND(10, "待发货"), PRE_SEND(10, "待发货"),
PRE_SIGNED(20, "待收货"), PRE_SIGNED(20, "待收货"),
AFTER_SALE(30, "售后中"),
FINISH(100, "已完成"), FINISH(100, "已完成"),
CANCEL(101, "已取消"), CANCEL(101, "已取消"),
......
...@@ -60,6 +60,8 @@ public enum ResultCode { ...@@ -60,6 +60,8 @@ public enum ResultCode {
USER_STOP_AI_ANSWER(30000, "该问题被用户要求停止回答,回复不会被发送"), USER_STOP_AI_ANSWER(30000, "该问题被用户要求停止回答,回复不会被发送"),
NOT_CONFIRM_PRICE_FOR_SEND(30005, "请先确认是否满意货品的初步估价"), NOT_CONFIRM_PRICE_FOR_SEND(30005, "请先确认是否满意货品的初步估价"),
PAY_FAILED(30010, "支付失败"),
; ;
int code; int code;
......
...@@ -127,7 +127,7 @@ public class QCodeService { ...@@ -127,7 +127,7 @@ public class QCodeService {
Color priceColor = new Color(240, 20, 20); Color priceColor = new Color(240, 20, 20);
drawTextInImg(baseImage, "现价 ", 65, 787, colorComm, 24); drawTextInImg(baseImage, "现价 ", 65, 787, colorComm, 24);
drawTextInImg(baseImage, "¥ ", 120, 787, priceColor, 24); drawTextInImg(baseImage, "¥ ", 120, 787, priceColor, 24);
drawTextInImg(baseImage, PriceUtil.convertPrice(rawPrice), 145, 787, priceColor, 34); drawTextInImg(baseImage, PriceUtil.convertPriceFenToYuan(rawPrice), 145, 787, priceColor, 34);
// 写上商城名称 // 写上商城名称
......
...@@ -28,6 +28,10 @@ public class Result<T> implements Entity { ...@@ -28,6 +28,10 @@ public class Result<T> implements Entity {
this.errmsg = msg; this.errmsg = msg;
} }
public Result(Integer errno, Boolean successful) {
this.errno = errno;
this.success = successful;
}
public Result(Boolean successful, T body) { public Result(Boolean successful, T body) {
this.success = successful; this.success = successful;
...@@ -67,7 +71,7 @@ public class Result<T> implements Entity { ...@@ -67,7 +71,7 @@ public class Result<T> implements Entity {
} }
public static <T>Result<T> failed() { public static <T>Result<T> failed() {
return new Result<>(false); return new Result<>(ResultCode.FAILED.getCode(), false);
} }
public static<T> Result<T> failed(Integer code, String msg) { public static<T> Result<T> failed(Integer code, String msg) {
......
...@@ -5,7 +5,7 @@ import java.text.DecimalFormat; ...@@ -5,7 +5,7 @@ import java.text.DecimalFormat;
public class PriceUtil { public class PriceUtil {
public static String convertPrice(Long rawPrice) { public static String convertPriceFenToYuan(Long rawPrice) {
BigDecimal price = new BigDecimal((rawPrice.doubleValue() / 100)); BigDecimal price = new BigDecimal((rawPrice.doubleValue() / 100));
price = price.setScale(2, BigDecimal.ROUND_HALF_UP); price = price.setScale(2, BigDecimal.ROUND_HALF_UP);
return price.toString(); return price.toString();
...@@ -38,7 +38,7 @@ public class PriceUtil { ...@@ -38,7 +38,7 @@ public class PriceUtil {
} }
public static void main(String[] args) { public static void main(String[] args) {
System.out.println(convertPrice(3980L)); System.out.println(convertPriceFenToYuan(3980L));
System.out.println(UUID.fastUUID().toString(true)); System.out.println(UUID.fastUUID().toString(true));
} }
} }
package com.wwdz.ch.core.util; package com.wwdz.ch.core.util;
import com.xxdxxs.utils.DateUtils;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public final class TimeUtil { public final class TimeUtil {
...@@ -17,4 +21,18 @@ public final class TimeUtil { ...@@ -17,4 +21,18 @@ public final class TimeUtil {
ZoneId zone = ZoneId.systemDefault(); ZoneId zone = ZoneId.systemDefault();
return LocalDateTime.ofInstant(instant, zone); return LocalDateTime.ofInstant(instant, zone);
} }
public static String wxTimeConvert(String time) {
LocalDateTime date = LocalDateTime.parse(time, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
String dateStr = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
return dateStr;
}
public static Date wxTimeConvertToDate(String time) {
LocalDateTime date = LocalDateTime.parse(time, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
String dateStr = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
return DateUtils.parseString(dateStr);
}
} }
package com.wwdz.ch.db.bean;
import com.xxdxxs.entity.Entity;
import lombok.Data;
/**
* 各状态的订单数量
*/
@Data
public class DistributionOrderNum implements Entity {
private Integer state;
private String stateName;
private Integer num;
}
package com.wwdz.ch.db.dao.distribution; package com.wwdz.ch.db.dao.distribution;
import com.wwdz.ch.db.bean.DistributionOrderNum;
import com.wwdz.ch.db.domain.distribution.DistributionOrder; import com.wwdz.ch.db.domain.distribution.DistributionOrder;
import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto; import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
public interface DistributionOrderDao { public interface DistributionOrderDao {
...@@ -74,4 +77,18 @@ public interface DistributionOrderDao { ...@@ -74,4 +77,18 @@ public interface DistributionOrderDao {
* 更改分销订单状态 * 更改分销订单状态
*/ */
boolean updateState(String distributionOrderId, int state); boolean updateState(String distributionOrderId, int state);
/**
* 统计分销商各状态的订单数量
* @param distributorId
* @return
*/
List<DistributionOrderNum> countGroupByStateForDistributor(long distributorId);
/**
* 统计用户各状态的订单数量
* @param userId
* @return
*/
List<DistributionOrderNum> countGroupByStateForUser(long userId);
} }
...@@ -20,4 +20,36 @@ public interface DistributorProfitDao { ...@@ -20,4 +20,36 @@ public interface DistributorProfitDao {
* @return * @return
*/ */
int update(DistributorProfit distributorProfit); int update(DistributorProfit distributorProfit);
/**
* 利润记录设置为无效
* @param distributionOrderId
* @return
*/
int updateValid(String distributionOrderId);
/**
* 统计分销商卖出的商品数量
*
* @param distributorId
* @return
*/
Long countSellItemNum(long distributorId);
/**
* 统计分销商售出金额
*
* @param distributorId
* @return
*/
Long countSellAmount(long distributorId);
/**
* 统计分销商获得利润
*
* @param distributorId
* @return
*/
Long countProfit(long distributorId);
} }
package com.wwdz.ch.db.domain.distribution; package com.wwdz.ch.db.domain.distribution;
import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date; import java.util.Date;
......
...@@ -5,6 +5,7 @@ import com.xxdxxs.entity.Entity; ...@@ -5,6 +5,7 @@ import com.xxdxxs.entity.Entity;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* 分销订单请求参数类 * 分销订单请求参数类
...@@ -12,6 +13,12 @@ import java.util.Date; ...@@ -12,6 +13,12 @@ import java.util.Date;
@Data @Data
public class DistributionOrderRequestDto extends BaseRequestDto implements Entity { public class DistributionOrderRequestDto extends BaseRequestDto implements Entity {
/**
* 商品名称/分销单号
* 正则判断根据哪个字段查询
*/
private String searchParam;
/** /**
* 分销分享记录id * 分销分享记录id
*/ */
...@@ -22,6 +29,8 @@ public class DistributionOrderRequestDto extends BaseRequestDto implements Entit ...@@ -22,6 +29,8 @@ public class DistributionOrderRequestDto extends BaseRequestDto implements Entit
*/ */
private Long itemId; private Long itemId;
private List<Long> itemIdList;
/** /**
* 商品名称 * 商品名称
* 模糊查询 * 模糊查询
......
package com.wwdz.ch.db.impl.distribution; package com.wwdz.ch.db.impl.distribution;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.wwdz.ch.db.bean.DistributionOrderNum;
import com.wwdz.ch.db.dao.distribution.DistributionOrderDao; import com.wwdz.ch.db.dao.distribution.DistributionOrderDao;
import com.wwdz.ch.db.domain.ConsignSaleExample; import com.wwdz.ch.db.domain.ConsignSaleExample;
import com.wwdz.ch.db.domain.distribution.DistributionOrder; import com.wwdz.ch.db.domain.distribution.DistributionOrder;
...@@ -63,6 +64,7 @@ public class DistributionOrderDaoImpl implements DistributionOrderDao { ...@@ -63,6 +64,7 @@ public class DistributionOrderDaoImpl implements DistributionOrderDao {
DistributionOrderExample example = new DistributionOrderExample(); DistributionOrderExample example = new DistributionOrderExample();
DistributionOrderExample.Criteria criteria = example.createCriteria(); DistributionOrderExample.Criteria criteria = example.createCriteria();
JdbcHelper.ifPresent(dto.getDistributionOrderId(), criteria::andDistributionOrderIdEqualTo); JdbcHelper.ifPresent(dto.getDistributionOrderId(), criteria::andDistributionOrderIdEqualTo);
JdbcHelper.ifPresent(dto.getItemIdList(), criteria::andItemIdIn);
JdbcHelper.ifPresent(dto.getShopId(), criteria::andShopIdEqualTo); JdbcHelper.ifPresent(dto.getShopId(), criteria::andShopIdEqualTo);
JdbcHelper.ifPresent(dto.getBuyerId(), criteria::andBuyerIdEqualTo); JdbcHelper.ifPresent(dto.getBuyerId(), criteria::andBuyerIdEqualTo);
JdbcHelper.ifPresent(dto.getSellerId(), criteria::andSellerIdEqualTo); JdbcHelper.ifPresent(dto.getSellerId(), criteria::andSellerIdEqualTo);
...@@ -102,4 +104,14 @@ public class DistributionOrderDaoImpl implements DistributionOrderDao { ...@@ -102,4 +104,14 @@ public class DistributionOrderDaoImpl implements DistributionOrderDao {
distributionOrder.setUpdateTime(new Date()); distributionOrder.setUpdateTime(new Date());
return distributionOrderMapper.updateByExampleSelective(distributionOrder, example) > 0; return distributionOrderMapper.updateByExampleSelective(distributionOrder, example) > 0;
} }
@Override
public List<DistributionOrderNum> countGroupByStateForDistributor(long distributorId) {
return distributionOrderMapper.countGroupByStateForDistributor(distributorId);
}
@Override
public List<DistributionOrderNum> countGroupByStateForUser(long userId) {
return distributionOrderMapper.countGroupByStateForUser(userId);
}
} }
...@@ -2,6 +2,7 @@ package com.wwdz.ch.db.impl.distribution; ...@@ -2,6 +2,7 @@ package com.wwdz.ch.db.impl.distribution;
import com.wwdz.ch.db.dao.distribution.DistributorProfitDao; import com.wwdz.ch.db.dao.distribution.DistributorProfitDao;
import com.wwdz.ch.db.domain.distribution.DistributorProfit; import com.wwdz.ch.db.domain.distribution.DistributorProfit;
import com.wwdz.ch.db.domain.distribution.DistributorProfitExample;
import com.wwdz.ch.db.mapper.distribution.DistributorProfitMapper; import com.wwdz.ch.db.mapper.distribution.DistributorProfitMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -14,11 +15,42 @@ public class DistributorProfitDaoImpl implements DistributorProfitDao { ...@@ -14,11 +15,42 @@ public class DistributorProfitDaoImpl implements DistributorProfitDao {
@Override @Override
public int insert(DistributorProfit distributorProfit) { public int insert(DistributorProfit distributorProfit) {
return 0; return distributorProfitMapper.insert(distributorProfit);
} }
@Override @Override
public int update(DistributorProfit distributorProfit) { public int update(DistributorProfit distributorProfit) {
return 0; DistributorProfitExample example = new DistributorProfitExample();
DistributorProfitExample.Criteria criteria = example.createCriteria();
criteria.andDistributionOrderIdEqualTo(distributorProfit.getDistributionOrderId());
return distributorProfitMapper.updateByExample(distributorProfit, example);
}
@Override
public int updateValid(String distributionOrderId) {
DistributorProfitExample example = new DistributorProfitExample();
DistributorProfitExample.Criteria criteria = example.createCriteria();
criteria.andDistributionOrderIdEqualTo(distributionOrderId);
DistributorProfit distributorProfit = new DistributorProfit();
distributorProfit.setIsValid(false);
return distributorProfitMapper.updateByExample(distributorProfit, example);
}
@Override
public Long countSellItemNum(long distributorId) {
Long num = distributorProfitMapper.countSellItemNum(distributorId);
return num == null ? 0 : num;
}
@Override
public Long countSellAmount(long distributorId) {
Long num = distributorProfitMapper.countSellAmount(distributorId);
return num == null ? 0 : num;
}
@Override
public Long countProfit(long distributorId) {
Long num = distributorProfitMapper.countProfit(distributorId);
return num == null ? 0 : num;
} }
} }
...@@ -7,6 +7,7 @@ import com.wwdz.ch.db.domain.distribution.SupplierItemExample; ...@@ -7,6 +7,7 @@ import com.wwdz.ch.db.domain.distribution.SupplierItemExample;
import com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto; import com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto;
import com.wwdz.ch.db.mapper.distribution.SupplierItemMapper; import com.wwdz.ch.db.mapper.distribution.SupplierItemMapper;
import com.xxdxxs.db.component.JdbcHelper; import com.xxdxxs.db.component.JdbcHelper;
import com.xxdxxs.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
...@@ -22,6 +23,9 @@ public class SupplierItemDaoImpl implements SupplierItemDao { ...@@ -22,6 +23,9 @@ public class SupplierItemDaoImpl implements SupplierItemDao {
SupplierItemExample supplierItemExample = new SupplierItemExample(); SupplierItemExample supplierItemExample = new SupplierItemExample();
SupplierItemExample.Criteria criteria = supplierItemExample.createCriteria(); SupplierItemExample.Criteria criteria = supplierItemExample.createCriteria();
JdbcHelper.ifPresent(dto.getId(), criteria::andIdEqualTo); JdbcHelper.ifPresent(dto.getId(), criteria::andIdEqualTo);
if (StringUtils.hasLength(dto.getName())) {
criteria.andNameLike("%" + dto.getName() + "%");
}
JdbcHelper.ifPresent(dto.getIsOnSale(), criteria::andIsOnSaleEqualTo); JdbcHelper.ifPresent(dto.getIsOnSale(), criteria::andIsOnSaleEqualTo);
JdbcHelper.ifPresent(dto.getIsDeleted(), criteria::andIsDeletedEqualTo); JdbcHelper.ifPresent(dto.getIsDeleted(), criteria::andIsDeletedEqualTo);
PageHelper.startPage(dto.getPage(), dto.getLimit()); PageHelper.startPage(dto.getPage(), dto.getLimit());
......
package com.wwdz.ch.db.mapper.distribution; package com.wwdz.ch.db.mapper.distribution;
import com.wwdz.ch.db.bean.DistributionOrderNum;
import com.wwdz.ch.db.domain.distribution.DistributionOrder; import com.wwdz.ch.db.domain.distribution.DistributionOrder;
import com.wwdz.ch.db.domain.distribution.DistributionOrderExample; import com.wwdz.ch.db.domain.distribution.DistributionOrderExample;
import java.util.List; import java.util.List;
...@@ -66,4 +67,19 @@ public interface DistributionOrderMapper { ...@@ -66,4 +67,19 @@ public interface DistributionOrderMapper {
int updateByPrimaryKeySelective(DistributionOrder record); int updateByPrimaryKeySelective(DistributionOrder record);
int updateByPrimaryKey(DistributionOrder record); int updateByPrimaryKey(DistributionOrder record);
/**
* 统计分销商各状态的订单数量
* @param distributorId
* @return
*/
List<DistributionOrderNum> countGroupByStateForDistributor(@Param("sellerId")Long distributorId);
/**
* 统计用户各状态的订单数量
* @param userId
* @return
*/
List<DistributionOrderNum> countGroupByStateForUser(@Param("buyerId")Long userId);
} }
\ No newline at end of file
...@@ -66,4 +66,27 @@ public interface DistributorProfitMapper { ...@@ -66,4 +66,27 @@ public interface DistributorProfitMapper {
int updateByPrimaryKeySelective(DistributorProfit record); int updateByPrimaryKeySelective(DistributorProfit record);
int updateByPrimaryKey(DistributorProfit record); int updateByPrimaryKey(DistributorProfit record);
/**
* 统计分销商卖出的商品数量
* @param distributorId
* @return
*/
Long countSellItemNum(@Param("distributorId")Long distributorId);
/**
* 统计分销商售出金额
* @param distributorId
* @return
*/
Long countSellAmount(@Param("distributorId")Long distributorId);
/**
* 统计分销商获得利润
* @param distributorId
* @return
*/
Long countProfit(@Param("distributorId")Long distributorId);
} }
\ No newline at end of file
...@@ -613,4 +613,12 @@ ...@@ -613,4 +613,12 @@
limit 1 limit 1
</select> </select>
<select id="countGroupByStateForDistributor" parameterType="java.lang.Long" resultType="com.wwdz.ch.db.bean.DistributionOrderNum">
select state, count(distribution_order_id) as num from distribution_order where seller_id = #{sellerId} group by state
</select>
<select id="countGroupByStateForUser" parameterType="java.lang.Long" resultType="com.wwdz.ch.db.bean.DistributionOrderNum">
select state, count(distribution_order_id) as num from distribution_order where buyer_id = #{buyerId} group by state
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -401,4 +401,16 @@ ...@@ -401,4 +401,16 @@
</if> </if>
limit 1 limit 1
</select> </select>
<select id="countSellItemNum" parameterType="java.lang.Long" resultType="java.lang.Long">
select sum(item_num) from distributor_profit where distributor_id = #{distributorId} and is_valid = 1
</select>
<select id="countSellAmount" parameterType="java.lang.Long" resultType="java.lang.Long">
select sum(amount) from distributor_profit where distributor_id = #{distributorId} and is_valid = 1
</select>
<select id="countProfit" parameterType="java.lang.Long" resultType="java.lang.Long">
select sum(profit) from distributor_profit where distributor_id = #{distributorId} and is_valid = 1
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -4,8 +4,14 @@ import com.wechat.pay.java.core.RSAAutoCertificateConfig; ...@@ -4,8 +4,14 @@ import com.wechat.pay.java.core.RSAAutoCertificateConfig;
import com.wechat.pay.java.core.notification.NotificationParser; import com.wechat.pay.java.core.notification.NotificationParser;
import com.wechat.pay.java.core.notification.RequestParam; import com.wechat.pay.java.core.notification.RequestParam;
import com.wechat.pay.java.service.payments.model.Transaction; import com.wechat.pay.java.service.payments.model.Transaction;
import com.wwdz.ch.core.api.wxpay.WxPayServiceApi;
import com.wwdz.ch.core.consts.DistributionEnum;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.RedisUtils; import com.wwdz.ch.core.util.RedisUtils;
import com.wwdz.ch.core.util.TimeUtil;
import com.wwdz.ch.db.dao.distribution.DistributionOrderDao; import com.wwdz.ch.db.dao.distribution.DistributionOrderDao;
import com.wwdz.ch.db.domain.distribution.DistributionOrder;
import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto;
import com.xxdxxs.utils.JsonUtils; import com.xxdxxs.utils.JsonUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -39,6 +45,9 @@ public class WxPayCallbackController { ...@@ -39,6 +45,9 @@ public class WxPayCallbackController {
@Autowired @Autowired
DistributionOrderDao distributionOrderDao; DistributionOrderDao distributionOrderDao;
@Autowired
WxPayServiceApi wxPayServiceApi;
@RequestMapping(value ="/getPayNotify") @RequestMapping(value ="/getPayNotify")
public synchronized String payNotify(HttpServletRequest request) throws IOException { public synchronized String payNotify(HttpServletRequest request) throws IOException {
logger.info("------------------ 收到微信支付回调通知 ------------------"); logger.info("------------------ 收到微信支付回调通知 ------------------");
...@@ -74,8 +83,7 @@ public class WxPayCallbackController { ...@@ -74,8 +83,7 @@ public class WxPayCallbackController {
transaction = parser.parse(requestParam, Transaction.class); transaction = parser.parse(requestParam, Transaction.class);
logger.info("验签成功!-支付回调结果:{}", transaction.toString()); logger.info("验签成功!-支付回调结果:{}", transaction.toString());
if (Transaction.TradeStateEnum.SUCCESS != transaction.getTradeState()) { if (Transaction.TradeStateEnum.SUCCESS != transaction.getTradeState()) {
logger.info("内部订单号【{}】,微信支付订单号【{}】支付未成功", transaction.getOutTradeNo(), transaction.getTransactionId()); logger.info("支付回调结果 >>> 内部订单号【{}】,微信支付订单号【{}】支付未成功", transaction.getOutTradeNo(), transaction.getTransactionId());
return JsonUtils.from(returnMap);
} }
} catch (Exception e) { } catch (Exception e) {
logger.error("验签失败 : {}", e); logger.error("验签失败 : {}", e);
...@@ -91,12 +99,27 @@ public class WxPayCallbackController { ...@@ -91,12 +99,27 @@ public class WxPayCallbackController {
} }
redisUtils.set(distributionOrderId, distributionOrderId); redisUtils.set(distributionOrderId, distributionOrderId);
//调用微信查询订单接口查询订单当前状态 //调用微信查询订单接口查询订单当前状态
DistributionOrderRequestDto distributionOrderRequestDto = new DistributionOrderRequestDto();
//查询订单在系统中的当前状态 distributionOrderRequestDto.setDistributionOrderId(distributionOrderId);
Result<Transaction> queryResult = wxPayServiceApi.queryOrderBytOutTradeNo(distributionOrderRequestDto);
/*****/ //支付成功,修改订单状态
//修改订单信息 if (queryResult.getSuccess()) {
/*****/ //查询系统中订单现在的状态,避免重复更新
DistributionOrder distributionOrder = distributionOrderDao.findById(distributionOrderId);
if (distributionOrder.getState() == DistributionEnum.DistributionOrderStateEnum.PRE_PAY.getCode()) {
//微信支付交易id
String transactionId = transaction.getTransactionId();
//支付成功时间
String payTime = transaction.getSuccessTime();
//支付成功,更新订单状态为待发货
DistributionOrder distributionOrderDto = new DistributionOrder();
distributionOrderDto.setDistributionOrderId(distributionOrderId);
distributionOrderDto.setTransactionId(transactionId);
distributionOrderDto.setPayTime(TimeUtil.wxTimeConvertToDate(payTime));
distributionOrderDto.setState(DistributionEnum.DistributionOrderStateEnum.PRE_SEND.getCode());
distributionOrderDao.update(distributionOrder);
}
}
returnMap.put("code", "SUCCESS"); returnMap.put("code", "SUCCESS");
returnMap.put("message", "成功"); returnMap.put("message", "成功");
return JsonUtils.from(returnMap); return JsonUtils.from(returnMap);
......
...@@ -42,7 +42,7 @@ public class WebMvcConfiguration implements WebMvcConfigurer { ...@@ -42,7 +42,7 @@ public class WebMvcConfiguration implements WebMvcConfigurer {
"/officialAccountCallback/**","/wxPayCallback/**", "/officialAccountCallback/**","/wxPayCallback/**",
"/imCallback/**", "/wx/category/**", "/imCallback/**", "/wx/category/**",
"/wx/consignSale/**", "/wx/item/**", "/wx/consignSale/**", "/wx/item/**",
"/wx/returnOrder/**", "/wx/supplierItem/**", "/wx/shareRecord/**", "/wx/distributionOrder/**" "/wx/returnOrder/**", "/wx/supplierItem/**", "/wx/shareRecord/**", "/wx/distributionOrder/**", "/wx/selfPage/**"
/* "/wx/officialAccount/**", /* "/wx/officialAccount/**",
"/wx/item/**", "/wx/item/**",
"/wx/aiAssistant/**", "/wx/aiAssistant/**",
......
package com.wwdz.ch.wx.entity.request;
import com.xxdxxs.entity.Entity;
import lombok.Data;
@Data
public class SelfPageRequestDto implements Entity {
private Long userId;
}
package com.wwdz.ch.wx.entity.vo.distribution;
import com.wwdz.ch.core.consts.DistributionEnum;
import com.wwdz.ch.db.bean.DistributionOrderNum;
import com.xxdxxs.entity.Entity;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* 个人主页信息
*/
@Data
public class SelfPageInfoVo implements Entity {
/**
* 累计卖出商品件数
*/
private Integer totalSellItemNum;
/**
* 售出金额
*/
private String totalSellAmount;
/**
* 获得利润
*/
private String totalProfit;
private Long userId;
private String userName;
/**
* 各状态订单数量
*/
private List<DistributionOrderNum> orderNum;
}
...@@ -11,6 +11,8 @@ import org.springframework.stereotype.Service; ...@@ -11,6 +11,8 @@ import org.springframework.stereotype.Service;
*/ */
@Service @Service
public class SwitchServiceImpl implements SwitchService { public class SwitchServiceImpl implements SwitchService {
@Autowired @Autowired
private SwitchDao switchDao; private SwitchDao switchDao;
......
...@@ -44,6 +44,9 @@ import com.wwdz.ch.wx.util.WxResponseCode; ...@@ -44,6 +44,9 @@ import com.wwdz.ch.wx.util.WxResponseCode;
import com.wwdz.mall.common.vo.response.CloudServerResponse; import com.wwdz.mall.common.vo.response.CloudServerResponse;
import com.wwdz.mall.contentcenter.api.CommunityAttributeReadService; import com.wwdz.mall.contentcenter.api.CommunityAttributeReadService;
import com.wwdz.mall.contentcenter.domain.result.attribute.CommunityUserAttributeDO; import com.wwdz.mall.contentcenter.domain.result.attribute.CommunityUserAttributeDO;
import com.wwdz.shop.api.DTO.ShopDTO;
import com.wwdz.shop.api.query.ShopQueryOption;
import com.wwdz.shop.api.service.ShopReadService;
import com.wwdz.user.api.service.user.UserReadService; import com.wwdz.user.api.service.user.UserReadService;
import com.wwdz.user.api.service.user.UserWriteService; import com.wwdz.user.api.service.user.UserWriteService;
import com.xxdxxs.utils.JsonUtils; import com.xxdxxs.utils.JsonUtils;
...@@ -56,6 +59,8 @@ import org.springframework.context.ApplicationContext; ...@@ -56,6 +59,8 @@ import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.ObjectUtils;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
...@@ -136,6 +141,9 @@ public class UserServiceImpl implements UserService { ...@@ -136,6 +141,9 @@ public class UserServiceImpl implements UserService {
@Autowired @Autowired
ReturnOrderDao returnOrderDao; ReturnOrderDao returnOrderDao;
@Reference
ShopReadService shopReadService;
@Override @Override
public Result finishLogin(UserRequestDto dto) { public Result finishLogin(UserRequestDto dto) {
...@@ -179,6 +187,29 @@ public class UserServiceImpl implements UserService { ...@@ -179,6 +187,29 @@ public class UserServiceImpl implements UserService {
//保存新登录的用户信息 //保存新登录的用户信息
userDao.insertByMapper(user); userDao.insertByMapper(user);
result.put("phone", phone); result.put("phone", phone);
//判断登录用户是否是分销商
if (dto.getUserId() == 42192256L || dto.getUserId() == 60684039L || dto.getUserId() == 61074146L) {
result.put("isShop", true);
result.put("shopId", 3387401L);
} else {
try {
CloudServerResponse<ShopDTO> cloudServerResponse = shopReadService.getShopByUserId(dto.getUserId(), new ShopQueryOption());
if (cloudServerResponse.isSuccess()) {
ShopDTO shopDTO = cloudServerResponse.getResult();
if (shopDTO != null && !ObjectUtils.isEmpty(shopDTO.getShopId())) {
result.put("isShop", true);
result.put("shopId", shopDTO.getShopId());
} else {
result.put("isShop", false);
}
} else {
result.put("isShop", false);
}
} catch (Exception e) {
logger.error("根据用户id查询店铺信息失败error:{}", e);
result.put("isShop", false);
}
}
// 缓存用户信息 // 缓存用户信息
String userKey = MessageFormat.format(CacheCodeConstants.USER_INFO_KEY, user.getId()); String userKey = MessageFormat.format(CacheCodeConstants.USER_INFO_KEY, user.getId());
redisUtil.set(userKey, user, 2 * 60 * 60); redisUtil.set(userKey, user, 2 * 60 * 60);
......
package com.wwdz.ch.wx.impl.distribution; package com.wwdz.ch.wx.impl.distribution;
import com.alibaba.dubbo.config.annotation.Reference;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.wechat.pay.java.service.payments.model.Transaction;
import com.wwdz.ch.core.api.wxpay.WxPayServiceApi; import com.wwdz.ch.core.api.wxpay.WxPayServiceApi;
import com.wwdz.ch.core.consts.ConsignSaleEnum;
import com.wwdz.ch.core.consts.DistributionEnum; import com.wwdz.ch.core.consts.DistributionEnum;
import com.wwdz.ch.core.consts.LogisticsEnum; import com.wwdz.ch.core.consts.LogisticsEnum;
import com.wwdz.ch.core.type.PageSearchResult; import com.wwdz.ch.core.type.PageSearchResult;
import com.wwdz.ch.core.type.Result; import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.IdUtils; import com.wwdz.ch.core.util.*;
import com.wwdz.ch.core.util.MediaUtil;
import com.wwdz.ch.core.util.PriceUtil;
import com.wwdz.ch.db.dao.distribution.DistributionOrderDao; import com.wwdz.ch.db.dao.distribution.DistributionOrderDao;
import com.wwdz.ch.db.dao.distribution.DistributorProfitDao;
import com.wwdz.ch.db.dao.distribution.DistributorShareRecordDao; import com.wwdz.ch.db.dao.distribution.DistributorShareRecordDao;
import com.wwdz.ch.db.dao.distribution.SupplierItemDao; import com.wwdz.ch.db.dao.distribution.SupplierItemDao;
import com.wwdz.ch.db.domain.distribution.DistributionOrder; import com.wwdz.ch.db.domain.distribution.DistributionOrder;
import com.wwdz.ch.db.domain.distribution.DistributorProfit;
import com.wwdz.ch.db.domain.distribution.DistributorShareRecord; import com.wwdz.ch.db.domain.distribution.DistributorShareRecord;
import com.wwdz.ch.db.domain.distribution.SupplierItem; 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.DistributionOrderRequestDto;
import com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto;
import com.wwdz.ch.wx.entity.vo.distribution.DistributionOrderDetailVo; import com.wwdz.ch.wx.entity.vo.distribution.DistributionOrderDetailVo;
import com.wwdz.ch.wx.entity.vo.distribution.DistributionOrderVo; import com.wwdz.ch.wx.entity.vo.distribution.DistributionOrderVo;
import com.wwdz.ch.wx.service.distribution.DistributionOrderService; import com.wwdz.ch.wx.service.distribution.DistributionOrderService;
import com.wwdz.mall.common.vo.response.CloudServerResponse;
import com.wwdz.user.api.dto.res.user.UserDTO;
import com.wwdz.user.api.service.user.UserReadService;
import com.xxdxxs.utils.EntityMapper; import com.xxdxxs.utils.EntityMapper;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; 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.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -46,15 +46,21 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -46,15 +46,21 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
@Autowired @Autowired
DistributorShareRecordDao distributorShareRecordDao; DistributorShareRecordDao distributorShareRecordDao;
@Reference
private UserReadService userReadService;
@Autowired @Autowired
SupplierItemDao supplierItemDao; SupplierItemDao supplierItemDao;
@Autowired @Autowired
WxPayServiceApi wxPayServiceApi; WxPayServiceApi wxPayServiceApi;
@Autowired
CacheUtil cacheUtil;
@Autowired
RedisUtils redisUtils;
@Autowired
DistributorProfitDao distributorProfitDao;
@Override @Override
public Result createDistributionOrder(DistributionOrderRequestDto dto) { public Result createDistributionOrder(DistributionOrderRequestDto dto) {
try { try {
...@@ -82,6 +88,7 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -82,6 +88,7 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
distributionOrder.setDistributionOrderId(distributionOrderId); distributionOrder.setDistributionOrderId(distributionOrderId);
distributionOrder.setPrepayId(prepayId); distributionOrder.setPrepayId(prepayId);
distributionOrder.setBuyerId(dto.getBuyerId()); distributionOrder.setBuyerId(dto.getBuyerId());
distributionOrder.setBuyerOpenid(dto.getBuyerOpenid());
distributionOrder.setShopId(distributorShareRecord.getShopId()); distributionOrder.setShopId(distributorShareRecord.getShopId());
distributionOrder.setSellerId(distributorShareRecord.getDistributorId()); distributionOrder.setSellerId(distributorShareRecord.getDistributorId());
distributionOrder.setAmount(distributorShareRecord.getPrice() * dto.getItemNum()); distributionOrder.setAmount(distributorShareRecord.getPrice() * dto.getItemNum());
...@@ -104,18 +111,72 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -104,18 +111,72 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
} }
@Override @Override
public Result finishPay(DistributionOrderRequestDto dto) { public Result checkPayState(DistributionOrderRequestDto dto) {
return null; try {
DistributionOrder distributionOrder = distributionOrderDao.findById(dto.getDistributionOrderId());
if (distributionOrder.getState() == DistributionEnum.DistributionOrderStateEnum.PRE_SEND.getCode()) {
return Result.success(true);
}
return Result.success(false);
} catch (Exception e) {
logger.error("完成支付失败 error : {}", e);
}
return Result.failed("完成支付失败");
} }
@Override @Override
@Transactional
public Result cancel(DistributionOrderRequestDto dto) { public Result cancel(DistributionOrderRequestDto dto) {
try { try {
//先查询订单当前状态
DistributionOrder distributionOrder = distributionOrderDao.findById(dto.getDistributionOrderId());
if (distributionOrder.getState() != DistributionEnum.DistributionOrderStateEnum.PRE_PAY.getCode()) {
return Result.failed("该订单不是待支付状态,无法直接取消");
}
distributionOrderDao.updateState(dto.getDistributionOrderId(), DistributionEnum.DistributionOrderStateEnum.CANCEL.getCode()); distributionOrderDao.updateState(dto.getDistributionOrderId(), DistributionEnum.DistributionOrderStateEnum.CANCEL.getCode());
distributorProfitDao.updateValid(dto.getDistributionOrderId());
return Result.success(); return Result.success();
} catch (Exception e) { } catch (Exception e) {
logger.error("用户取消订单失败 error : {}", e); logger.error("用户取消订单失败 error : {}", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
return Result.failed();
}
@Override
@Transactional
public Result confirmSigned(DistributionOrderRequestDto dto) {
try {
distributionOrderDao.updateState(dto.getDistributionOrderId(), DistributionEnum.DistributionOrderStateEnum.FINISH.getCode());
//用户确认签收,新增分销商利润
DistributorProfit distributorProfit = new DistributorProfit();
DistributionOrder distributionOrder = distributionOrderDao.findById(dto.getDistributionOrderId());
SupplierItem supplierItem = supplierItemDao.findById(distributionOrder.getItemId());
//供货成本价
Long distributionTotalPrice = supplierItem.getDistributionPrice() * distributionOrder.getItemNum();
//通道费
double channelCost = distributionOrder.getAmount().doubleValue() * 0.006;
if (channelCost < 1) {
channelCost = 0;
}
//利润
Double profit = distributionOrder.getAmount().doubleValue() - distributionTotalPrice.doubleValue() - channelCost;
distributorProfit.setDistributionOrderId(dto.getDistributionOrderId());
distributorProfit.setDistributorId(distributionOrder.getSellerId());
distributorProfit.setItemId(distributionOrder.getItemId());
distributorProfit.setItemNum(distributionOrder.getItemNum());
distributorProfit.setAmount(distributionOrder.getAmount());
distributorProfit.setItemCost(distributionTotalPrice);
distributorProfit.setChannelCost((long)Math.ceil(channelCost));
distributorProfit.setProfit((long) Math.floor(profit));
distributorProfit.setCreateTime(new Date());
distributorProfit.setIsValid(true);
distributorProfitDao.insert(distributorProfit);
return Result.success();
} catch (Exception e) {
logger.info("用户确认收货失败 error: {}", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
} }
return Result.failed(); return Result.failed();
} }
...@@ -129,26 +190,35 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -129,26 +190,35 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
public Result findOrderOfDistributor(DistributionOrderRequestDto dto) { public Result findOrderOfDistributor(DistributionOrderRequestDto dto) {
try { try {
List<DistributionOrderVo> distributionOrderVoList = new ArrayList<>(); List<DistributionOrderVo> distributionOrderVoList = new ArrayList<>();
if (StringUtils.hasLength(dto.getSearchParam())) {
//判断查询条件是否为中文,是的话就根据商品名称模糊查询
if (RegexUtil.isContainChinese(dto.getSearchParam())) {
SupplierItemRequestDto supplierItemRequestDto = new SupplierItemRequestDto();
supplierItemRequestDto.setName(dto.getSearchParam());
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();
}
} else {
dto.setDistributionOrderId(dto.getSearchParam());
}
}
//查询分销订单 //查询分销订单
List<DistributionOrder> distributionOrderList = distributionOrderDao.findByPage(dto); List<DistributionOrder> distributionOrderList = distributionOrderDao.findByPage(dto);
PageInfo pageInfo = new PageInfo<>(distributionOrderList); PageInfo pageInfo = new PageInfo<>(distributionOrderList);
//购买者id
List<Long> buyerIdList = distributionOrderList.stream().map(DistributionOrder::getBuyerId).collect(Collectors.toList());
CloudServerResponse<List<UserDTO>> cloudServerResponse = userReadService.getUserListByUserIds(buyerIdList);
if (cloudServerResponse.getCode() != 1001) {
return Result.failed("查询购买用户信息失败");
}
List<UserDTO> userDTOList = cloudServerResponse.getResult();
Map<Long, String> userNameMap = userDTOList.stream().collect(Collectors.toMap(UserDTO::getUserId, UserDTO::getUnick, (k1, k2) -> k2));
distributionOrderList.forEach(distributionOrder -> { distributionOrderList.forEach(distributionOrder -> {
DistributionOrderVo distributionOrderVo = new DistributionOrderVo(); DistributionOrderVo distributionOrderVo = new DistributionOrderVo();
EntityMapper.copyAttribute(distributionOrder, distributionOrderVo); EntityMapper.copyAttribute(distributionOrder, distributionOrderVo);
SupplierItem supplierItem = supplierItemDao.findById(distributionOrder.getItemId()); SupplierItem supplierItem = supplierItemDao.findById(distributionOrder.getItemId());
distributionOrderVo.setItemName(supplierItem.getName()); distributionOrderVo.setItemName(supplierItem.getName());
long itemPrice = distributionOrder.getAmount() / distributionOrder.getItemNum(); long itemPrice = distributionOrder.getAmount() / distributionOrder.getItemNum();
distributionOrderVo.setAmount(PriceUtil.convertPrice(distributionOrder.getAmount())); distributionOrderVo.setAmount(PriceUtil.convertPriceFenToYuan(distributionOrder.getAmount()));
distributionOrderVo.setItemPrice(PriceUtil.convertPrice(itemPrice)); distributionOrderVo.setItemPrice(PriceUtil.convertPriceFenToYuan(itemPrice));
distributionOrderVo.setBuyerName(userNameMap.getOrDefault(distributionOrder.getBuyerId(), "匿名")); distributionOrderVo.setBuyerName(cacheUtil.getAppletUserNameById(distributionOrder.getBuyerId()));
distributionOrderVo.setStateName(DistributionEnum.DistributionOrderStateEnum.getNameByCode(distributionOrder.getState())); distributionOrderVo.setStateName(DistributionEnum.DistributionOrderStateEnum.getNameByCode(distributionOrder.getState()));
distributionOrderVo.setHomePageImage(MediaUtil.getHomePageImage(supplierItem.getImages(), supplierItem.getVideos())); distributionOrderVo.setHomePageImage(MediaUtil.getHomePageImage(supplierItem.getImages(), supplierItem.getVideos()));
distributionOrderVoList.add(distributionOrderVo); distributionOrderVoList.add(distributionOrderVo);
...@@ -169,14 +239,14 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -169,14 +239,14 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
SupplierItem supplierItem = supplierItemDao.findById(distributionOrder.getItemId()); SupplierItem supplierItem = supplierItemDao.findById(distributionOrder.getItemId());
distributionOrderDetailVo.setItemName(supplierItem.getName()); distributionOrderDetailVo.setItemName(supplierItem.getName());
long itemPrice = distributionOrder.getAmount() / distributionOrder.getItemNum(); long itemPrice = distributionOrder.getAmount() / distributionOrder.getItemNum();
distributionOrderDetailVo.setAmount(PriceUtil.convertPrice(distributionOrder.getAmount())); distributionOrderDetailVo.setAmount(PriceUtil.convertPriceFenToYuan(distributionOrder.getAmount()));
distributionOrderDetailVo.setItemPrice(PriceUtil.convertPrice(itemPrice)); distributionOrderDetailVo.setItemPrice(PriceUtil.convertPriceFenToYuan(itemPrice));
distributionOrderDetailVo.setStateName(DistributionEnum.DistributionOrderStateEnum.getNameByCode(distributionOrder.getState())); distributionOrderDetailVo.setStateName(DistributionEnum.DistributionOrderStateEnum.getNameByCode(distributionOrder.getState()));
distributionOrderDetailVo.setHomePageImage(MediaUtil.getHomePageImage(supplierItem.getImages(), supplierItem.getVideos())); distributionOrderDetailVo.setHomePageImage(MediaUtil.getHomePageImage(supplierItem.getImages(), supplierItem.getVideos()));
distributionOrderDetailVo.setLogisticsName(LogisticsEnum.getNameByCode(distributionOrder.getLogisticsCode())); distributionOrderDetailVo.setLogisticsName(LogisticsEnum.getNameByCode(distributionOrder.getLogisticsCode()));
//供货价 //供货价
Long distributionTotalPrice = supplierItem.getDistributionPrice() * distributionOrder.getItemNum(); Long distributionTotalPrice = supplierItem.getDistributionPrice() * distributionOrder.getItemNum();
distributionOrderDetailVo.setDistributionPrice(PriceUtil.convertPrice(distributionTotalPrice)); distributionOrderDetailVo.setDistributionPrice(PriceUtil.convertPriceFenToYuan(distributionTotalPrice));
distributionOrderDetailVo.setChannelCost("6‰"); distributionOrderDetailVo.setChannelCost("6‰");
//通道费 //通道费
double channelCost = distributionOrder.getAmount().doubleValue() * 0.006; double channelCost = distributionOrder.getAmount().doubleValue() * 0.006;
...@@ -199,6 +269,23 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -199,6 +269,23 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
public Result findOrderOfUser(DistributionOrderRequestDto dto) { public Result findOrderOfUser(DistributionOrderRequestDto dto) {
try { try {
List<DistributionOrderVo> distributionOrderVoList = new ArrayList<>(); List<DistributionOrderVo> distributionOrderVoList = new ArrayList<>();
if (StringUtils.hasLength(dto.getSearchParam())) {
//判断查询条件是否为中文,是的话就根据商品名称模糊查询
if (RegexUtil.isContainChinese(dto.getSearchParam())) {
SupplierItemRequestDto supplierItemRequestDto = new SupplierItemRequestDto();
supplierItemRequestDto.setName(dto.getSearchParam());
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();
}
} else {
dto.setDistributionOrderId(dto.getSearchParam());
}
}
//查询用户的购买订单 //查询用户的购买订单
List<DistributionOrder> distributionOrderList = distributionOrderDao.findByPage(dto); List<DistributionOrder> distributionOrderList = distributionOrderDao.findByPage(dto);
PageInfo pageInfo = new PageInfo<>(distributionOrderList); PageInfo pageInfo = new PageInfo<>(distributionOrderList);
...@@ -209,7 +296,7 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -209,7 +296,7 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
SupplierItem supplierItem = supplierItemDao.findById(distributionOrder.getItemId()); SupplierItem supplierItem = supplierItemDao.findById(distributionOrder.getItemId());
distributionOrderVo.setItemName(supplierItem.getName()); distributionOrderVo.setItemName(supplierItem.getName());
long itemPrice = distributionOrder.getAmount() / distributionOrder.getItemNum(); long itemPrice = distributionOrder.getAmount() / distributionOrder.getItemNum();
distributionOrderVo.setItemPrice(PriceUtil.convertPrice(itemPrice)); distributionOrderVo.setItemPrice(PriceUtil.convertPriceFenToYuan(itemPrice));
distributionOrderVo.setStateName(DistributionEnum.DistributionOrderStateEnum.getNameByCode(distributionOrder.getState())); distributionOrderVo.setStateName(DistributionEnum.DistributionOrderStateEnum.getNameByCode(distributionOrder.getState()));
distributionOrderVo.setHomePageImage(MediaUtil.getHomePageImage(supplierItem.getImages(), supplierItem.getVideos())); distributionOrderVo.setHomePageImage(MediaUtil.getHomePageImage(supplierItem.getImages(), supplierItem.getVideos()));
distributionOrderVoList.add(distributionOrderVo); distributionOrderVoList.add(distributionOrderVo);
...@@ -232,14 +319,14 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -232,14 +319,14 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
SupplierItem supplierItem = supplierItemDao.findById(distributionOrder.getItemId()); SupplierItem supplierItem = supplierItemDao.findById(distributionOrder.getItemId());
distributionOrderDetailVo.setItemName(supplierItem.getName()); distributionOrderDetailVo.setItemName(supplierItem.getName());
long itemPrice = distributionOrder.getAmount() / distributionOrder.getItemNum(); long itemPrice = distributionOrder.getAmount() / distributionOrder.getItemNum();
distributionOrderDetailVo.setAmount(PriceUtil.convertPrice(distributionOrder.getAmount())); distributionOrderDetailVo.setAmount(PriceUtil.convertPriceFenToYuan(distributionOrder.getAmount()));
distributionOrderDetailVo.setItemPrice(PriceUtil.convertPrice(itemPrice)); distributionOrderDetailVo.setItemPrice(PriceUtil.convertPriceFenToYuan(itemPrice));
distributionOrderDetailVo.setStateName(DistributionEnum.DistributionOrderStateEnum.getNameByCode(distributionOrder.getState())); distributionOrderDetailVo.setStateName(DistributionEnum.DistributionOrderStateEnum.getNameByCode(distributionOrder.getState()));
distributionOrderDetailVo.setHomePageImage(MediaUtil.getHomePageImage(supplierItem.getImages(), supplierItem.getVideos())); distributionOrderDetailVo.setHomePageImage(MediaUtil.getHomePageImage(supplierItem.getImages(), supplierItem.getVideos()));
distributionOrderDetailVo.setLogisticsName(LogisticsEnum.getNameByCode(distributionOrder.getLogisticsCode())); distributionOrderDetailVo.setLogisticsName(LogisticsEnum.getNameByCode(distributionOrder.getLogisticsCode()));
return Result.success(distributionOrderDetailVo); return Result.success(distributionOrderDetailVo);
} catch (Exception e) { } catch (Exception e) {
logger.error("查询分销商订单详情失败 error : {}", e); logger.error("查询用户订单详情失败 error : {}", e);
} }
return Result.failed(); return Result.failed();
} }
......
package com.wwdz.ch.wx.impl.distribution;
import com.wwdz.ch.core.consts.DistributionEnum;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.CacheUtil;
import com.wwdz.ch.core.util.PriceUtil;
import com.wwdz.ch.db.bean.DistributionOrderNum;
import com.wwdz.ch.db.dao.distribution.DistributionOrderDao;
import com.wwdz.ch.db.dao.distribution.DistributorProfitDao;
import com.wwdz.ch.wx.entity.request.SelfPageRequestDto;
import com.wwdz.ch.wx.entity.vo.distribution.SelfPageInfoVo;
import com.wwdz.ch.wx.service.distribution.SelfPageService;
import com.wwdz.user.api.service.user.UserReadService;
import org.apache.dubbo.config.annotation.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class SelfPageServiceImpl implements SelfPageService {
private static final Logger logger = LoggerFactory.getLogger(SelfPageServiceImpl.class);
@Autowired
DistributorProfitDao distributorProfitDao;
@Autowired
DistributionOrderDao distributionOrderDao;
@Autowired
CacheUtil cacheUtil;
@Override
public Result getDistributorPageInfo(SelfPageRequestDto dto) {
try {
long sellItemNum = distributorProfitDao.countSellItemNum(dto.getUserId());
long sellAmount = distributorProfitDao.countSellAmount(dto.getUserId());
long totalProfit = distributorProfitDao.countProfit(dto.getUserId());
SelfPageInfoVo selfPageInfoVo = new SelfPageInfoVo();
selfPageInfoVo.setUserId(dto.getUserId());
selfPageInfoVo.setUserName(cacheUtil.getAppletUserNameById(dto.getUserId()));
selfPageInfoVo.setTotalSellItemNum((int) sellItemNum);
selfPageInfoVo.setTotalSellAmount(PriceUtil.convertPriceFenToYuan(sellAmount));
selfPageInfoVo.setTotalProfit(PriceUtil.convertPriceFenToYuan(totalProfit));
List<DistributionOrderNum> distributionOrderNumList = distributionOrderDao.countGroupByStateForDistributor(dto.getUserId());
distributionOrderNumList.forEach(distributionOrderNum -> {
distributionOrderNum.setStateName(DistributionEnum.DistributionOrderStateEnum.getNameByCode(distributionOrderNum.getState()));
});
selfPageInfoVo.setOrderNum(distributionOrderNumList);
return Result.success(selfPageInfoVo);
} catch (Exception e) {
logger.error("查询分销商个人主页失败 error : {}", e);
}
return Result.failed();
}
@Override
public Result getUserPageInfo(SelfPageRequestDto dto) {
try {
SelfPageInfoVo selfPageInfoVo = new SelfPageInfoVo();
selfPageInfoVo.setUserId(dto.getUserId());
selfPageInfoVo.setUserName(cacheUtil.getAppletUserNameById(dto.getUserId()));
List<DistributionOrderNum> distributionOrderNumList = distributionOrderDao.countGroupByStateForUser(dto.getUserId());
distributionOrderNumList.forEach(distributionOrderNum -> {
distributionOrderNum.setStateName(DistributionEnum.DistributionOrderStateEnum.getNameByCode(distributionOrderNum.getState()));
});
selfPageInfoVo.setOrderNum(distributionOrderNumList);
return Result.success(selfPageInfoVo);
} catch (Exception e) {
logger.error("查询用户个人主页失败 error : {}", e);
}
return Result.failed();
}
}
...@@ -14,17 +14,22 @@ public interface DistributionOrderService { ...@@ -14,17 +14,22 @@ public interface DistributionOrderService {
/** /**
* 完成支付后修改订单状态 * 检查订单是否支付成功
* @param dto * @param dto
* @return * @return
*/ */
Result finishPay(DistributionOrderRequestDto dto); Result checkPayState(DistributionOrderRequestDto dto);
/** /**
* 用户取消订单 * 用户取消订单
*/ */
Result cancel(DistributionOrderRequestDto dto); Result cancel(DistributionOrderRequestDto dto);
/**
* 用户确认收货
*/
Result confirmSigned(DistributionOrderRequestDto dto);
/** /**
* 订单发货 * 订单发货
* @param dto * @param dto
......
package com.wwdz.ch.wx.service.distribution;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto;
import com.wwdz.ch.wx.entity.request.SelfPageRequestDto;
public interface SelfPageService {
/**
* 查询分销商个人主页信息
* @param dto
* @return
*/
Result getDistributorPageInfo(SelfPageRequestDto dto);
/**
* 查询用户个人主页信息
* @param dto
* @return
*/
Result getUserPageInfo(SelfPageRequestDto dto);
}
...@@ -155,7 +155,7 @@ public class WxGoodsController { ...@@ -155,7 +155,7 @@ public class WxGoodsController {
iv.setImages(Arrays.asList(item.getImages().split(";"))); iv.setImages(Arrays.asList(item.getImages().split(";")));
iv.setDetail(item.getDetail()); iv.setDetail(item.getDetail());
if(null != item.getPrice() && 0 != item.getPrice()) { if(null != item.getPrice() && 0 != item.getPrice()) {
iv.setPrice(PriceUtil.convertPrice(item.getPrice())); iv.setPrice(PriceUtil.convertPriceFenToYuan(item.getPrice()));
} }
} }
...@@ -277,7 +277,7 @@ public class WxGoodsController { ...@@ -277,7 +277,7 @@ public class WxGoodsController {
} }
iv.setTopImage(item.getImages().split(";")[0]); iv.setTopImage(item.getImages().split(";")[0]);
if(null != item.getPrice() && 0 != item.getPrice()) { if(null != item.getPrice() && 0 != item.getPrice()) {
iv.setPrice(PriceUtil.convertPrice(item.getPrice())); iv.setPrice(PriceUtil.convertPriceFenToYuan(item.getPrice()));
} }
itemList.add(iv); itemList.add(iv);
} }
......
...@@ -61,6 +61,20 @@ public class DistributionOrderController { ...@@ -61,6 +61,20 @@ public class DistributionOrderController {
} }
@ApiOperation(value = "前端支付后查询实际支付状态")
@PostMapping("/checkPayState")
public Result checkPayState(@RequestBody DistributionOrderRequestDto dto) {
logger.info("前端支付后查询实际支付状态:{}", JSON.toJSONString(dto));
Validator validator = new Validator(FormHandler.ofEntity(dto));
validator.set("distributionOrderId", "分销单号").must().string()
.end();
if (!validator.isValid()) {
return Result.failed(validator.getErrorInfo());
}
return distributionOrderService.checkPayState(dto);
}
@ApiOperation(value = "用户取消订单") @ApiOperation(value = "用户取消订单")
@PostMapping("/cancel") @PostMapping("/cancel")
public Result cancel(@RequestBody DistributionOrderRequestDto dto) { public Result cancel(@RequestBody DistributionOrderRequestDto dto) {
......
package com.wwdz.ch.wx.web.distribution;
import com.alibaba.fastjson.JSON;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto;
import com.wwdz.ch.wx.entity.request.SelfPageRequestDto;
import com.wwdz.ch.wx.service.distribution.SelfPageService;
import com.xxdxxs.service.FormHandler;
import com.xxdxxs.validation.Validator;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 个人主页
*/
@RestController
@RequestMapping("/wx/selfPage")
public class SelfPageController {
private static final Logger logger = LoggerFactory.getLogger(SelfPageController.class);
@Autowired
SelfPageService selfPageService;
@ApiOperation(value = "查询分销商个人主页信息")
@PostMapping("/getDistributorPageInfo")
public Result getDistributorPageInfo(@RequestBody SelfPageRequestDto dto) {
logger.info("查询分销商个人主页信息,请求参数:{}", JSON.toJSONString(dto));
Validator validator = new Validator(FormHandler.ofEntity(dto));
validator.set("userId", "用户id").must().number()
.end();
if (!validator.isValid()) {
return Result.failed(validator.getErrorInfo());
}
return selfPageService.getDistributorPageInfo(dto);
}
@ApiOperation(value = "查询普通用户个人主页信息")
@PostMapping("/getUserPageInfo")
public Result getUserPageInfo(@RequestBody SelfPageRequestDto dto) {
logger.info("查询普通用户个人主页信息,请求参数:{}", JSON.toJSONString(dto));
Validator validator = new Validator(FormHandler.ofEntity(dto));
validator.set("userId", "用户id").must().number()
.end();
if (!validator.isValid()) {
return Result.failed(validator.getErrorInfo());
}
return selfPageService.getUserPageInfo(dto);
}
}
package com.wwdz.ch.wx.api;
import com.github.binarywang.wxpay.service.WxPayService;
import com.wwdz.ch.core.api.OfficialAccountApi;
import com.wwdz.ch.core.api.wxpay.WxPayServiceApi;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class WxPayServiceTest {
private static final Logger logger = LoggerFactory.getLogger(WxPayServiceTest.class);
@Autowired
WxPayServiceApi wxPayServiceApi;
@Test
public void queryOrderBytOutTradeNo() {
String orderId = "DA2401311023019918454";
DistributionOrderRequestDto dto = new DistributionOrderRequestDto();
dto.setDistributionOrderId(orderId);
Result result = wxPayServiceApi.queryOrderBytOutTradeNo(dto);
logger.info("查询支付状态:{}", result);
}
}
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