修改商城内容

This commit is contained in:
fxh 2025-06-03 09:12:37 +08:00
parent 6aaa98f243
commit 62971bb035
19 changed files with 352 additions and 31 deletions

View File

@ -115,5 +115,15 @@
<version>5.3.1</version> <version>5.3.1</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-goods</artifactId>
<version>5.3.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-order</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -1,4 +1,4 @@
package com.wzj.soopin.goods.controller; package com.wzj.soopin.manager.goods.controller;
import com.wzj.soopin.goods.convert.BrandConvert; import com.wzj.soopin.goods.convert.BrandConvert;
@ -11,13 +11,13 @@ import io.swagger.annotations.ApiOperation;
import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log; import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType; import org.dromara.common.log.enums.BusinessType;
import org.springframework.beans.factory.annotation.Autowired;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
/** /**

View File

@ -1,4 +1,4 @@
package com.wzj.soopin.goods.controller; package com.wzj.soopin.manager.goods.controller;
import com.wzj.soopin.goods.convert.ProductCategoryConvert; import com.wzj.soopin.goods.convert.ProductCategoryConvert;
import com.wzj.soopin.goods.domain.entity.ProductCategory; import com.wzj.soopin.goods.domain.entity.ProductCategory;

View File

@ -1,4 +1,4 @@
package com.wzj.soopin.goods.controller; package com.wzj.soopin.manager.goods.controller;
import com.wzj.soopin.goods.convert.ProductConvert; import com.wzj.soopin.goods.convert.ProductConvert;

View File

@ -1,4 +1,4 @@
package com.wzj.soopin.goods.controller; package com.wzj.soopin.manager.goods.controller;
import com.wzj.soopin.goods.convert.SkuConvert; import com.wzj.soopin.goods.convert.SkuConvert;
import com.wzj.soopin.goods.domain.entity.Sku; import com.wzj.soopin.goods.domain.entity.Sku;
@ -8,15 +8,15 @@ import com.wzj.soopin.goods.service.SkuService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List; import java.util.List;
/** /**

View File

@ -1,4 +1,4 @@
package com.wzj.soopin.order.controller; package com.wzj.soopin.manager.order.controller;
import com.wzj.soopin.order.convert.AftersaleConvert; import com.wzj.soopin.order.convert.AftersaleConvert;
@ -10,20 +10,21 @@ import com.wzj.soopin.order.domain.vo.ManagerRefundOrderDetailVO;
import com.wzj.soopin.order.domain.vo.ManagerRefundOrderVO; import com.wzj.soopin.order.domain.vo.ManagerRefundOrderVO;
import com.wzj.soopin.order.domain.vo.OrderOperateHistoryVO; import com.wzj.soopin.order.domain.vo.OrderOperateHistoryVO;
import com.wzj.soopin.order.service.AftersaleService; import com.wzj.soopin.order.service.AftersaleService;
import com.wzj.soopin.order.utils.SecurityUtils;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.log.annotation.Log; import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType; import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.redis.redis.RedisService; import org.dromara.common.redis.redis.RedisService;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package com.wzj.soopin.order.controller; package com.wzj.soopin.manager.order.controller;
import com.wzj.soopin.order.convert.AftersaleItemConvert; import com.wzj.soopin.order.convert.AftersaleItemConvert;

View File

@ -1,4 +1,4 @@
package com.wzj.soopin.order.controller; package com.wzj.soopin.manager.order.controller;
import com.wzj.soopin.order.convert.OrderConvert; import com.wzj.soopin.order.convert.OrderConvert;
import com.wzj.soopin.order.domain.entity.Order; import com.wzj.soopin.order.domain.entity.Order;
@ -9,6 +9,7 @@ import com.wzj.soopin.order.domain.vo.ManagerOrderDetailVO;
import com.wzj.soopin.order.domain.vo.ManagerOrderVO; import com.wzj.soopin.order.domain.vo.ManagerOrderVO;
import com.wzj.soopin.order.domain.vo.OrderOperateHistoryVO; import com.wzj.soopin.order.domain.vo.OrderOperateHistoryVO;
import com.wzj.soopin.order.service.OrderService; import com.wzj.soopin.order.service.OrderService;
import com.wzj.soopin.order.utils.SecurityUtils;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@ -1,4 +1,4 @@
package com.wzj.soopin.order.controller; package com.wzj.soopin.manager.order.controller;
import com.wzj.soopin.order.convert.OrderDeliveryHistoryConvert; import com.wzj.soopin.order.convert.OrderDeliveryHistoryConvert;
import com.wzj.soopin.order.domain.entity.OrderDeliveryHistory; import com.wzj.soopin.order.domain.entity.OrderDeliveryHistory;

View File

@ -1,13 +1,10 @@
package com.wzj.soopin.order.controller; package com.wzj.soopin.manager.order.controller;
import com.wzj.soopin.order.convert.OrderItemConvert; import com.wzj.soopin.order.convert.OrderItemConvert;
import com.wzj.soopin.order.domain.entity.OrderItem; import com.wzj.soopin.order.domain.entity.OrderItem;
import com.wzj.soopin.order.domain.query.OrderItemQuery; import com.wzj.soopin.order.domain.query.OrderItemQuery;
import com.wzj.soopin.order.domain.vo.OrderItemVO; import com.wzj.soopin.order.domain.vo.OrderItemVO;
import com.wzj.soopin.order.service.OrderItemService; import com.wzj.soopin.order.service.OrderItemService;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.excel.utils.ExcelUtil;
@ -15,6 +12,9 @@ import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType; import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;

View File

@ -1,14 +1,10 @@
package com.wzj.soopin.order.controller; package com.wzj.soopin.manager.order.controller;
import com.wzj.soopin.order.convert.OrderOperateHistoryConvert; import com.wzj.soopin.order.convert.OrderOperateHistoryConvert;
import com.wzj.soopin.order.domain.entity.OrderOperateHistory; import com.wzj.soopin.order.domain.entity.OrderOperateHistory;
import com.wzj.soopin.order.domain.query.OrderOperateHistoryQuery; import com.wzj.soopin.order.domain.query.OrderOperateHistoryQuery;
import com.wzj.soopin.order.domain.vo.OrderOperateHistoryVO; import com.wzj.soopin.order.domain.vo.OrderOperateHistoryVO;
import com.wzj.soopin.order.service.OrderOperateHistoryService; import com.wzj.soopin.order.service.OrderOperateHistoryService;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.excel.utils.ExcelUtil;
@ -16,6 +12,10 @@ import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType; import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package com.wzj.soopin.order.controller; package com.wzj.soopin.manager.order.controller;
import com.wzj.soopin.order.convert.WechatPaymentHistoryConvert; import com.wzj.soopin.order.convert.WechatPaymentHistoryConvert;
import com.wzj.soopin.order.domain.entity.WechatPaymentHistory; import com.wzj.soopin.order.domain.entity.WechatPaymentHistory;

View File

@ -125,6 +125,25 @@
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId> <artifactId>fastjson</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
</dependency>
<dependency>
<groupId>com.google.api.grpc</groupId>
<artifactId>proto-google-common-protos</artifactId>
<version>2.41.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
</dependency>
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-java</artifactId>
<version>0.2.9</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -22,6 +22,7 @@ import com.wzj.soopin.order.domain.form.DealWithAftersaleForm;
import com.wzj.soopin.order.domain.form.ManagerAftersaleOrderForm; import com.wzj.soopin.order.domain.form.ManagerAftersaleOrderForm;
import com.wzj.soopin.order.domain.vo.*; import com.wzj.soopin.order.domain.vo.*;
import com.wzj.soopin.order.mapper.*; import com.wzj.soopin.order.mapper.*;
import com.wzj.soopin.order.wechat.WechatPayService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.event.Constants; import org.dromara.common.core.domain.event.Constants;
import org.dromara.common.core.enums.AftersaleStatus; import org.dromara.common.core.enums.AftersaleStatus;

View File

@ -25,6 +25,8 @@ import com.wzj.soopin.order.mapper.OrderDeliveryHistoryMapper;
import com.wzj.soopin.order.mapper.OrderItemMapper; import com.wzj.soopin.order.mapper.OrderItemMapper;
import com.wzj.soopin.order.mapper.OrderMapper; import com.wzj.soopin.order.mapper.OrderMapper;
import com.wzj.soopin.order.mapper.OrderOperateHistoryMapper; import com.wzj.soopin.order.mapper.OrderOperateHistoryMapper;
import com.wzj.soopin.order.utils.AesCryptoUtils;
import com.wzj.soopin.order.utils.SecurityUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.dromara.common.core.domain.event.Constants; import org.dromara.common.core.domain.event.Constants;
import org.dromara.common.core.utils.PhoneUtils; import org.dromara.common.core.utils.PhoneUtils;
@ -392,7 +394,7 @@ public class OrderService {
.set("receiver_district",order.getReceiverDistrict()) .set("receiver_district",order.getReceiverDistrict())
.set("receiver_province",order.getReceiverProvince()) .set("receiver_province",order.getReceiverProvince())
.set("receiver_detail_address",order.getReceiverDetailAddress()) .set("receiver_detail_address",order.getReceiverDetailAddress())
.set("receiver_phone_encrypted",AesCryptoUtils.encrypt(aesKey, order.getReceiverPhone())) .set("receiver_phone_encrypted", AesCryptoUtils.encrypt(aesKey, order.getReceiverPhone()))
.set("update_time",LocalDateTime.now()); .set("update_time",LocalDateTime.now());
updateWrapper.eq("id",order.getId()); updateWrapper.eq("id",order.getId());
int update = orderMapper.update(null, updateWrapper); int update = orderMapper.update(null, updateWrapper);

View File

@ -0,0 +1,31 @@
package com.wzj.soopin.order.utils;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.AES;
import org.dromara.common.core.utils.StringUtils;
/**
* aes加密工具
*/
public class AesCryptoUtils {
public static String encrypt(String key, String content){
SecureUtil.disableBouncyCastle();
if (StringUtils.isBlank(key) || StringUtils.isBlank(content)){
throw new RuntimeException("错误");
}
AES aes = SecureUtil.aes(key.getBytes());
byte[] encrypt = aes.encrypt(content);
return aes.encryptHex(content);
}
public static String decrypt(String key, String content){
SecureUtil.disableBouncyCastle();
if (StringUtils.isBlank(key) || StringUtils.isBlank(content)){
throw new RuntimeException("错误");
}
AES aes = SecureUtil.aes(key.getBytes());
return aes.decryptStr(content, CharsetUtil.CHARSET_UTF_8);
}
}

