Commit 87d8b55b418fc0e08be8c2ce5f8b35d2f436231f
Merge branch 'pay_extension' of https://gitee.com/zhijiantianya/ruoyi-vue-pro into pay_extension
Showing
25 changed files
with
1258 additions
and
0 deletions
sql/pay-merchant-menu.sql
0 → 100644
| 1 | +-- 支付模块-商户中心-菜单SQL | |
| 2 | +-- 菜单 SQL | |
| 3 | +INSERT INTO `sys_menu` ( | |
| 4 | + `name`, `permission`,`menu_type`,`sort`, `parent_id`, `path`, `icon`, `component`, | |
| 5 | + `status`, `creator`,`create_time`, `updater`, `update_time`, `deleted` | |
| 6 | +) VALUES ('支付管理', '', 1, 4,0, '/pay','pay', NULL, 0, '1', '2021-11-03 10:35:04', '1', '2021-11-03 10:35:04', b'0'); | |
| 7 | + | |
| 8 | +INSERT INTO `sys_menu`( | |
| 9 | + `name`, `permission`, `menu_type`, `sort`, `parent_id`, | |
| 10 | + `path`, `icon`, `component`, `status` | |
| 11 | +) | |
| 12 | +VALUES ( | |
| 13 | + '支付商户信息管理', '', 2, 0, ${table.parentMenuId}, | |
| 14 | + 'merchant', '', 'pay/merchant/index', 0 | |
| 15 | +); | |
| 16 | + | |
| 17 | +-- 按钮父菜单ID | |
| 18 | +SELECT @parentId := LAST_INSERT_ID(); | |
| 19 | + | |
| 20 | +-- 按钮 SQL | |
| 21 | +INSERT INTO `sys_menu`( | |
| 22 | + `name`, `permission`, `menu_type`, `sort`, `parent_id`, | |
| 23 | + `path`, `icon`, `component`, `status` | |
| 24 | +) | |
| 25 | +VALUES ( | |
| 26 | + '支付商户信息查询', 'pay:merchant:query', 3, 1, @parentId, | |
| 27 | + '', '', '', 0 | |
| 28 | +); | |
| 29 | +INSERT INTO `sys_menu`( | |
| 30 | + `name`, `permission`, `menu_type`, `sort`, `parent_id`, | |
| 31 | + `path`, `icon`, `component`, `status` | |
| 32 | +) | |
| 33 | +VALUES ( | |
| 34 | + '支付商户信息创建', 'pay:merchant:create', 3, 2, @parentId, | |
| 35 | + '', '', '', 0 | |
| 36 | +); | |
| 37 | +INSERT INTO `sys_menu`( | |
| 38 | + `name`, `permission`, `menu_type`, `sort`, `parent_id`, | |
| 39 | + `path`, `icon`, `component`, `status` | |
| 40 | +) | |
| 41 | +VALUES ( | |
| 42 | + '支付商户信息更新', 'pay:merchant:update', 3, 3, @parentId, | |
| 43 | + '', '', '', 0 | |
| 44 | +); | |
| 45 | +INSERT INTO `sys_menu`( | |
| 46 | + `name`, `permission`, `menu_type`, `sort`, `parent_id`, | |
| 47 | + `path`, `icon`, `component`, `status` | |
| 48 | +) | |
| 49 | +VALUES ( | |
| 50 | + '支付商户信息删除', 'pay:merchant:delete', 3, 4, @parentId, | |
| 51 | + '', '', '', 0 | |
| 52 | +); | |
| 53 | +INSERT INTO `sys_menu`( | |
| 54 | + `name`, `permission`, `menu_type`, `sort`, `parent_id`, | |
| 55 | + `path`, `icon`, `component`, `status` | |
| 56 | +) | |
| 57 | +VALUES ( | |
| 58 | + '支付商户信息导出', 'pay:merchant:export', 3, 5, @parentId, | |
| 59 | + '', '', '', 0 | |
| 60 | +); | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/PayMerchantController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.*; | |
| 4 | +import cn.iocoder.yudao.adminserver.modules.pay.convert.merchant.PayMerchantConvert; | |
| 5 | +import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService; | |
| 6 | +import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserUpdateStatusReqVO; | |
| 7 | +import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; | |
| 8 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | |
| 9 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 10 | +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; | |
| 11 | +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | |
| 12 | +import io.swagger.annotations.Api; | |
| 13 | +import io.swagger.annotations.ApiImplicitParam; | |
| 14 | +import io.swagger.annotations.ApiOperation; | |
| 15 | +import org.springframework.security.access.prepost.PreAuthorize; | |
| 16 | +import org.springframework.validation.annotation.Validated; | |
| 17 | +import org.springframework.web.bind.annotation.*; | |
| 18 | + | |
| 19 | +import javax.annotation.Resource; | |
| 20 | +import javax.servlet.http.HttpServletResponse; | |
| 21 | +import javax.validation.Valid; | |
| 22 | +import java.io.IOException; | |
| 23 | +import java.util.Collection; | |
| 24 | +import java.util.List; | |
| 25 | + | |
| 26 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | |
| 27 | +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; | |
| 28 | + | |
| 29 | +@Api(tags = "支付商户信息") | |
| 30 | +@RestController | |
| 31 | +@RequestMapping("/pay/merchant") | |
| 32 | +@Validated | |
| 33 | +public class PayMerchantController { | |
| 34 | + | |
| 35 | + @Resource | |
| 36 | + private PayMerchantService merchantService; | |
| 37 | + | |
| 38 | + @PostMapping("/create") | |
| 39 | + @ApiOperation("创建支付商户信息") | |
| 40 | + @PreAuthorize("@ss.hasPermission('pay:merchant:create')") | |
| 41 | + public CommonResult<Long> createMerchant(@Valid @RequestBody PayMerchantCreateReqVO createReqVO) { | |
| 42 | + return success(merchantService.createMerchant(createReqVO)); | |
| 43 | + } | |
| 44 | + | |
| 45 | + @PutMapping("/update") | |
| 46 | + @ApiOperation("更新支付商户信息") | |
| 47 | + @PreAuthorize("@ss.hasPermission('pay:merchant:update')") | |
| 48 | + public CommonResult<Boolean> updateMerchant(@Valid @RequestBody PayMerchantUpdateReqVO updateReqVO) { | |
| 49 | + merchantService.updateMerchant(updateReqVO); | |
| 50 | + return success(true); | |
| 51 | + } | |
| 52 | + | |
| 53 | + @PutMapping("/update-status") | |
| 54 | + @ApiOperation("修改支付商户状态") | |
| 55 | + @PreAuthorize("@ss.hasPermission('pay:merchant:update')") | |
| 56 | + public CommonResult<Boolean> updateMerchantStatus(@Valid @RequestBody PayMerchantUpdateStatusReqVO reqVO) { | |
| 57 | + merchantService.updateMerchantStatus(reqVO.getId(), reqVO.getStatus()); | |
| 58 | + return success(true); | |
| 59 | + } | |
| 60 | + | |
| 61 | + @DeleteMapping("/delete") | |
| 62 | + @ApiOperation("删除支付商户信息") | |
| 63 | + @ApiImplicitParam(name = "id", value = "编号", required = true) | |
| 64 | + @PreAuthorize("@ss.hasPermission('pay:merchant:delete')") | |
| 65 | + public CommonResult<Boolean> deleteMerchant(@RequestParam("id") Long id) { | |
| 66 | + merchantService.deleteMerchant(id); | |
| 67 | + return success(true); | |
| 68 | + } | |
| 69 | + | |
| 70 | + @GetMapping("/get") | |
| 71 | + @ApiOperation("获得支付商户信息") | |
| 72 | + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) | |
| 73 | + @PreAuthorize("@ss.hasPermission('pay:merchant:query')") | |
| 74 | + public CommonResult<PayMerchantRespVO> getMerchant(@RequestParam("id") Long id) { | |
| 75 | + PayMerchantDO merchant = merchantService.getMerchant(id); | |
| 76 | + return success(PayMerchantConvert.INSTANCE.convert(merchant)); | |
| 77 | + } | |
| 78 | + | |
| 79 | + @GetMapping("/list") | |
| 80 | + @ApiOperation("获得支付商户信息列表") | |
| 81 | + @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) | |
| 82 | + @PreAuthorize("@ss.hasPermission('pay:merchant:query')") | |
| 83 | + public CommonResult<List<PayMerchantRespVO>> getMerchantList(@RequestParam("ids") Collection<Long> ids) { | |
| 84 | + List<PayMerchantDO> list = merchantService.getMerchantList(ids); | |
| 85 | + return success(PayMerchantConvert.INSTANCE.convertList(list)); | |
| 86 | + } | |
| 87 | + | |
| 88 | + @GetMapping("/page") | |
| 89 | + @ApiOperation("获得支付商户信息分页") | |
| 90 | + @PreAuthorize("@ss.hasPermission('pay:merchant:query')") | |
| 91 | + public CommonResult<PageResult<PayMerchantRespVO>> getMerchantPage(@Valid PayMerchantPageReqVO pageVO) { | |
| 92 | + PageResult<PayMerchantDO> pageResult = merchantService.getMerchantPage(pageVO); | |
| 93 | + return success(PayMerchantConvert.INSTANCE.convertPage(pageResult)); | |
| 94 | + } | |
| 95 | + | |
| 96 | + @GetMapping("/export-excel") | |
| 97 | + @ApiOperation("导出支付商户信息 Excel") | |
| 98 | + @PreAuthorize("@ss.hasPermission('pay:merchant:export')") | |
| 99 | + @OperateLog(type = EXPORT) | |
| 100 | + public void exportMerchantExcel(@Valid PayMerchantExportReqVO exportReqVO, | |
| 101 | + HttpServletResponse response) throws IOException { | |
| 102 | + List<PayMerchantDO> list = merchantService.getMerchantList(exportReqVO); | |
| 103 | + // 导出 Excel | |
| 104 | + List<PayMerchantExcelVO> datas = PayMerchantConvert.INSTANCE.convertList02(list); | |
| 105 | + ExcelUtils.write(response, "支付商户信息.xls", "数据", PayMerchantExcelVO.class, datas); | |
| 106 | + } | |
| 107 | + | |
| 108 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantBaseVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; | |
| 2 | + | |
| 3 | +import io.swagger.annotations.ApiModelProperty; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +import javax.validation.constraints.NotNull; | |
| 7 | + | |
| 8 | +/** | |
| 9 | +* 支付商户信息 Base VO,提供给添加、修改、详细的子 VO 使用 | |
| 10 | +* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | |
| 11 | +*/ | |
| 12 | +@Data | |
| 13 | +public class PayMerchantBaseVO { | |
| 14 | + | |
| 15 | + @ApiModelProperty(value = "商户号") | |
| 16 | + private String no; | |
| 17 | + | |
| 18 | + @ApiModelProperty(value = "商户全称", required = true) | |
| 19 | + @NotNull(message = "商户全称不能为空") | |
| 20 | + private String name; | |
| 21 | + | |
| 22 | + @ApiModelProperty(value = "商户简称", required = true) | |
| 23 | + @NotNull(message = "商户简称不能为空") | |
| 24 | + private String shortName; | |
| 25 | + | |
| 26 | + @ApiModelProperty(value = "开启状态", required = true) | |
| 27 | + @NotNull(message = "开启状态不能为空") | |
| 28 | + private Integer status; | |
| 29 | + | |
| 30 | + @ApiModelProperty(value = "备注") | |
| 31 | + private String remark; | |
| 32 | + | |
| 33 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantCreateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; | |
| 2 | + | |
| 3 | +import lombok.*; | |
| 4 | +import java.util.*; | |
| 5 | +import io.swagger.annotations.*; | |
| 6 | +import javax.validation.constraints.*; | |
| 7 | + | |
| 8 | +@ApiModel("支付商户信息创建 Request VO") | |
| 9 | +@Data | |
| 10 | +@EqualsAndHashCode(callSuper = true) | |
| 11 | +@ToString(callSuper = true) | |
| 12 | +public class PayMerchantCreateReqVO extends PayMerchantBaseVO { | |
| 13 | + | |
| 14 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantExcelVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; | |
| 4 | +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; | |
| 5 | +import lombok.*; | |
| 6 | +import java.util.*; | |
| 7 | +import io.swagger.annotations.*; | |
| 8 | + | |
| 9 | +import com.alibaba.excel.annotation.ExcelProperty; | |
| 10 | + | |
| 11 | +/** | |
| 12 | + * 支付商户信息 Excel VO | |
| 13 | + * | |
| 14 | + * @author 芋艿 | |
| 15 | + */ | |
| 16 | +@Data | |
| 17 | +public class PayMerchantExcelVO { | |
| 18 | + | |
| 19 | + @ExcelProperty("商户编号") | |
| 20 | + private Long id; | |
| 21 | + | |
| 22 | + @ExcelProperty("商户号") | |
| 23 | + private String no; | |
| 24 | + | |
| 25 | + @ExcelProperty("商户全称") | |
| 26 | + private String name; | |
| 27 | + | |
| 28 | + @ExcelProperty("商户简称") | |
| 29 | + private String shortName; | |
| 30 | + | |
| 31 | + @ExcelProperty(value = "开启状态",converter = DictConvert.class) | |
| 32 | + @DictFormat("pay_merchant_status") | |
| 33 | + private Integer status; | |
| 34 | + | |
| 35 | + @ExcelProperty("备注") | |
| 36 | + private String remark; | |
| 37 | + | |
| 38 | + @ExcelProperty("创建时间") | |
| 39 | + private Date createTime; | |
| 40 | + | |
| 41 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantExportReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; | |
| 2 | + | |
| 3 | +import lombok.*; | |
| 4 | +import java.util.*; | |
| 5 | +import io.swagger.annotations.*; | |
| 6 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | |
| 7 | +import org.springframework.format.annotation.DateTimeFormat; | |
| 8 | + | |
| 9 | +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | |
| 10 | + | |
| 11 | +@ApiModel(value = "支付商户信息 Excel 导出 Request VO", description = "参数和 PayMerchantPageReqVO 是一致的") | |
| 12 | +@Data | |
| 13 | +public class PayMerchantExportReqVO { | |
| 14 | + | |
| 15 | + @ApiModelProperty(value = "商户号") | |
| 16 | + private String no; | |
| 17 | + | |
| 18 | + @ApiModelProperty(value = "商户全称") | |
| 19 | + private String name; | |
| 20 | + | |
| 21 | + @ApiModelProperty(value = "商户简称") | |
| 22 | + private String shortName; | |
| 23 | + | |
| 24 | + @ApiModelProperty(value = "开启状态") | |
| 25 | + private Integer status; | |
| 26 | + | |
| 27 | + @ApiModelProperty(value = "备注") | |
| 28 | + private String remark; | |
| 29 | + | |
| 30 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 31 | + @ApiModelProperty(value = "开始创建时间") | |
| 32 | + private Date beginCreateTime; | |
| 33 | + | |
| 34 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 35 | + @ApiModelProperty(value = "结束创建时间") | |
| 36 | + private Date endCreateTime; | |
| 37 | + | |
| 38 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantPageReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; | |
| 2 | + | |
| 3 | +import lombok.*; | |
| 4 | +import java.util.*; | |
| 5 | +import io.swagger.annotations.*; | |
| 6 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | |
| 7 | +import org.springframework.format.annotation.DateTimeFormat; | |
| 8 | + | |
| 9 | +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | |
| 10 | + | |
| 11 | +@ApiModel("支付商户信息分页 Request VO") | |
| 12 | +@Data | |
| 13 | +@EqualsAndHashCode(callSuper = true) | |
| 14 | +@ToString(callSuper = true) | |
| 15 | +public class PayMerchantPageReqVO extends PageParam { | |
| 16 | + | |
| 17 | + @ApiModelProperty(value = "商户号") | |
| 18 | + private String no; | |
| 19 | + | |
| 20 | + @ApiModelProperty(value = "商户全称") | |
| 21 | + private String name; | |
| 22 | + | |
| 23 | + @ApiModelProperty(value = "商户简称") | |
| 24 | + private String shortName; | |
| 25 | + | |
| 26 | + @ApiModelProperty(value = "开启状态") | |
| 27 | + private Integer status; | |
| 28 | + | |
| 29 | + @ApiModelProperty(value = "备注") | |
| 30 | + private String remark; | |
| 31 | + | |
| 32 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 33 | + @ApiModelProperty(value = "开始创建时间") | |
| 34 | + private Date beginCreateTime; | |
| 35 | + | |
| 36 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 37 | + @ApiModelProperty(value = "结束创建时间") | |
| 38 | + private Date endCreateTime; | |
| 39 | + | |
| 40 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; | |
| 2 | + | |
| 3 | +import lombok.*; | |
| 4 | +import java.util.*; | |
| 5 | +import io.swagger.annotations.*; | |
| 6 | + | |
| 7 | +@ApiModel("支付商户信息 Response VO") | |
| 8 | +@Data | |
| 9 | +@EqualsAndHashCode(callSuper = true) | |
| 10 | +@ToString(callSuper = true) | |
| 11 | +public class PayMerchantRespVO extends PayMerchantBaseVO { | |
| 12 | + | |
| 13 | + @ApiModelProperty(value = "商户编号", required = true) | |
| 14 | + private Long id; | |
| 15 | + | |
| 16 | + @ApiModelProperty(value = "创建时间", required = true) | |
| 17 | + private Date createTime; | |
| 18 | + | |
| 19 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantUpdateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; | |
| 2 | + | |
| 3 | +import lombok.*; | |
| 4 | +import java.util.*; | |
| 5 | +import io.swagger.annotations.*; | |
| 6 | +import javax.validation.constraints.*; | |
| 7 | + | |
| 8 | +@ApiModel("支付商户信息更新 Request VO") | |
| 9 | +@Data | |
| 10 | +@EqualsAndHashCode(callSuper = true) | |
| 11 | +@ToString(callSuper = true) | |
| 12 | +public class PayMerchantUpdateReqVO extends PayMerchantBaseVO { | |
| 13 | + | |
| 14 | + @ApiModelProperty(value = "商户编号", required = true) | |
| 15 | + @NotNull(message = "商户编号不能为空") | |
| 16 | + private Long id; | |
| 17 | + | |
| 18 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantUpdateStatusReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; | |
| 2 | + | |
| 3 | +import io.swagger.annotations.ApiModel; | |
| 4 | +import io.swagger.annotations.ApiModelProperty; | |
| 5 | +import lombok.Data; | |
| 6 | + | |
| 7 | +import javax.validation.constraints.NotNull; | |
| 8 | + | |
| 9 | +@ApiModel("商户更新状态 Request VO") | |
| 10 | +@Data | |
| 11 | +public class PayMerchantUpdateStatusReqVO { | |
| 12 | + | |
| 13 | + @ApiModelProperty(value = "商户编号", required = true, example = "1024") | |
| 14 | + @NotNull(message = "商户编号不能为空") | |
| 15 | + private Long id; | |
| 16 | + | |
| 17 | + @ApiModelProperty(value = "状态", required = true, example = "1", notes = "见 SysCommonStatusEnum 枚举") | |
| 18 | + @NotNull(message = "状态不能为空") | |
| 19 | + private Integer status; | |
| 20 | + | |
| 21 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/merchant/PayMerchantConvert.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.pay.convert.merchant; | |
| 2 | + | |
| 3 | +import java.util.*; | |
| 4 | + | |
| 5 | +import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; | |
| 6 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 7 | + | |
| 8 | +import org.mapstruct.Mapper; | |
| 9 | +import org.mapstruct.factory.Mappers; | |
| 10 | +import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.*; | |
| 11 | + | |
| 12 | +/** | |
| 13 | + * 支付商户信息 Convert | |
| 14 | + * | |
| 15 | + * @author 芋艿 | |
| 16 | + */ | |
| 17 | +@Mapper | |
| 18 | +public interface PayMerchantConvert { | |
| 19 | + | |
| 20 | + PayMerchantConvert INSTANCE = Mappers.getMapper(PayMerchantConvert.class); | |
| 21 | + | |
| 22 | + PayMerchantDO convert(PayMerchantCreateReqVO bean); | |
| 23 | + | |
| 24 | + PayMerchantDO convert(PayMerchantUpdateReqVO bean); | |
| 25 | + | |
| 26 | + PayMerchantRespVO convert(PayMerchantDO bean); | |
| 27 | + | |
| 28 | + List<PayMerchantRespVO> convertList(List<PayMerchantDO> list); | |
| 29 | + | |
| 30 | + PageResult<PayMerchantRespVO> convertPage(PageResult<PayMerchantDO> page); | |
| 31 | + | |
| 32 | + List<PayMerchantExcelVO> convertList02(List<PayMerchantDO> list); | |
| 33 | + | |
| 34 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/merchant/PayMerchantMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.merchant; | |
| 2 | + | |
| 3 | +import java.util.*; | |
| 4 | + | |
| 5 | +import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; | |
| 6 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 7 | +import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; | |
| 8 | +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | |
| 9 | +import org.apache.ibatis.annotations.Mapper; | |
| 10 | +import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.*; | |
| 11 | + | |
| 12 | +/** | |
| 13 | + * 支付商户信息 Mapper | |
| 14 | + * | |
| 15 | + * @author 芋艿 | |
| 16 | + */ | |
| 17 | +@Mapper | |
| 18 | +public interface PayMerchantMapper extends BaseMapperX<PayMerchantDO> { | |
| 19 | + | |
| 20 | + default PageResult<PayMerchantDO> selectPage(PayMerchantPageReqVO reqVO) { | |
| 21 | + return selectPage(reqVO, new QueryWrapperX<PayMerchantDO>() | |
| 22 | + .likeIfPresent("no", reqVO.getNo()) | |
| 23 | + .likeIfPresent("name", reqVO.getName()) | |
| 24 | + .likeIfPresent("short_name", reqVO.getShortName()) | |
| 25 | + .eqIfPresent("status", reqVO.getStatus()) | |
| 26 | + .eqIfPresent("remark", reqVO.getRemark()) | |
| 27 | + .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) | |
| 28 | + .orderByDesc("id")); | |
| 29 | + } | |
| 30 | + | |
| 31 | + default List<PayMerchantDO> selectList(PayMerchantExportReqVO reqVO) { | |
| 32 | + return selectList(new QueryWrapperX<PayMerchantDO>() | |
| 33 | + .likeIfPresent("no", reqVO.getNo()) | |
| 34 | + .likeIfPresent("name", reqVO.getName()) | |
| 35 | + .likeIfPresent("short_name", reqVO.getShortName()) | |
| 36 | + .eqIfPresent("status", reqVO.getStatus()) | |
| 37 | + .eqIfPresent("remark", reqVO.getRemark()) | |
| 38 | + .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) | |
| 39 | + .orderByDesc("id")); | |
| 40 | + } | |
| 41 | + | |
| 42 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/enums/PayErrorCodeConstants.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.pay.enums; | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/PayMerchantService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.pay.service.merchant; | |
| 2 | + | |
| 3 | +import java.util.*; | |
| 4 | +import javax.validation.*; | |
| 5 | +import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.*; | |
| 6 | +import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; | |
| 7 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 8 | + | |
| 9 | +/** | |
| 10 | + * 支付商户信息 Service 接口 | |
| 11 | + * | |
| 12 | + * @author 芋艿 | |
| 13 | + */ | |
| 14 | +public interface PayMerchantService { | |
| 15 | + | |
| 16 | + /** | |
| 17 | + * 创建支付商户信息 | |
| 18 | + * | |
| 19 | + * @param createReqVO 创建信息 | |
| 20 | + * @return 编号 | |
| 21 | + */ | |
| 22 | + Long createMerchant(@Valid PayMerchantCreateReqVO createReqVO); | |
| 23 | + | |
| 24 | + /** | |
| 25 | + * 更新支付商户信息 | |
| 26 | + * | |
| 27 | + * @param updateReqVO 更新信息 | |
| 28 | + */ | |
| 29 | + void updateMerchant(@Valid PayMerchantUpdateReqVO updateReqVO); | |
| 30 | + | |
| 31 | + /** | |
| 32 | + * 删除支付商户信息 | |
| 33 | + * | |
| 34 | + * @param id 编号 | |
| 35 | + */ | |
| 36 | + void deleteMerchant(Long id); | |
| 37 | + | |
| 38 | + /** | |
| 39 | + * 获得支付商户信息 | |
| 40 | + * | |
| 41 | + * @param id 编号 | |
| 42 | + * @return 支付商户信息 | |
| 43 | + */ | |
| 44 | + PayMerchantDO getMerchant(Long id); | |
| 45 | + | |
| 46 | + /** | |
| 47 | + * 获得支付商户信息列表 | |
| 48 | + * | |
| 49 | + * @param ids 编号 | |
| 50 | + * @return 支付商户信息列表 | |
| 51 | + */ | |
| 52 | + List<PayMerchantDO> getMerchantList(Collection<Long> ids); | |
| 53 | + | |
| 54 | + /** | |
| 55 | + * 获得支付商户信息分页 | |
| 56 | + * | |
| 57 | + * @param pageReqVO 分页查询 | |
| 58 | + * @return 支付商户信息分页 | |
| 59 | + */ | |
| 60 | + PageResult<PayMerchantDO> getMerchantPage(PayMerchantPageReqVO pageReqVO); | |
| 61 | + | |
| 62 | + /** | |
| 63 | + * 获得支付商户信息列表, 用于 Excel 导出 | |
| 64 | + * | |
| 65 | + * @param exportReqVO 查询条件 | |
| 66 | + * @return 支付商户信息列表 | |
| 67 | + */ | |
| 68 | + List<PayMerchantDO> getMerchantList(PayMerchantExportReqVO exportReqVO); | |
| 69 | + | |
| 70 | + /** | |
| 71 | + * 修改商户状态 | |
| 72 | + * @param id 商户编号 | |
| 73 | + * @param status 状态 | |
| 74 | + */ | |
| 75 | + void updateMerchantStatus(Long id, Integer status); | |
| 76 | + | |
| 77 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/impl/PayMerchantServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.pay.service.merchant.impl; | |
| 2 | + | |
| 3 | +import cn.hutool.core.date.DateUtil; | |
| 4 | +import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantCreateReqVO; | |
| 5 | +import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantExportReqVO; | |
| 6 | +import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantPageReqVO; | |
| 7 | +import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantUpdateReqVO; | |
| 8 | +import cn.iocoder.yudao.adminserver.modules.pay.convert.merchant.PayMerchantConvert; | |
| 9 | +import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.merchant.PayMerchantMapper; | |
| 10 | +import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService; | |
| 11 | +import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; | |
| 12 | +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; | |
| 13 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 14 | +import com.google.common.annotations.VisibleForTesting; | |
| 15 | +import org.springframework.stereotype.Service; | |
| 16 | +import org.springframework.validation.annotation.Validated; | |
| 17 | + | |
| 18 | +import javax.annotation.Resource; | |
| 19 | +import java.time.LocalDateTime; | |
| 20 | +import java.util.Collection; | |
| 21 | +import java.util.List; | |
| 22 | + | |
| 23 | +import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*; | |
| 24 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | |
| 25 | +/** | |
| 26 | + * 支付商户信息 Service 实现类 | |
| 27 | + * | |
| 28 | + * @author 芋艿 | |
| 29 | + */ | |
| 30 | +@Service | |
| 31 | +@Validated | |
| 32 | +public class PayMerchantServiceImpl implements PayMerchantService { | |
| 33 | + | |
| 34 | + @Resource | |
| 35 | + private PayMerchantMapper merchantMapper; | |
| 36 | + | |
| 37 | + @Override | |
| 38 | + public Long createMerchant(PayMerchantCreateReqVO createReqVO) { | |
| 39 | + // 插入 | |
| 40 | + PayMerchantDO merchant = PayMerchantConvert.INSTANCE.convert(createReqVO); | |
| 41 | + // 根据 年月日时分秒毫秒 生成时间戳 | |
| 42 | + String merchantNo = "M" + DateUtil.format(LocalDateTime.now(),"yyyyMMddHHmmssSSS"); | |
| 43 | + merchant.setNo(merchantNo); | |
| 44 | + merchantMapper.insert(merchant); | |
| 45 | + // 返回 | |
| 46 | + return merchant.getId(); | |
| 47 | + } | |
| 48 | + | |
| 49 | + @Override | |
| 50 | + public void updateMerchant(PayMerchantUpdateReqVO updateReqVO) { | |
| 51 | + // 校验存在 | |
| 52 | + this.validateMerchantExists(updateReqVO.getId()); | |
| 53 | + // 更新 | |
| 54 | + PayMerchantDO updateObj = PayMerchantConvert.INSTANCE.convert(updateReqVO); | |
| 55 | + merchantMapper.updateById(updateObj); | |
| 56 | + } | |
| 57 | + | |
| 58 | + @Override | |
| 59 | + public void deleteMerchant(Long id) { | |
| 60 | + // 校验存在 | |
| 61 | + this.validateMerchantExists(id); | |
| 62 | + // 删除 | |
| 63 | + merchantMapper.deleteById(id); | |
| 64 | + } | |
| 65 | + | |
| 66 | + private void validateMerchantExists(Long id) { | |
| 67 | + if (merchantMapper.selectById(id) == null) { | |
| 68 | + throw exception(MERCHANT_NOT_EXISTS); | |
| 69 | + } | |
| 70 | + } | |
| 71 | + | |
| 72 | + @Override | |
| 73 | + public PayMerchantDO getMerchant(Long id) { | |
| 74 | + return merchantMapper.selectById(id); | |
| 75 | + } | |
| 76 | + | |
| 77 | + @Override | |
| 78 | + public List<PayMerchantDO> getMerchantList(Collection<Long> ids) { | |
| 79 | + return merchantMapper.selectBatchIds(ids); | |
| 80 | + } | |
| 81 | + | |
| 82 | + @Override | |
| 83 | + public PageResult<PayMerchantDO> getMerchantPage(PayMerchantPageReqVO pageReqVO) { | |
| 84 | + return merchantMapper.selectPage(pageReqVO); | |
| 85 | + } | |
| 86 | + | |
| 87 | + @Override | |
| 88 | + public List<PayMerchantDO> getMerchantList(PayMerchantExportReqVO exportReqVO) { | |
| 89 | + return merchantMapper.selectList(exportReqVO); | |
| 90 | + } | |
| 91 | + | |
| 92 | + /** | |
| 93 | + * 修改商户状态 | |
| 94 | + * | |
| 95 | + * @param id 商户编号 | |
| 96 | + * @param status 状态 | |
| 97 | + */ | |
| 98 | + @Override | |
| 99 | + public void updateMerchantStatus(Long id, Integer status) { | |
| 100 | + // 校验商户存在 | |
| 101 | + this.checkMerchantExists(id); | |
| 102 | + // 更新状态 | |
| 103 | + PayMerchantDO merchant = new PayMerchantDO(); | |
| 104 | + merchant.setId(id); | |
| 105 | + merchant.setStatus(status); | |
| 106 | + merchantMapper.updateById(merchant); | |
| 107 | + } | |
| 108 | + | |
| 109 | + /** | |
| 110 | + * 检查商户是否存在 | |
| 111 | + * @param id 商户编号 | |
| 112 | + */ | |
| 113 | + @VisibleForTesting | |
| 114 | + public void checkMerchantExists(Long id) { | |
| 115 | + if (id == null) { | |
| 116 | + return; | |
| 117 | + } | |
| 118 | + PayMerchantDO merchant = merchantMapper.selectById(id); | |
| 119 | + if (merchant == null) { | |
| 120 | + throw exception(MERCHANT_NOT_EXISTS); | |
| 121 | + } | |
| 122 | + } | |
| 123 | + | |
| 124 | + | |
| 125 | +} | ... | ... |
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/merchant/service/PayMerchantServiceTest.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.pay.merchant.service; | |
| 2 | + | |
| 3 | +import cn.hutool.core.util.RandomUtil; | |
| 4 | +import cn.iocoder.yudao.adminserver.BaseDbUnitTest; | |
| 5 | +import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantCreateReqVO; | |
| 6 | +import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantExportReqVO; | |
| 7 | +import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantPageReqVO; | |
| 8 | +import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantUpdateReqVO; | |
| 9 | +import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.merchant.PayMerchantMapper; | |
| 10 | +import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.impl.PayMerchantServiceImpl; | |
| 11 | +import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; | |
| 12 | +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | |
| 13 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 14 | +import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; | |
| 15 | +import org.junit.jupiter.api.Test; | |
| 16 | +import org.springframework.context.annotation.Import; | |
| 17 | + | |
| 18 | +import javax.annotation.Resource; | |
| 19 | +import java.util.List; | |
| 20 | + | |
| 21 | +import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.MERCHANT_NOT_EXISTS; | |
| 22 | +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; | |
| 23 | +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; | |
| 24 | +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; | |
| 25 | +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; | |
| 26 | +import static org.junit.jupiter.api.Assertions.*; | |
| 27 | + | |
| 28 | +/** | |
| 29 | +* {@link PayMerchantServiceImpl} 的单元测试类 | |
| 30 | +* | |
| 31 | +* @author 芋艿 | |
| 32 | +*/ | |
| 33 | +@Import(PayMerchantServiceImpl.class) | |
| 34 | +public class PayMerchantServiceTest extends BaseDbUnitTest { | |
| 35 | + | |
| 36 | + @Resource | |
| 37 | + private PayMerchantServiceImpl merchantService; | |
| 38 | + | |
| 39 | + @Resource | |
| 40 | + private PayMerchantMapper merchantMapper; | |
| 41 | + | |
| 42 | + @Test | |
| 43 | + public void testCreateMerchant_success() { | |
| 44 | + // 准备参数 | |
| 45 | + PayMerchantCreateReqVO reqVO = randomPojo(PayMerchantCreateReqVO.class,o -> | |
| 46 | + o.setStatus(RandomUtil.randomEle(CommonStatusEnum.values()).getStatus())); | |
| 47 | + | |
| 48 | + // 调用 | |
| 49 | + Long merchantId = merchantService.createMerchant(reqVO); | |
| 50 | + // 断言 | |
| 51 | + assertNotNull(merchantId); | |
| 52 | + // 校验记录的属性是否正确 | |
| 53 | + PayMerchantDO merchant = merchantMapper.selectById(merchantId); | |
| 54 | + assertPojoEquals(reqVO, merchant,"no"); | |
| 55 | + } | |
| 56 | + | |
| 57 | + @Test | |
| 58 | + public void testUpdateMerchant_success() { | |
| 59 | + // mock 数据 | |
| 60 | + PayMerchantDO dbMerchant = randomPojo(PayMerchantDO.class, o -> | |
| 61 | + o.setStatus(CommonStatusEnum.ENABLE.getStatus())); | |
| 62 | + merchantMapper.insert(dbMerchant);// @Sql: 先插入出一条存在的数据 | |
| 63 | + // 准备参数 | |
| 64 | + PayMerchantUpdateReqVO reqVO = randomPojo(PayMerchantUpdateReqVO.class, o -> { | |
| 65 | + o.setId(dbMerchant.getId()); // 设置更新的 ID | |
| 66 | + o.setStatus(CommonStatusEnum.DISABLE.getStatus()); | |
| 67 | + }); | |
| 68 | + | |
| 69 | + // 调用 | |
| 70 | + merchantService.updateMerchant(reqVO); | |
| 71 | + // 校验是否更新正确 | |
| 72 | + PayMerchantDO merchant = merchantMapper.selectById(reqVO.getId()); // 获取最新的 | |
| 73 | + assertPojoEquals(reqVO, merchant); | |
| 74 | + } | |
| 75 | + | |
| 76 | + @Test | |
| 77 | + public void testUpdateMerchant_notExists() { | |
| 78 | + // 准备参数 | |
| 79 | + PayMerchantUpdateReqVO reqVO = randomPojo(PayMerchantUpdateReqVO.class); | |
| 80 | + | |
| 81 | + // 调用, 并断言异常 | |
| 82 | + assertServiceException(() -> merchantService.updateMerchant(reqVO), MERCHANT_NOT_EXISTS); | |
| 83 | + } | |
| 84 | + | |
| 85 | + @Test | |
| 86 | + public void testDeleteMerchant_success() { | |
| 87 | + // mock 数据 | |
| 88 | + PayMerchantDO dbMerchant = randomPojo(PayMerchantDO.class, | |
| 89 | + o-> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); | |
| 90 | + merchantMapper.insert(dbMerchant);// @Sql: 先插入出一条存在的数据 | |
| 91 | + // 准备参数 | |
| 92 | + Long id = dbMerchant.getId(); | |
| 93 | + | |
| 94 | + // 调用 | |
| 95 | + merchantService.deleteMerchant(id); | |
| 96 | + // 校验数据不存在了 | |
| 97 | + assertNull(merchantMapper.selectById(id)); | |
| 98 | + } | |
| 99 | + | |
| 100 | + @Test | |
| 101 | + public void testDeleteMerchant_notExists() { | |
| 102 | + // 准备参数 | |
| 103 | + Long id = randomLongId(); | |
| 104 | + | |
| 105 | + // 调用, 并断言异常 | |
| 106 | + assertServiceException(() -> merchantService.deleteMerchant(id), MERCHANT_NOT_EXISTS); | |
| 107 | + } | |
| 108 | + | |
| 109 | + @Test | |
| 110 | + public void testGetMerchantPage() { | |
| 111 | + // mock 数据 | |
| 112 | + PayMerchantDO dbMerchant = randomPojo(PayMerchantDO.class, o -> { // 等会查询到 | |
| 113 | + o.setNo("M1008611"); | |
| 114 | + o.setName("灿哥的杂货铺"); | |
| 115 | + o.setShortName("灿灿子"); | |
| 116 | + o.setStatus(CommonStatusEnum.ENABLE.getStatus()); | |
| 117 | + o.setRemark("灿哥的杂货铺"); | |
| 118 | + o.setCreateTime(buildTime(2021,11,3)); | |
| 119 | + }); | |
| 120 | + merchantMapper.insert(dbMerchant); | |
| 121 | + // 测试 no 不匹配 | |
| 122 | + merchantMapper.insert(ObjectUtils.clone(dbMerchant, o -> o.setNo("M200000"))); | |
| 123 | + // 测试 name 不匹配 | |
| 124 | + merchantMapper.insert(ObjectUtils.clone(dbMerchant, o -> o.setName("斌哥的杂货铺"))); | |
| 125 | + // 测试 shortName 不匹配 | |
| 126 | + merchantMapper.insert(ObjectUtils.clone(dbMerchant, o -> o.setShortName("斌斌子"))); | |
| 127 | + // 测试 status 不匹配 | |
| 128 | + merchantMapper.insert(ObjectUtils.clone(dbMerchant, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); | |
| 129 | + // 测试 remark 不匹配 | |
| 130 | + merchantMapper.insert(ObjectUtils.clone(dbMerchant, o -> o.setRemark("斌哥的杂货铺"))); | |
| 131 | + // 测试 createTime 不匹配 | |
| 132 | + merchantMapper.insert(ObjectUtils.clone(dbMerchant, o -> o.setCreateTime(buildTime(2022,12,4)))); | |
| 133 | + // 准备参数 | |
| 134 | + PayMerchantPageReqVO reqVO = new PayMerchantPageReqVO(); | |
| 135 | + reqVO.setNo("M1008611"); | |
| 136 | + reqVO.setName("灿哥的杂货铺"); | |
| 137 | + reqVO.setShortName("灿灿子"); | |
| 138 | + reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); | |
| 139 | + reqVO.setRemark("灿哥的杂货铺"); | |
| 140 | + reqVO.setBeginCreateTime(buildTime(2021,11,2)); | |
| 141 | + reqVO.setEndCreateTime(buildTime(2021,11,4)); | |
| 142 | + | |
| 143 | + // 调用 | |
| 144 | + PageResult<PayMerchantDO> pageResult = merchantService.getMerchantPage(reqVO); | |
| 145 | + // 断言 | |
| 146 | + assertEquals(1, pageResult.getTotal()); | |
| 147 | + assertEquals(1, pageResult.getList().size()); | |
| 148 | + assertPojoEquals(dbMerchant, pageResult.getList().get(0)); | |
| 149 | + } | |
| 150 | + | |
| 151 | + @Test | |
| 152 | + public void testGetMerchantList() { | |
| 153 | + // mock 数据 | |
| 154 | + PayMerchantDO dbMerchant = randomPojo(PayMerchantDO.class, o -> { // 等会查询到 | |
| 155 | + o.setNo("M1008611"); | |
| 156 | + o.setName("灿哥的杂货铺"); | |
| 157 | + o.setShortName("灿灿子"); | |
| 158 | + o.setStatus(CommonStatusEnum.ENABLE.getStatus()); | |
| 159 | + o.setRemark("灿哥的杂货铺"); | |
| 160 | + o.setCreateTime(buildTime(2021,11,3)); | |
| 161 | + }); | |
| 162 | + merchantMapper.insert(dbMerchant); | |
| 163 | + // 测试 no 不匹配 | |
| 164 | + merchantMapper.insert(ObjectUtils.clone(dbMerchant, o -> o.setNo("M200000"))); | |
| 165 | + // 测试 name 不匹配 | |
| 166 | + merchantMapper.insert(ObjectUtils.clone(dbMerchant, o -> o.setName("斌哥的杂货铺"))); | |
| 167 | + // 测试 shortName 不匹配 | |
| 168 | + merchantMapper.insert(ObjectUtils.clone(dbMerchant, o -> o.setShortName("斌斌子"))); | |
| 169 | + // 测试 status 不匹配 | |
| 170 | + merchantMapper.insert(ObjectUtils.clone(dbMerchant, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); | |
| 171 | + // 测试 remark 不匹配 | |
| 172 | + merchantMapper.insert(ObjectUtils.clone(dbMerchant, o -> o.setRemark("斌哥的杂货铺"))); | |
| 173 | + // 测试 createTime 不匹配 | |
| 174 | + merchantMapper.insert(ObjectUtils.clone(dbMerchant, o -> o.setCreateTime(buildTime(2022,12,4)))); | |
| 175 | + // 准备参数 | |
| 176 | + PayMerchantExportReqVO reqVO = new PayMerchantExportReqVO(); | |
| 177 | + reqVO.setNo("M1008611"); | |
| 178 | + reqVO.setName("灿哥的杂货铺"); | |
| 179 | + reqVO.setShortName("灿灿子"); | |
| 180 | + reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); | |
| 181 | + reqVO.setRemark("灿哥的杂货铺"); | |
| 182 | + reqVO.setBeginCreateTime(buildTime(2021,11,2)); | |
| 183 | + reqVO.setEndCreateTime(buildTime(2021,11,4)); | |
| 184 | + | |
| 185 | + // 调用 | |
| 186 | + List<PayMerchantDO> list = merchantService.getMerchantList(reqVO); | |
| 187 | + // 断言 | |
| 188 | + assertEquals(1, list.size()); | |
| 189 | + assertPojoEquals(dbMerchant, list.get(0)); | |
| 190 | + } | |
| 191 | + | |
| 192 | +} | ... | ... |
yudao-admin-server/src/test/resources/sql/clean.sql
yudao-admin-server/src/test/resources/sql/create_tables.sql
| ... | ... | @@ -449,3 +449,18 @@ CREATE TABLE IF NOT EXISTS "sys_social_user" ( |
| 449 | 449 | "deleted" bit NOT NULL DEFAULT FALSE, |
| 450 | 450 | PRIMARY KEY ("id") |
| 451 | 451 | ) COMMENT '社交用户'; |
| 452 | + | |
| 453 | +CREATE TABLE IF NOT EXISTS "pay_merchant" ( | |
| 454 | + "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, | |
| 455 | + "no" varchar(32) NOT NULL, | |
| 456 | + "name" varchar(64) NOT NULL, | |
| 457 | + "short_name" varchar(64) NOT NULL, | |
| 458 | + "status" tinyint NOT NULL, | |
| 459 | + "remark" varchar(255) DEFAULT NULL, | |
| 460 | + "creator" varchar(64) DEFAULT '', | |
| 461 | + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP , | |
| 462 | + "updater" varchar(64) DEFAULT '', | |
| 463 | + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| 464 | + "deleted" bit(1) NOT NULL DEFAULT FALSE, | |
| 465 | + PRIMARY KEY ("id") | |
| 466 | +) COMMENT '支付商户信息'; | ... | ... |
yudao-admin-ui/src/api/pay/merchant.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +// 创建支付商户信息 | |
| 4 | +export function createMerchant(data) { | |
| 5 | + return request({ | |
| 6 | + url: '/pay/merchant/create', | |
| 7 | + method: 'post', | |
| 8 | + data: data | |
| 9 | + }) | |
| 10 | +} | |
| 11 | + | |
| 12 | +// 更新支付商户信息 | |
| 13 | +export function updateMerchant(data) { | |
| 14 | + return request({ | |
| 15 | + url: '/pay/merchant/update', | |
| 16 | + method: 'put', | |
| 17 | + data: data | |
| 18 | + }) | |
| 19 | +} | |
| 20 | + | |
| 21 | +// 支付商户状态修改 | |
| 22 | +export function changeMerchantStatus(id, status) { | |
| 23 | + const data = { | |
| 24 | + id, | |
| 25 | + status | |
| 26 | + } | |
| 27 | + return request({ | |
| 28 | + url: '/pay/merchant/update-status', | |
| 29 | + method: 'put', | |
| 30 | + data: data | |
| 31 | + }) | |
| 32 | +} | |
| 33 | + | |
| 34 | +// 删除支付商户信息 | |
| 35 | +export function deleteMerchant(id) { | |
| 36 | + return request({ | |
| 37 | + url: '/pay/merchant/delete?id=' + id, | |
| 38 | + method: 'delete' | |
| 39 | + }) | |
| 40 | +} | |
| 41 | + | |
| 42 | +// 获得支付商户信息 | |
| 43 | +export function getMerchant(id) { | |
| 44 | + return request({ | |
| 45 | + url: '/pay/merchant/get?id=' + id, | |
| 46 | + method: 'get' | |
| 47 | + }) | |
| 48 | +} | |
| 49 | + | |
| 50 | +// 获得支付商户信息分页 | |
| 51 | +export function getMerchantPage(query) { | |
| 52 | + return request({ | |
| 53 | + url: '/pay/merchant/page', | |
| 54 | + method: 'get', | |
| 55 | + params: query | |
| 56 | + }) | |
| 57 | +} | |
| 58 | + | |
| 59 | +// 导出支付商户信息 Excel | |
| 60 | +export function exportMerchantExcel(query) { | |
| 61 | + return request({ | |
| 62 | + url: '/pay/merchant/export-excel', | |
| 63 | + method: 'get', | |
| 64 | + params: query, | |
| 65 | + responseType: 'blob' | |
| 66 | + }) | |
| 67 | +} | ... | ... |
yudao-admin-ui/src/assets/icons/svg/merchant.svg
0 → 100644
| 1 | +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1635907181185" class="icon" viewBox="0 0 1184 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3259" xmlns:xlink="http://www.w3.org/1999/xlink" width="231.25" height="200"><defs><style type="text/css">@font-face { font-family: element-icons; src: url("chrome-extension://moombeodfomdpjnpocobemoiaemednkg/fonts/element-icons.woff") format("woff"), url("chrome-extension://moombeodfomdpjnpocobemoiaemednkg/fonts/element-icons.ttf ") format("truetype"); } | |
| 2 | +</style></defs><path d="M1005.633722 616.006249c-5.311502-0.479955-10.431022-1.27988-15.518545-2.143799-1.087898-0.127988-2.271787-0.287973-3.359685-0.479955-2.399775-0.415961-4.671562-1.055901-7.007343-1.631847-9.951067-2.143799-19.678155-4.831547-28.989282-8.351217l0 133.235509-731.355435 0 0-133.235509c-9.375121 3.551667-19.006218 6.303409-29.053276 8.511202-2.335781 0.415961-4.607568 1.055901-6.943349 1.535856-1.087898 0.191982-2.175796 0.31997-3.359685 0.511952-5.11952 0.767928-10.271037 1.535856-15.518545 2.079805-5.983439 0.479955-12.094866 0.863919-18.270287 0.863919-12.47883 0-24.701684-1.215886-36.540574-3.327688l0 357.310502c0 29.309252 24.573696 53.11502 54.874855 53.11502l841.073149 0c30.237165 0 54.810861-23.773771 54.810861-53.11502l0-357.342499c-11.83889 2.143799-24.061744 3.327688-36.540574 3.327688-6.07943 0-12.254851-0.351967-18.23829-0.863919z" p-id="3260"></path><path d="M182.83086 109.749711l804.500578 0c30.301159 0 54.874855-24.573696 54.874855-54.874855s-24.573696-54.874855-54.874855-54.874855l-804.500578 0c-30.301159 0-54.874855 24.573696-54.874855 54.874855 0.031997 30.301159 24.605693 54.874855 54.874855 54.874855z" p-id="3261"></path><path d="M1067.387932 164.592569l-964.549573 0-102.838359 256.007999c0 80.728432 65.529857 146.258288 146.258288 146.258288s146.258288-65.529857 146.258288-146.258288c0 80.728432 65.529857 146.258288 146.258288 146.258288s146.258288-65.529857 146.258288-146.258288c0 80.728432 65.529857 146.258288 146.258288 146.258288s146.258288-65.529857 146.258288-146.258288c0 80.728432 65.529857 146.258288 146.258288 146.258288s146.258288-65.529857 146.258288-146.258288l-102.806362-256.007999z" p-id="3262"></path></svg> | |
| 0 | 3 | \ No newline at end of file | ... | ... |
yudao-admin-ui/src/assets/icons/svg/pay.svg
0 → 100644
| 1 | +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1635906769564" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2420" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: element-icons; src: url("chrome-extension://moombeodfomdpjnpocobemoiaemednkg/fonts/element-icons.woff") format("woff"), url("chrome-extension://moombeodfomdpjnpocobemoiaemednkg/fonts/element-icons.ttf ") format("truetype"); } | |
| 2 | +</style></defs><path d="M512 0C230.4 0 0 230.4 0 512s230.4 512 512 512 512-230.4 512-512S793.6 0 512 0z m0 921.6c-225.28 0-409.6-184.32-409.6-409.6s184.32-409.6 409.6-409.6 409.6 184.32 409.6 409.6-184.32 409.6-409.6 409.6z" p-id="2421"></path><path d="M665.6 537.6h-102.4v-51.2h102.4c25.6 0 51.2-25.6 51.2-51.2s-25.6-51.2-51.2-51.2h-30.72l20.48-20.48c20.48-20.48 20.48-51.2 0-71.68s-51.2-20.48-71.68 0L512 363.52 440.32 296.96c-20.48-20.48-51.2-20.48-71.68 0s-20.48 51.2 0 71.68l20.48 20.48H358.4c-25.6 0-51.2 25.6-51.2 51.2s25.6 51.2 51.2 51.2h102.4v51.2H358.4c-25.6 0-51.2 25.6-51.2 51.2s25.6 51.2 51.2 51.2h102.4v56.32c0 25.6 20.48 46.08 46.08 46.08h10.24c25.6 0 46.08-20.48 46.08-46.08v-56.32h102.4c25.6 0 51.2-25.6 51.2-51.2s-25.6-56.32-51.2-56.32z" p-id="2422"></path></svg> | |
| 0 | 3 | \ No newline at end of file | ... | ... |
yudao-admin-ui/src/utils/dict.js
yudao-admin-ui/src/views/pay/merchant/index.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div class="app-container"> | |
| 3 | + | |
| 4 | + <!-- 搜索工作栏 --> | |
| 5 | + <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> | |
| 6 | + <el-form-item label="商户号" prop="no"> | |
| 7 | + <el-input v-model="queryParams.no" placeholder="请输入商户号" clearable size="small" @keyup.enter.native="handleQuery"/> | |
| 8 | + </el-form-item> | |
| 9 | + <el-form-item label="商户全称" prop="name"> | |
| 10 | + <el-input v-model="queryParams.name" placeholder="请输入商户全称" clearable size="small" @keyup.enter.native="handleQuery"/> | |
| 11 | + </el-form-item> | |
| 12 | + <el-form-item label="商户简称" prop="shortName"> | |
| 13 | + <el-input v-model="queryParams.shortName" placeholder="请输入商户简称" clearable size="small" @keyup.enter.native="handleQuery"/> | |
| 14 | + </el-form-item> | |
| 15 | + <el-form-item label="开启状态" prop="status"> | |
| 16 | + <el-select v-model="queryParams.status" placeholder="请选择开启状态" clearable size="small"> | |
| 17 | + <el-option v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/> | |
| 18 | + </el-select> | |
| 19 | + </el-form-item> | |
| 20 | + <el-form-item label="备注" prop="remark"> | |
| 21 | + <el-input v-model="queryParams.remark" placeholder="请输入备注" clearable size="small" @keyup.enter.native="handleQuery"/> | |
| 22 | + </el-form-item> | |
| 23 | + <el-form-item label="创建时间"> | |
| 24 | + <el-date-picker v-model="dateRangeCreateTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" | |
| 25 | + type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" /> | |
| 26 | + </el-form-item> | |
| 27 | + <el-form-item> | |
| 28 | + <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> | |
| 29 | + <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> | |
| 30 | + </el-form-item> | |
| 31 | + </el-form> | |
| 32 | + | |
| 33 | + <!-- 操作工具栏 --> | |
| 34 | + <el-row :gutter="10" class="mb8"> | |
| 35 | + <el-col :span="1.5"> | |
| 36 | + <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" | |
| 37 | + v-hasPermi="['pay:merchant:create']">新增</el-button> | |
| 38 | + </el-col> | |
| 39 | + <el-col :span="1.5"> | |
| 40 | + <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" | |
| 41 | + v-hasPermi="['pay:merchant:export']">导出</el-button> | |
| 42 | + </el-col> | |
| 43 | + <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> | |
| 44 | + </el-row> | |
| 45 | + | |
| 46 | + <!-- 列表 --> | |
| 47 | + <el-table v-loading="loading" :data="list"> | |
| 48 | + <el-table-column label="商户编号" align="center" prop="id" /> | |
| 49 | + <el-table-column label="商户号" align="center" prop="no" /> | |
| 50 | + <el-table-column label="商户全称" align="center" prop="name" /> | |
| 51 | + <el-table-column label="商户简称" align="center" prop="shortName" /> | |
| 52 | + <el-table-column label="开启状态" align="center" prop="status" > | |
| 53 | + <template slot-scope="scope"> | |
| 54 | + <el-switch v-model="scope.row.status" :active-value="0" :inactive-value="1" @change="handleStatusChange(scope.row)" /> | |
| 55 | + </template> | |
| 56 | + </el-table-column> | |
| 57 | + <el-table-column label="备注" align="center" prop="remark" /> | |
| 58 | + <el-table-column label="创建时间" align="center" prop="createTime" width="180"> | |
| 59 | + <template slot-scope="scope"> | |
| 60 | + <span>{{ parseTime(scope.row.createTime) }}</span> | |
| 61 | + </template> | |
| 62 | + </el-table-column> | |
| 63 | + <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | |
| 64 | + <template slot-scope="scope"> | |
| 65 | + <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" | |
| 66 | + v-hasPermi="['pay:merchant:update']">修改</el-button> | |
| 67 | + <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" | |
| 68 | + v-hasPermi="['pay:merchant:delete']">删除</el-button> | |
| 69 | + </template> | |
| 70 | + </el-table-column> | |
| 71 | + </el-table> | |
| 72 | + <!-- 分页组件 --> | |
| 73 | + <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" | |
| 74 | + @pagination="getList"/> | |
| 75 | + | |
| 76 | + <!-- 对话框(添加 / 修改) --> | |
| 77 | + <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> | |
| 78 | + <el-form ref="form" :model="form" :rules="rules" label-width="80px"> | |
| 79 | +<!-- <el-form-item label="商户号" prop="no">--> | |
| 80 | +<!-- <el-input v-model="form.no" placeholder="请输入商户号" />--> | |
| 81 | +<!-- </el-form-item>--> | |
| 82 | + <el-form-item label="商户全称" prop="name"> | |
| 83 | + <el-input v-model="form.name" placeholder="请输入商户全称" /> | |
| 84 | + </el-form-item> | |
| 85 | + <el-form-item label="商户简称" prop="shortName"> | |
| 86 | + <el-input v-model="form.shortName" placeholder="请输入商户简称" /> | |
| 87 | + </el-form-item> | |
| 88 | + <el-form-item label="开启状态" prop="status"> | |
| 89 | + <el-radio-group v-model="form.status"> | |
| 90 | + <el-radio v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="parseInt(dict.value)"> | |
| 91 | + {{dict.label}}</el-radio> | |
| 92 | + </el-radio-group> | |
| 93 | + </el-form-item> | |
| 94 | + <el-form-item label="备注" prop="remark"> | |
| 95 | + <el-input v-model="form.remark" placeholder="请输入备注" /> | |
| 96 | + </el-form-item> | |
| 97 | + </el-form> | |
| 98 | + <div slot="footer" class="dialog-footer"> | |
| 99 | + <el-button type="primary" @click="submitForm">确 定</el-button> | |
| 100 | + <el-button @click="cancel">取 消</el-button> | |
| 101 | + </div> | |
| 102 | + </el-dialog> | |
| 103 | + </div> | |
| 104 | +</template> | |
| 105 | + | |
| 106 | +<script> | |
| 107 | +import { | |
| 108 | + createMerchant, | |
| 109 | + updateMerchant, | |
| 110 | + changeMerchantStatus, | |
| 111 | + deleteMerchant, | |
| 112 | + getMerchant, | |
| 113 | + getMerchantPage, | |
| 114 | + exportMerchantExcel | |
| 115 | +} from "@/api/pay/merchant"; | |
| 116 | +import {DICT_TYPE, getDictDatas} from "@/utils/dict"; | |
| 117 | +import {SysCommonStatusEnum} from "@/utils/constants"; | |
| 118 | + | |
| 119 | +export default { | |
| 120 | + name: "Merchant", | |
| 121 | + components: { | |
| 122 | + }, | |
| 123 | + data() { | |
| 124 | + return { | |
| 125 | + // 遮罩层 | |
| 126 | + loading: true, | |
| 127 | + // 显示搜索条件 | |
| 128 | + showSearch: true, | |
| 129 | + // 总条数 | |
| 130 | + total: 0, | |
| 131 | + // 支付商户信息列表 | |
| 132 | + list: [], | |
| 133 | + // 弹出层标题 | |
| 134 | + title: "", | |
| 135 | + // 是否显示弹出层 | |
| 136 | + open: false, | |
| 137 | + dateRangeCreateTime: [], | |
| 138 | + // 查询参数 | |
| 139 | + queryParams: { | |
| 140 | + pageNo: 1, | |
| 141 | + pageSize: 10, | |
| 142 | + no: null, | |
| 143 | + name: null, | |
| 144 | + shortName: null, | |
| 145 | + status: null, | |
| 146 | + remark: null, | |
| 147 | + }, | |
| 148 | + // 表单参数 | |
| 149 | + form: {}, | |
| 150 | + // 表单校验 | |
| 151 | + rules: { | |
| 152 | + no: [{ required: true, message: "商户号不能为空", trigger: "blur" }], | |
| 153 | + name: [{ required: true, message: "商户全称不能为空", trigger: "blur" }], | |
| 154 | + shortName: [{ required: true, message: "商户简称不能为空", trigger: "blur" }], | |
| 155 | + status: [{ required: true, message: "开启状态不能为空", trigger: "blur" }], | |
| 156 | + }, | |
| 157 | + // 数据字典 | |
| 158 | + statusDictDatas: getDictDatas(DICT_TYPE.PAY_MERCHANT_STATUS) | |
| 159 | + }; | |
| 160 | + }, | |
| 161 | + created() { | |
| 162 | + this.getList(); | |
| 163 | + }, | |
| 164 | + methods: { | |
| 165 | + /** 查询列表 */ | |
| 166 | + getList() { | |
| 167 | + this.loading = true; | |
| 168 | + // 处理查询参数 | |
| 169 | + let params = {...this.queryParams}; | |
| 170 | + this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime'); | |
| 171 | + // 执行查询 | |
| 172 | + getMerchantPage(params).then(response => { | |
| 173 | + this.list = response.data.list; | |
| 174 | + this.total = response.data.total; | |
| 175 | + this.loading = false; | |
| 176 | + }); | |
| 177 | + }, | |
| 178 | + /** 取消按钮 */ | |
| 179 | + cancel() { | |
| 180 | + this.open = false; | |
| 181 | + this.reset(); | |
| 182 | + }, | |
| 183 | + /** 表单重置 */ | |
| 184 | + reset() { | |
| 185 | + this.form = { | |
| 186 | + id: undefined, | |
| 187 | + no: undefined, | |
| 188 | + name: undefined, | |
| 189 | + shortName: undefined, | |
| 190 | + status: undefined, | |
| 191 | + remark: undefined, | |
| 192 | + }; | |
| 193 | + this.resetForm("form"); | |
| 194 | + }, | |
| 195 | + /** 搜索按钮操作 */ | |
| 196 | + handleQuery() { | |
| 197 | + this.queryParams.pageNo = 1; | |
| 198 | + this.getList(); | |
| 199 | + }, | |
| 200 | + /** 重置按钮操作 */ | |
| 201 | + resetQuery() { | |
| 202 | + this.dateRangeCreateTime = []; | |
| 203 | + this.resetForm("queryForm"); | |
| 204 | + this.handleQuery(); | |
| 205 | + }, | |
| 206 | + /** 新增按钮操作 */ | |
| 207 | + handleAdd() { | |
| 208 | + this.reset(); | |
| 209 | + this.open = true; | |
| 210 | + this.title = "添加支付商户信息"; | |
| 211 | + }, | |
| 212 | + /** 修改按钮操作 */ | |
| 213 | + handleUpdate(row) { | |
| 214 | + this.reset(); | |
| 215 | + const id = row.id; | |
| 216 | + getMerchant(id).then(response => { | |
| 217 | + this.form = response.data; | |
| 218 | + this.open = true; | |
| 219 | + this.title = "修改支付商户信息"; | |
| 220 | + }); | |
| 221 | + }, | |
| 222 | + // 用户状态修改 | |
| 223 | + handleStatusChange(row) { | |
| 224 | + let text = row.status === SysCommonStatusEnum.ENABLE ? "启用" : "停用"; | |
| 225 | + this.$confirm('确认要"' + text + '""' + row.name + '"商户吗?', "警告", { | |
| 226 | + confirmButtonText: "确定", | |
| 227 | + cancelButtonText: "取消", | |
| 228 | + type: "warning" | |
| 229 | + }).then(function() { | |
| 230 | + return changeMerchantStatus(row.id, row.status); | |
| 231 | + }).then(() => { | |
| 232 | + this.msgSuccess(text + "成功"); | |
| 233 | + }).catch(function() { | |
| 234 | + row.status = row.status === SysCommonStatusEnum.ENABLE ? SysCommonStatusEnum.DISABLE | |
| 235 | + : SysCommonStatusEnum.ENABLE; | |
| 236 | + }); | |
| 237 | + }, | |
| 238 | + /** 提交按钮 */ | |
| 239 | + submitForm() { | |
| 240 | + this.$refs["form"].validate(valid => { | |
| 241 | + if (!valid) { | |
| 242 | + return; | |
| 243 | + } | |
| 244 | + // 修改的提交 | |
| 245 | + if (this.form.id != null) { | |
| 246 | + updateMerchant(this.form).then(response => { | |
| 247 | + this.msgSuccess("修改成功"); | |
| 248 | + this.open = false; | |
| 249 | + this.getList(); | |
| 250 | + }); | |
| 251 | + return; | |
| 252 | + } | |
| 253 | + // 添加的提交 | |
| 254 | + createMerchant(this.form).then(response => { | |
| 255 | + this.msgSuccess("新增成功"); | |
| 256 | + this.open = false; | |
| 257 | + this.getList(); | |
| 258 | + }); | |
| 259 | + }); | |
| 260 | + }, | |
| 261 | + /** 删除按钮操作 */ | |
| 262 | + handleDelete(row) { | |
| 263 | + const id = row.id; | |
| 264 | + this.$confirm('是否确认删除支付商户信息编号为"' + id + '"的数据项?', "警告", { | |
| 265 | + confirmButtonText: "确定", | |
| 266 | + cancelButtonText: "取消", | |
| 267 | + type: "warning" | |
| 268 | + }).then(function() { | |
| 269 | + return deleteMerchant(id); | |
| 270 | + }).then(() => { | |
| 271 | + this.getList(); | |
| 272 | + this.msgSuccess("删除成功"); | |
| 273 | + }) | |
| 274 | + }, | |
| 275 | + /** 导出按钮操作 */ | |
| 276 | + handleExport() { | |
| 277 | + // 处理查询参数 | |
| 278 | + let params = {...this.queryParams}; | |
| 279 | + params.pageNo = undefined; | |
| 280 | + params.pageSize = undefined; | |
| 281 | + this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime'); | |
| 282 | + // 执行导出 | |
| 283 | + this.$confirm('是否确认导出所有支付商户信息数据项?', "警告", { | |
| 284 | + confirmButtonText: "确定", | |
| 285 | + cancelButtonText: "取消", | |
| 286 | + type: "warning" | |
| 287 | + }).then(function() { | |
| 288 | + return exportMerchantExcel(params); | |
| 289 | + }).then(response => { | |
| 290 | + this.downloadExcel(response, '支付商户信息.xls'); | |
| 291 | + }) | |
| 292 | + } | |
| 293 | + } | |
| 294 | +}; | |
| 295 | +</script> | ... | ... |
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayMerchantDO.java
| ... | ... | @@ -2,6 +2,8 @@ package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| 4 | 4 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 5 | +import com.baomidou.mybatisplus.annotation.FieldFill; | |
| 6 | +import com.baomidou.mybatisplus.annotation.TableField; | |
| 5 | 7 | import com.baomidou.mybatisplus.annotation.TableId; |
| 6 | 8 | import com.baomidou.mybatisplus.annotation.TableName; |
| 7 | 9 | import lombok.*; |
| ... | ... | @@ -29,7 +31,9 @@ public class PayMerchantDO extends BaseDO { |
| 29 | 31 | /** |
| 30 | 32 | * 商户号 |
| 31 | 33 | * 例如说,M233666999 |
| 34 | + * 只有新增时插入,不允许修改 | |
| 32 | 35 | */ |
| 36 | + @TableField(fill = FieldFill.INSERT) | |
| 33 | 37 | private String no; |
| 34 | 38 | /** |
| 35 | 39 | * 商户全称 | ... | ... |
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/PayErrorCodeCoreConstants.java
| ... | ... | @@ -28,4 +28,8 @@ public interface PayErrorCodeCoreConstants { |
| 28 | 28 | ErrorCode PAY_ORDER_EXTENSION_STATUS_IS_NOT_WAITING = new ErrorCode(1007003001, "支付交易拓展单不处于待支付"); |
| 29 | 29 | ErrorCode PAY_ORDER_EXTENSION_STATUS_IS_NOT_SUCCESS = new ErrorCode(1007003002, "支付订单不处于已支付"); |
| 30 | 30 | |
| 31 | + /** | |
| 32 | + * ========== 支付商户信息 1-007-004-000 ========== | |
| 33 | + */ | |
| 34 | + ErrorCode MERCHANT_NOT_EXISTS = new ErrorCode(1007004000, "支付商户信息不存在"); | |
| 31 | 35 | } | ... | ... |