From bf735b1a31878128d77fb69b4879f1af5f2f4037 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E5=87=AF=E5=87=AF?= Date: Fri, 27 Sep 2024 15:39:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=B3=BB=E7=BB=9F=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E9=85=8D=E7=BD=AE=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=BA=97=E9=93=BA=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E9=93=BE=E6=8E=A5=E8=8E=B7=E5=8F=96=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/shop/ShopPayApiController.java | 75 +++++++++++++++ .../mybatis/mapper/SysParamsMapper.java | 16 ++++ .../cn/ysk/cashier/system/domain/Params.java | 63 +++++++++++++ .../ysk/cashier/system/enums/ParamsEnum.java | 15 +++ .../cashier/system/rest/ParamsController.java | 93 ++++++++++++++++++ .../cashier/system/service/ParamsService.java | 43 +++++++++ .../cashier/system/service/dto/ParamsDTO.java | 45 +++++++++ .../service/impl/ParamsServiceImpl.java | 94 +++++++++++++++++++ .../main/resources/mapper/SysParamsMapper.xml | 6 ++ 9 files changed, 450 insertions(+) create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/ShopPayApiController.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/SysParamsMapper.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/system/domain/Params.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/system/enums/ParamsEnum.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/system/rest/ParamsController.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/system/service/ParamsService.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/system/service/dto/ParamsDTO.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/system/service/impl/ParamsServiceImpl.java create mode 100644 eladmin-system/src/main/resources/mapper/SysParamsMapper.xml diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/ShopPayApiController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/ShopPayApiController.java new file mode 100644 index 00000000..93f7e2dc --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/ShopPayApiController.java @@ -0,0 +1,75 @@ +package cn.ysk.cashier.controller.shop; + +import cn.hutool.core.map.MapProxy; +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.URLUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import cn.ysk.cashier.exception.BadRequestException; +import cn.ysk.cashier.system.enums.ParamsEnum; +import cn.ysk.cashier.system.service.ParamsService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.nio.charset.Charset; +import java.util.Map; + +/** + * 店铺支付相关接口 + * + * @author tankaikai + * @since 2024-09-24 16:56 + */ +@Slf4j +@RestController +@RequiredArgsConstructor +@Api(tags = "店铺支付相关接口") +@RequestMapping("/api/shop-pay-api") +public class ShopPayApiController { + + private final ParamsService paramsService; + + @Value("${spring.profiles.active}") + private String env; + + @GetMapping("getOrderPayUrl") + @ApiOperation("获取店铺订单支付URL") + @ApiImplicitParams({ + @ApiImplicitParam(name = "orderId", value = "订单id", paramType = "query", required = true, dataType="String") , + @ApiImplicitParam(name = "shopId", value = "店铺id", paramType = "query",required = true, dataType="String") , + }) + public ResponseEntity url(@RequestParam Map params) { + MapProxy mapProxy = MapProxy.create(params); + String shopId = mapProxy.getStr("shopId"); + String orderId = mapProxy.getStr("orderId"); + try { + if(StrUtil.isBlank(shopId)){ + throw new BadRequestException("店铺id不能为空"); + } + if(StrUtil.isBlank(orderId)){ + throw new BadRequestException("订单id不能为空"); + } + String text = paramsService.getValue(ParamsEnum.SHOP_ORDER_PAY_BASE_URL.name()); + JSONObject config = JSONUtil.parseObj(text); + String baseUrl = config.getStr(env); + String buildUrl = URLUtil.buildQuery(params, Charset.defaultCharset()); + String fullUrl = baseUrl.concat("?").concat(buildUrl); + return ResponseEntity.ok().body(fullUrl); + }catch (BadRequestException e){ + return ResponseEntity.badRequest().body(e.getMessage()); + }catch (Exception e){ + log.error("获取店铺订单支付URL异常",e); + return ResponseEntity.ok().body("获取店铺订单支付URL异常"); + } + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/SysParamsMapper.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/SysParamsMapper.java new file mode 100644 index 00000000..f69f9869 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/SysParamsMapper.java @@ -0,0 +1,16 @@ +package cn.ysk.cashier.mybatis.mapper; + +import cn.ysk.cashier.system.domain.Params; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 参数管理 + * + * @author tankaikai + * @since 2024-09-27 11:34 + */ +@Mapper +public interface SysParamsMapper extends BaseMapper { + +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/system/domain/Params.java b/eladmin-system/src/main/java/cn/ysk/cashier/system/domain/Params.java new file mode 100644 index 00000000..e2ca63db --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/system/domain/Params.java @@ -0,0 +1,63 @@ +package cn.ysk.cashier.system.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 参数管理 + * + * @author tankaikai + * @since 2024-09-27 11:34 + */ +@Data +@TableName("sys_params") +public class Params implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.AUTO) + @TableField("param_id") + private Long paramId; + /** + * 参数编码 + */ + private String paramCode; + /** + * 参数值 + */ + private String paramValue; + /** + * 类型 0:系统参数 1:非系统参数 + */ + private Integer paramType; + /** + * 备注 + */ + private String remark; + + /** + * 创建者 + */ + private Long createBy; + /** + * 创建时间 + */ + private Date createTime; + /** + * 更新者 + */ + private Long updateBy; + /** + * 更新时间 + */ + private Date updateTime; + +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/system/enums/ParamsEnum.java b/eladmin-system/src/main/java/cn/ysk/cashier/system/enums/ParamsEnum.java new file mode 100644 index 00000000..c02f4b2b --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/system/enums/ParamsEnum.java @@ -0,0 +1,15 @@ +package cn.ysk.cashier.system.enums; + +/** + * 参数枚举类 + * @author tankaikai + * @since 2024-09-27 14:21 + */ +public enum ParamsEnum { + + /** + * 店铺订单支付BASE_URL + */ + SHOP_ORDER_PAY_BASE_URL + ; +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/system/rest/ParamsController.java b/eladmin-system/src/main/java/cn/ysk/cashier/system/rest/ParamsController.java new file mode 100644 index 00000000..19eeadee --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/system/rest/ParamsController.java @@ -0,0 +1,93 @@ +package cn.ysk.cashier.system.rest; + +import cn.hutool.core.bean.BeanUtil; +import cn.ysk.cashier.annotation.Log; +import cn.ysk.cashier.system.domain.Params; +import cn.ysk.cashier.system.service.ParamsService; +import cn.ysk.cashier.system.service.dto.ParamsDTO; +import cn.ysk.cashier.utils.SecurityUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; + +import java.util.Date; +import java.util.Map; + + +/** + * 参数管理 + * + * @author tankaikai + * @since 2024-09-27 11:34 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/sys/params") +@Api(tags="参数管理") +public class ParamsController { + + private final ParamsService paramsService; + + @GetMapping("page") + @ApiOperation("分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "page", value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") , + @ApiImplicitParam(name = "size", value = "每页显示记录数", paramType = "query",required = true, dataType="int") , + @ApiImplicitParam(name = "paramCode", value = "参数编码", paramType = "query", dataType="String") + }) + public ResponseEntity page(@ApiIgnore @RequestParam Map params){ + Map page = paramsService.page(params); + return ResponseEntity.ok().body(page); + } + + @GetMapping("{id}") + @ApiOperation("信息") + public ResponseEntity get(@PathVariable("id") Long id){ + Params entity = paramsService.getById(id); + ParamsDTO data = BeanUtil.toBean(entity, ParamsDTO.class); + return ResponseEntity.ok().body(data); + } + + @PostMapping + @ApiOperation("保存") + @Log("保存") + public ResponseEntity save(@RequestBody ParamsDTO dto){ + Params entity = BeanUtil.toBean(dto, Params.class); + Long currentUserId = SecurityUtils.getCurrentUserId(); + entity.setCreateBy(currentUserId); + entity.setCreateTime(new Date()); + entity.setUpdateBy(currentUserId); + entity.setUpdateTime(entity.getCreateTime()); + paramsService.save(entity); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PutMapping + @ApiOperation("修改") + @Log("修改") + public ResponseEntity update(@RequestBody ParamsDTO dto){ + Long paramId = dto.getParamId(); + Params entity = paramsService.getById(paramId); + BeanUtil.copyProperties(dto, entity,"createBy","createTime"); + Long currentUserId = SecurityUtils.getCurrentUserId(); + entity.setUpdateBy(currentUserId); + entity.setUpdateTime(entity.getCreateTime()); + paramsService.updateById(entity); + return new ResponseEntity<>(HttpStatus.OK); + } + + @DeleteMapping("{id}") + @ApiOperation("删除") + @Log("删除") + public ResponseEntity delete(@PathVariable("paramId") Long paramId){ + paramsService.removeById(paramId); + return new ResponseEntity<>(HttpStatus.OK); + } + +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/system/service/ParamsService.java b/eladmin-system/src/main/java/cn/ysk/cashier/system/service/ParamsService.java new file mode 100644 index 00000000..f5e706bf --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/system/service/ParamsService.java @@ -0,0 +1,43 @@ +package cn.ysk.cashier.system.service; + + +import cn.ysk.cashier.system.domain.Params; +import cn.ysk.cashier.system.service.dto.ParamsDTO; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + * 参数管理 + * + * @author tankaikai + * @since 2024-09-27 11:34 + */ +public interface ParamsService extends IService { + + Map page(Map params); + + List list(Map params); + + /** + * 根据参数编码,获取参数的value值 + * + * @param paramCode 参数编码 + */ + String getValue(String paramCode); + + /** + * 根据参数编码,获取value的Object对象 + * @param paramCode 参数编码 + * @param clazz Object对象 + */ + T getValueObject(String paramCode, Class clazz); + + /** + * 根据参数编码,更新value + * @param paramCode 参数编码 + * @param paramValue 参数值 + */ + int updateValueByCode(String paramCode, String paramValue); +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/system/service/dto/ParamsDTO.java b/eladmin-system/src/main/java/cn/ysk/cashier/system/service/dto/ParamsDTO.java new file mode 100644 index 00000000..59e33dd8 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/system/service/dto/ParamsDTO.java @@ -0,0 +1,45 @@ +package cn.ysk.cashier.system.service.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 参数管理 + * + * @author tankaikai + * @since 2024-09-27 11:34 + */ +@Data +@ApiModel(value = "参数管理") +public class ParamsDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "id") + private Long paramId; + + @ApiModelProperty(value = "参数编码") + private String paramCode; + + @ApiModelProperty(value = "参数值") + private String paramValue; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "创建时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + @ApiModelProperty(value = "更新时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/system/service/impl/ParamsServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/system/service/impl/ParamsServiceImpl.java new file mode 100644 index 00000000..585c56be --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/system/service/impl/ParamsServiceImpl.java @@ -0,0 +1,94 @@ +package cn.ysk.cashier.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.map.MapProxy; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import cn.ysk.cashier.exception.BadRequestException; +import cn.ysk.cashier.mybatis.mapper.SysParamsMapper; +import cn.ysk.cashier.system.domain.Params; +import cn.ysk.cashier.system.service.ParamsService; +import cn.ysk.cashier.system.service.dto.ParamsDTO; +import cn.ysk.cashier.utils.PageUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.Optional; + +/** + * 参数管理 + * + * @author tankaikai + * @since 2024-09-27 11:34 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class ParamsServiceImpl extends ServiceImpl implements ParamsService { + + private QueryWrapper getWrapper(Map params) { + + MapProxy mapProxy = MapProxy.create(params); + QueryWrapper wrapper = new QueryWrapper<>(); + + wrapper.lambda().eq(Params::getParamType, 1); + + String paramCode = mapProxy.getStr("paramCode"); + wrapper.lambda().like(StrUtil.isNotEmpty(paramCode), Params::getParamCode, paramCode); + + wrapper.lambda().orderByDesc(Params::getParamId); + + return wrapper; + } + + + @Override + public Map page(Map params) { + MapProxy mapProxy = MapProxy.create(params); + int pageNum = mapProxy.getInt("page", 1); + int pageSize = mapProxy.getInt("size", 10); + Page page = super.page(new Page<>(pageNum, pageSize), getWrapper(params)); + List list = BeanUtil.copyToList(page.getRecords(), ParamsDTO.class); + return PageUtil.toPlusPage(list, Convert.toInt(page.getTotal())); + } + + @Override + public List list(Map params) { + List list = super.list(getWrapper(params)); + return BeanUtil.copyToList(list, ParamsDTO.class); + } + + @Override + public String getValue(String paramCode) { + Params params = baseMapper.selectOne(Wrappers.lambdaQuery().select(Params::getParamValue).eq(Params::getParamCode, paramCode)); + return Optional.ofNullable(params).map(Params::getParamValue).orElseThrow(() -> new BadRequestException("找不到对应的系统参数值")); + } + + @Override + public T getValueObject(String paramCode, Class clazz) { + String paramValue = getValue(paramCode); + if (StringUtils.isNotBlank(paramValue)) { + return JSONUtil.toBean(paramValue, clazz); + } + + try { + return clazz.newInstance(); + } catch (Exception e) { + throw new BadRequestException("获取参数失败"); + } + } + + @Override + public int updateValueByCode(String paramCode, String paramValue) { + return baseMapper.update(null, Wrappers.lambdaUpdate().eq(Params::getParamCode, paramCode).set(Params::getParamValue, paramValue)); + } +} diff --git a/eladmin-system/src/main/resources/mapper/SysParamsMapper.xml b/eladmin-system/src/main/resources/mapper/SysParamsMapper.xml new file mode 100644 index 00000000..80bbb7f2 --- /dev/null +++ b/eladmin-system/src/main/resources/mapper/SysParamsMapper.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file