View File

@ -0,0 +1,119 @@
package com.wzj.soopin.order.utils;
import org.dromara.common.core.constant.HttpStatus;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.exception.ServiceException;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
/**
* 安全服务工具类
*
* @author ruoyi
*/
public class SecurityUtils
{
private static BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
/**
* 用户ID
**/
public static Long getUserId()
{
try
{
return getLoginUser().getUserId();
}
catch (Exception e)
{
throw new ServiceException("获取用户ID异常", HttpStatus.UNAUTHORIZED);
}
}
/**
* 获取部门ID
**/
public static Long getDeptId()
{
try
{
return getLoginUser().getDeptId();
}
catch (Exception e)
{
throw new ServiceException("获取部门ID异常", HttpStatus.UNAUTHORIZED);
}
}
/**
* 获取用户账户
**/
public static String getUsername()
{
try
{
return getLoginUser().getUsername();
}
catch (Exception e)
{
throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED);
}
}
/**
* 获取用户
**/
public static LoginUser getLoginUser()
{
try
{
return (LoginUser) getAuthentication().getPrincipal();
}
catch (Exception e)
{
throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED);
}
}
/**
* 获取Authentication
*/
public static Authentication getAuthentication()
{
return SecurityContextHolder.getContext().getAuthentication();
}
/**
* 生成BCryptPasswordEncoder密码
*
* @param password 密码
* @return 加密字符串
*/
public static String encryptPassword(String password) {
return passwordEncoder.encode(password);
}
/**
* 判断密码是否相同
*
* @param rawPassword 真实密码
* @param encodedPassword 加密后字符
* @return 结果
*/
public static boolean matchesPassword(String rawPassword, String encodedPassword)
{
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
return passwordEncoder.matches(rawPassword, encodedPassword);
}
/**
* 是否为管理员
*
* @param userId 用户ID
* @return 结果
*/
public static boolean isAdmin(Long userId)
{
return userId != null && 1L == userId;
}
}

View File

@ -0,0 +1,62 @@
package com.wzj.soopin.order.wechat;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@ConfigurationProperties(prefix = "wechat")
@Component("WechatPayData")
public class WechatPayData {
/** 商户号 */
public static String appId;
public static String secret;
public static String merchantId;
/** 商户API私钥路径 */
public static String privateKeyPath;
/** 商户证书序列号 */
public static String merchantSerialNumber;
/** 商户APIV3密钥 */
public static String apiV3key;
public static String notifyUrl;
public static String miniProgramAppId;
public static String miniProgramSecret;
public void setAppId(String appId) {
WechatPayData.appId = appId;
}
public void setSecret(String secret) {
WechatPayData.secret = secret;
}
public void setMerchantId(String merchantId) {
WechatPayData.merchantId = merchantId;
}
public void setPrivateKeyPath(String privateKeyPath) {
WechatPayData.privateKeyPath = privateKeyPath;
}
public void setMerchantSerialNumber(String merchantSerialNumber) {
WechatPayData.merchantSerialNumber = merchantSerialNumber;
}
public void setApiV3key(String apiV3key) {
WechatPayData.apiV3key = apiV3key;
}
public void setNotifyUrl(String notifyUrl) {
WechatPayData.notifyUrl = notifyUrl;
}
public void setMiniProgramAppId(String miniProgramAppId) {
WechatPayData.miniProgramAppId = miniProgramAppId;
}
public void setMiniProgramSecret(String miniProgramSecret) {
WechatPayData.miniProgramSecret = miniProgramSecret;
}
}

View File

@ -0,0 +1,75 @@
package com.wzj.soopin.order.wechat;
import com.wechat.pay.java.service.payments.jsapi.JsapiService;
import com.wechat.pay.java.service.payments.jsapi.model.Amount;
import com.wechat.pay.java.service.payments.jsapi.model.Payer;
import com.wechat.pay.java.service.payments.jsapi.model.PrepayRequest;
import com.wechat.pay.java.service.payments.jsapi.model.PrepayResponse;
import com.wechat.pay.java.service.refund.RefundService;
import com.wechat.pay.java.service.refund.model.AmountReq;
import com.wechat.pay.java.service.refund.model.CreateRequest;
import com.wechat.pay.java.service.refund.model.Refund;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Service;
@Service
@Slf4j
@ConditionalOnProperty(prefix = "wechat", name = "enabled", havingValue = "true")
public class WechatPayService {
@Autowired
private JsapiService service;
@Autowired
private RefundService refundService;
/**
* jsapi下单
* @param orderNo 订单号
* @param desc 订单描述
* @param totalAmount 总金额单位
* @param openId 用户openid
* @return prepay_id
*/
public String jsapiPay(String orderNo,String desc,Integer totalAmount,String openId, Long memberId,String appId){
PrepayRequest prepayRequest = new PrepayRequest();
prepayRequest.setAppid(appId);
prepayRequest.setMchid(WechatPayData.merchantId);
prepayRequest.setDescription(desc);
prepayRequest.setOutTradeNo(orderNo);
prepayRequest.setAttach(String.valueOf(memberId));
prepayRequest.setNotifyUrl(WechatPayData.notifyUrl);
Amount amount = new Amount();
amount.setTotal(totalAmount);
prepayRequest.setAmount(amount);
Payer payer = new Payer();
payer.setOpenid(openId);
prepayRequest.setPayer(payer);
PrepayResponse response = service.prepay(prepayRequest);
return response.getPrepayId();
}
public Refund refundPay(String refundId, String payId, String notifyUrl, Long refundAmount, Long totalAmount, String reason) {
//请求参数
CreateRequest request = new CreateRequest();
request.setReason(reason);
//设置退款金额 根据自己的实际业务自行填写
AmountReq amountReq = new AmountReq();
amountReq.setRefund(refundAmount);
amountReq.setTotal(totalAmount);
amountReq.setCurrency("CNY");
request.setAmount(amountReq);
//支付成功后回调回来的transactionId 按照实际情况填写
request.setOutTradeNo(payId);
//支付成功后回调回来的transactionId 按照实际情况填写
request.setOutRefundNo(refundId);
//退款成功的回调地址
request.setNotifyUrl(notifyUrl);
//发起请求,申请退款
return refundService.create(request);
}
}