Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

weifanli 3 лет назад
Родитель
Сommit
d6d1f411a2
23 измененных файлов с 519 добавлено и 48 удалено
  1. 4 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseHomeworkController.java
  2. 1 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/HomeController.java
  3. 10 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicAlbumController.java
  4. 11 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java
  5. 7 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicTagController.java
  6. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserWithdrawalCallbackDao.java
  7. 0 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/StudentMusicSheetOrderSearch.java
  8. 390 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserWithdrawalCallback.java
  9. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalCallbackService.java
  10. 0 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalService.java
  11. 3 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/HomeServiceImpl.java
  12. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupMemberServiceImpl.java
  13. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  14. 18 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalCallbackServiceImpl.java
  15. 0 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalServiceImpl.java
  16. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherLiveCourseInfoVo.java
  17. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  18. 0 1
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/SysSuggestionController.java
  19. 6 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupController.java
  20. 3 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java
  21. 0 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SysSuggestionController.java
  22. 15 10
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/WithdrawController.java
  23. 7 2
      toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/lingxinpay/Withdraw.java

+ 4 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseHomeworkController.java

@@ -15,6 +15,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -32,6 +33,7 @@ public class CourseHomeworkController extends BaseController {
 
 	@ApiOperation(value = "课后作业-列表", httpMethod = "POST", consumes = "application/json", produces = "application/json")
 	@PostMapping(value = "/list", consumes = "application/json", produces = "application/json")
+	@PreAuthorize("@pcs.hasPermissions('homework/list')")
 	public HttpResponseResult<PageInfo<CourseHomeworkVo>> list(@Valid @RequestBody HomeworkAdminSearch query) {
 		query.setDecorate(YesOrNoEnum.YES);
 		query.setCourseStatus(CourseScheduleEnum.COMPLETE);
@@ -42,6 +44,7 @@ public class CourseHomeworkController extends BaseController {
 
 	@ApiOperation(value = "首页-我的课程-课程详情(陪练课)-课后作业信息详情",notes = "传入课程编号ID")
 	@GetMapping(value = "/detail/{courseId}")
+	@PreAuthorize("@pcs.hasPermissions('homework/detail')")
 	public HttpResponseResult<CourseHomeworkDetailVo> detail(@ApiParam(value = "课程编号ID", required = true)
 															 @PathVariable("courseId") Long courseId) {
 		return succeed(courseHomeworkService.getCourseHomeworkDetailByCourseId(courseId));
@@ -51,6 +54,7 @@ public class CourseHomeworkController extends BaseController {
 
 	@PostMapping(value = "/teacherSend")
 	@ApiOperation(value = "发送老师未评价和未布置作业消息")
+	@PreAuthorize("@pcs.hasPermissions('homework/teacherSend')")
 	public HttpResponseResult<Object> sendTodayNotRepliedAndNotDecorateHomework() {
 		courseScheduleService.sendTodayNotRepliedAndNotDecorateHomework();
 		return HttpResponseResult.succeed();

+ 1 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/HomeController.java

@@ -51,6 +51,7 @@ public class HomeController extends BaseController {
 
     @ApiOperation(value = "首页曲目点播数据")
     @PostMapping("/musicSheet")
+    @PreAuthorize("@pcs.hasPermissions('home/musicSheet')")
     public HttpResponseResult<HomeMusicSheetVo> musicSheet() {
         return succeed(musicSheetService.getMusicSheetHome());
     }

+ 10 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicAlbumController.java

@@ -18,6 +18,7 @@ import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -41,6 +42,7 @@ public class MusicAlbumController extends BaseController {
 
 	@ApiOperation(value = "新增", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/create", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/album/create')")
     public HttpResponseResult<Object> create(@Valid @RequestBody MusicAlbum musicAlbum) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -57,6 +59,7 @@ public class MusicAlbumController extends BaseController {
 
     @ApiOperation(value = "删除", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping("/delete/{id}")
+    @PreAuthorize("@pcs.hasPermissions('music/album/delete')")
     public Object delete(@PathVariable Long id) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -68,6 +71,7 @@ public class MusicAlbumController extends BaseController {
 
     @ApiOperation(value = "修改", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/update", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/album/update')")
     public HttpResponseResult<Object> update(@Valid @RequestBody MusicAlbum musicAlbum) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -87,6 +91,7 @@ public class MusicAlbumController extends BaseController {
 
     @ApiOperation(value = "分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/list", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/album/list')")
     public HttpResponseResult<PageInfo<MusicAlbumVo>> list(@RequestBody MusicAlbumSearch query) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -101,6 +106,7 @@ public class MusicAlbumController extends BaseController {
      */
     @PostMapping("/state/{id}")
     @ApiOperation(value = "启用/停用", notes = "传入id")
+    @PreAuthorize("@pcs.hasPermissions('music/album/state')")
     public HttpResponseResult<Boolean> state(@ApiParam(value = "专辑编号", required = true)  @PathVariable Long id) {
         if (StringUtil.isEmpty(id)) {
             return failed("参数不能为空");
@@ -114,6 +120,7 @@ public class MusicAlbumController extends BaseController {
      */
     @PostMapping(value = "/detail", consumes="application/json", produces="application/json")
     @ApiOperation(value = "专辑详情",  httpMethod="POST", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/album/detail')")
     public HttpResponseResult<AlbumDetailVo> detail(@Valid @RequestBody MusicAlbumDetailSearch query) {
 
         query.setType(2);
@@ -127,6 +134,7 @@ public class MusicAlbumController extends BaseController {
      */
     @PostMapping(value = "/detail/canAddMusicSheet", consumes="application/json", produces="application/json")
     @ApiOperation(value = "专辑详情能新增的曲目列表",  httpMethod="POST", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/album/detail/canAddMusicSheet')")
     public HttpResponseResult<AlbumDetailVo> detailAddMusicSheet(@Valid @RequestBody MusicAlbumDetailSearch query) {
 
         query.setType(1);
@@ -141,6 +149,7 @@ public class MusicAlbumController extends BaseController {
      */
     @PostMapping(value = "/detail/delMusicSheet" ,consumes="application/json", produces="application/json")
     @ApiOperation(value = "专辑详情删除曲目列表",  httpMethod="POST", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/album/detail/delMusicSheet')")
     public HttpResponseResult<Boolean> detailDelMusicSheet(@Valid @RequestBody MusicAlbumSheetDto query) {
         if (StringUtil.isEmpty(query.getAlbumId())) {
             return failed("专辑编号ID不能为空");
@@ -158,6 +167,7 @@ public class MusicAlbumController extends BaseController {
      */
     @PostMapping(value = "/detail/addMusicSheet",consumes="application/json", produces="application/json")
     @ApiOperation(value = "专辑详情添加曲目列表",  httpMethod="POST", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/album/detail/addMusicSheet')")
     public HttpResponseResult<Boolean> detailAddMusicSheet(@Valid @RequestBody MusicAlbumSheetDto query) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {

+ 11 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java

@@ -24,6 +24,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -54,6 +55,7 @@ public class MusicSheetController extends BaseController {
      */
     @GetMapping("/detail/{id}")
     @ApiOperation(value = "详情", notes = "传入id")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/detail')")
     public HttpResponseResult<MusicSheetDetailVo> detail(@ApiParam(value = "曲谱编号", required = true) @PathVariable("id") Long id) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -64,6 +66,7 @@ public class MusicSheetController extends BaseController {
 
 	@ApiOperation(value = "新增", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/create", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/create')")
     public HttpResponseResult<Object> create(@Valid @RequestBody MusicSheetDto musicSheetDto) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -101,6 +104,7 @@ public class MusicSheetController extends BaseController {
 
     @ApiOperation(value = "删除", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping("/delete/{id}")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/delete')")
     public Object delete(@PathVariable Long id) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -117,6 +121,7 @@ public class MusicSheetController extends BaseController {
 
     @ApiOperation(value = "修改", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/update", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/update')")
     public HttpResponseResult<Object> update(@Valid @RequestBody MusicSheetDto musicSheet) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -141,6 +146,7 @@ public class MusicSheetController extends BaseController {
 
     @ApiOperation(value = "分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/list", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/list')")
     public HttpResponseResult<PageInfo<MusicSheetVo>> list(@RequestBody MusicSheetSearch query) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -157,6 +163,7 @@ public class MusicSheetController extends BaseController {
      */
     @PostMapping("/state/{id}")
     @ApiOperation(value = "启用/停用", notes = "传入id")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/state')")
     public HttpResponseResult<Boolean> state(@ApiParam(value = "曲目编号", required = true)  @PathVariable Long id) {
         if (StringUtil.isEmpty(id)) {
             return failed("参数不能为空");
@@ -169,6 +176,7 @@ public class MusicSheetController extends BaseController {
      */
     @PostMapping(value = "/student", consumes="application/json", produces="application/json")
     @ApiOperation(value = "学生详情-乐谱", httpMethod="POST", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/student')")
     public HttpResponseResult<PageInfo<StudentMusicSheetOrderVo>> student(@Valid @RequestBody StudentMusicSheetOrderSearch query) {
         return succeed(PageUtil.pageInfo(musicSheetService.selectStudentOrderPage(PageUtil.getPage(query),query)));
     }
@@ -179,6 +187,7 @@ public class MusicSheetController extends BaseController {
      */
     @PostMapping(value = "/teacher", consumes="application/json", produces="application/json")
     @ApiOperation(value = "老师详情-乐谱", httpMethod="POST", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/teacher')")
     public HttpResponseResult<PageInfo<TeacherMusicSheetVo>> teacher(@Valid @RequestBody TeacherMusicSheetSearch query) {
         return succeed(PageUtil.pageInfo(musicSheetService.selectTeacherPage(PageUtil.getPage(query),query)));
     }
@@ -188,6 +197,7 @@ public class MusicSheetController extends BaseController {
      */
     @PostMapping(value = "/audit/list", consumes="application/json", produces="application/json")
     @ApiOperation(value = "审核中心-乐谱审核列表", httpMethod="POST", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/audit/list')")
     public HttpResponseResult<PageInfo<TeacherMusicSheetVo>> audit(@RequestBody TeacherMusicSheetAuditSearch query) {
         return succeed(PageUtil.pageInfo(musicSheetService.selectAuditPage(PageUtil.getPage(query),query)));
     }
@@ -197,6 +207,7 @@ public class MusicSheetController extends BaseController {
      */
     @PostMapping(value = "/audit", consumes="application/json", produces="application/json")
     @ApiOperation(value = "审核中心-乐谱审核", httpMethod="POST", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/audit')")
     public HttpResponseResult<Boolean> audit(@Valid @RequestBody TeacherMusicSheetAuditReq param) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {

+ 7 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicTagController.java

@@ -15,6 +15,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -34,6 +35,7 @@ public class MusicTagController extends BaseController {
      */
     @GetMapping("/detail/{id}")
 	@ApiOperation(value = "详情", notes = "传入id")
+	@PreAuthorize("@pcs.hasPermissions('MusicTag/detail')")
     public HttpResponseResult<MusicTagVo> detail(@ApiParam(value = "标签编号", required = true) @PathVariable("id") Long id) {
     	return succeed(musicTagService.detail(id));
 	}
@@ -43,6 +45,7 @@ public class MusicTagController extends BaseController {
      */
     @PostMapping(value = "/page", consumes="application/json", produces="application/json")
     @ApiOperation(value = "查询分页", httpMethod="POST", consumes="application/json", produces="application/json")
+	@PreAuthorize("@pcs.hasPermissions('MusicTag/page')")
     public HttpResponseResult<PageInfo<MusicTagVo>> page(@Valid @RequestBody MusicTagSearch query) {
 		IPage<MusicTagVo> pages = musicTagService.selectPage(PageUtil.getPage(query), query);
 		return succeed(PageUtil.pageInfo(pages));
@@ -64,6 +67,7 @@ public class MusicTagController extends BaseController {
 	 */
 	@PostMapping(value = "/save",  consumes="application/json", produces="application/json")
 	@ApiOperation(value = "新增", httpMethod="POST", consumes="application/json", produces="application/json")
+	@PreAuthorize("@pcs.hasPermissions('MusicTag/save')")
 	public HttpResponseResult<Boolean> save(@Validated(MusicTagSaveDto.Create.class) @RequestBody MusicTagSaveDto musicTagSaveDto) {
 		if (musicTagSaveDto.getParentTagId() != null && musicTagSaveDto.getParentTagId() != 0) {
 			MusicTag musicTag = musicTagService.getById(musicTagSaveDto.getParentTagId());
@@ -79,6 +83,7 @@ public class MusicTagController extends BaseController {
 	 */
 	@PostMapping(value =  "/update",  consumes="application/json", produces="application/json")
 	@ApiOperation(value = "修改", httpMethod="POST", consumes="application/json", produces="application/json")
+	@PreAuthorize("@pcs.hasPermissions('MusicTag/update')")
 	public HttpResponseResult<Boolean> update(@Validated(MusicTagSaveDto.Update.class) @RequestBody MusicTagSaveDto musicTagSaveDto) {
 		if (musicTagSaveDto.getParentTagId() != null && musicTagSaveDto.getParentTagId() != 0) {
 			MusicTag musicTag = musicTagService.getById(musicTagSaveDto.getParentTagId());
@@ -94,6 +99,7 @@ public class MusicTagController extends BaseController {
 	 */
 	@PostMapping("/remove/{id}")
 	@ApiOperation(value = "逻辑删除", notes = "传入id")
+	@PreAuthorize("@pcs.hasPermissions('MusicTag/remove')")
 	public HttpResponseResult<Boolean> remove(@ApiParam(value = "标签编号", required = true) @PathVariable Long id) {
         if (StringUtil.isEmpty(id)) {
 			return failed("参数不能为空");
@@ -106,6 +112,7 @@ public class MusicTagController extends BaseController {
 	 */
 	@PostMapping("/state/{id}")
 	@ApiOperation(value = "启用/停用", notes = "传入id")
+	@PreAuthorize("@pcs.hasPermissions('MusicTag/state')")
 	public HttpResponseResult<Boolean> state(@ApiParam(value = "标签编号", required = true)  @PathVariable Long id) {
 		if (StringUtil.isEmpty(id)) {
 			return failed("参数不能为空");

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserWithdrawalCallbackDao.java

@@ -0,0 +1,7 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.entity.UserWithdrawalCallback;
+
+public interface UserWithdrawalCallbackDao extends BaseMapper<UserWithdrawalCallback> {
+}

+ 0 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/StudentMusicSheetOrderSearch.java

@@ -46,9 +46,6 @@ public class StudentMusicSheetOrderSearch extends QueryInfo {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;
 
-    @ApiModelProperty(value = "订单状态 WAIT_PAY 待支付 PAYING 支付中  PAID 已付款 CLOSE 已关闭", hidden = true)
-    private YesOrNoEnum orderStatus = YesOrNoEnum.YES;
-
     @ApiModelProperty(value = "假删除 0 : 未删除 1:已删除", hidden = true)
     private Boolean delFlag = false;
 
@@ -119,11 +116,4 @@ public class StudentMusicSheetOrderSearch extends QueryInfo {
         this.delFlag = delFlag;
     }
 
-    public YesOrNoEnum getOrderStatus() {
-        return orderStatus;
-    }
-
-    public void setOrderStatus(YesOrNoEnum orderStatus) {
-        this.orderStatus = orderStatus;
-    }
 }

+ 390 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserWithdrawalCallback.java

@@ -0,0 +1,390 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.yonge.cooleshow.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+/**
+ * @Description: 提现回调
+ * @Author: cy
+ * @Date: 2022/5/10
+ */
+@ApiModel(value = "user_withdrawal_callback-提现回调表")
+public class UserWithdrawalCallback extends BaseEntity {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键id")
+    private Long id;
+
+    @TableField("order_no_")
+    @ApiModelProperty(value = "众薪平台唯一订单号")
+    private String orderNo;
+
+    @TableField("out_member_no_")
+    @ApiModelProperty(value = "商户号")
+    private String outMemberNo;
+
+    @TableField("outer_order_no_")
+    @ApiModelProperty(value = "商户唯一订单号")
+    private String outerOrderNo;
+
+    @TableField("additional_charge_")
+    @ApiModelProperty(value = "个人附加费(单位为:分)")
+    private Integer additionalCharge;
+
+    @TableField("actual_amount_")
+    @ApiModelProperty(value = "实发金额(单位为:分,范围:1~10000000000)")
+    private Integer actualAmount;
+
+    @TableField("company_charge_")
+    @ApiModelProperty(value = "企业附加费(单位为:分)")
+    private Integer companyCharge;
+
+    @TableField("company_service_fee_")
+    @ApiModelProperty(value = "公司服务费汇总=企业个税+企业附加费+企业服务费(单位为:分)")
+    private Integer companyServiceFee;
+
+    @TableField("company_tax_")
+    @ApiModelProperty(value = "企业承担个税(单位为:分)")
+    private Integer companyTax;
+
+    @TableField("service_charge_")
+    @ApiModelProperty(value = "企业服务费(单位为:分)")
+    private Integer serviceCharge;
+
+    @TableField("tax_fee_")
+    @ApiModelProperty(value = "个人承担个税(单位为:分)")
+    private Integer taxFee;
+
+    @TableField("person_service_fee_")
+    @ApiModelProperty(value = "个人服务费汇总=个人个税+个人附加费(单位为:分)")
+    private Integer personServiceFee;
+
+    @TableField("predict_amount_")
+    @ApiModelProperty(value = "应发金额(单位为:分,范围:1~10000000000)")
+    private Integer predictAmount;
+
+    @TableField("salary_type_")
+    @ApiModelProperty(value = "发放类型(0:个人经营所得)")
+    private String salaryType;
+
+    @TableField("status_")
+    @ApiModelProperty(value = "交易状态(0:交易中;1:交易成功;2:交易失败)")
+    private String status;
+
+    @TableField("create_time_")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField("end_time_")
+    @ApiModelProperty(value = "完成时间")
+    private Date endTime;
+
+    @TableField("error_code_")
+    @ApiModelProperty(value = "支付失败时返回")
+    private String errorCode;
+
+    @TableField("error_msg_")
+    @ApiModelProperty(value = "支付失败时返回")
+    private String errorMsg;
+
+    @TableField("mobile_")
+    @ApiModelProperty(value = "收款方电话")
+    private String mobile;
+
+    @TableField("certificate_no_")
+    @ApiModelProperty(value = "收款方身份证号")
+    private String certificateNo;
+
+    @TableField("name_")
+    @ApiModelProperty(value = "收款方姓名(银行预留姓名等)")
+    private String name;
+
+    @TableField("card_attribute_")
+    @ApiModelProperty(value = "卡属性:(C:对私)")
+    private String cardAttribute;
+
+    @TableField("card_type_")
+    @ApiModelProperty(value = "卡类型:DC借记卡")
+    private String cardType;
+
+    @TableField("pay_account_")
+    @ApiModelProperty(value = "收款方账号(银行卡号/支付宝账号/open_id)以实际业务为准")
+    private String payAccount;
+
+    @TableField("pay_type_")
+    @ApiModelProperty(value = "支付类型(1:银行卡,2:支付宝,4:微信)以实际业务为准")
+    private String payType;
+
+    @TableField("project_name_")
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+    @TableField("remark_")
+    @ApiModelProperty(value = "备注(扩展字段)只针对测试环境:只要参数合规都会返回交易成功,如果想要模拟交易失败,该字段值中含有“失败”二字即会失败。")
+    private String remark;
+
+    @TableField("service_")
+    @ApiModelProperty(value = "接口名称: bpotop.zx.pay.order")
+    private String service;
+
+    @TableField("sign_type_")
+    @ApiModelProperty(value = "签名类型:RSA")
+    private String signType;
+
+    @TableField("notify_url_")
+    @ApiModelProperty(value = "回调地址")
+    private String notifyUrl;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public String getOutMemberNo() {
+        return outMemberNo;
+    }
+
+    public void setOutMemberNo(String outMemberNo) {
+        this.outMemberNo = outMemberNo;
+    }
+
+    public String getOuterOrderNo() {
+        return outerOrderNo;
+    }
+
+    public void setOuterOrderNo(String outerOrderNo) {
+        this.outerOrderNo = outerOrderNo;
+    }
+
+    public Integer getAdditionalCharge() {
+        return additionalCharge;
+    }
+
+    public void setAdditionalCharge(Integer additionalCharge) {
+        this.additionalCharge = additionalCharge;
+    }
+
+    public Integer getActualAmount() {
+        return actualAmount;
+    }
+
+    public void setActualAmount(Integer actualAmount) {
+        this.actualAmount = actualAmount;
+    }
+
+    public Integer getCompanyCharge() {
+        return companyCharge;
+    }
+
+    public void setCompanyCharge(Integer companyCharge) {
+        this.companyCharge = companyCharge;
+    }
+
+    public Integer getCompanyServiceFee() {
+        return companyServiceFee;
+    }
+
+    public void setCompanyServiceFee(Integer companyServiceFee) {
+        this.companyServiceFee = companyServiceFee;
+    }
+
+    public Integer getCompanyTax() {
+        return companyTax;
+    }
+
+    public void setCompanyTax(Integer companyTax) {
+        this.companyTax = companyTax;
+    }
+
+    public Integer getServiceCharge() {
+        return serviceCharge;
+    }
+
+    public void setServiceCharge(Integer serviceCharge) {
+        this.serviceCharge = serviceCharge;
+    }
+
+    public Integer getTaxFee() {
+        return taxFee;
+    }
+
+    public void setTaxFee(Integer taxFee) {
+        this.taxFee = taxFee;
+    }
+
+    public Integer getPersonServiceFee() {
+        return personServiceFee;
+    }
+
+    public void setPersonServiceFee(Integer personServiceFee) {
+        this.personServiceFee = personServiceFee;
+    }
+
+    public Integer getPredictAmount() {
+        return predictAmount;
+    }
+
+    public void setPredictAmount(Integer predictAmount) {
+        this.predictAmount = predictAmount;
+    }
+
+    public String getSalaryType() {
+        return salaryType;
+    }
+
+    public void setSalaryType(String salaryType) {
+        this.salaryType = salaryType;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getErrorCode() {
+        return errorCode;
+    }
+
+    public void setErrorCode(String errorCode) {
+        this.errorCode = errorCode;
+    }
+
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    public void setErrorMsg(String errorMsg) {
+        this.errorMsg = errorMsg;
+    }
+
+    public String getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+
+    public String getCertificateNo() {
+        return certificateNo;
+    }
+
+    public void setCertificateNo(String certificateNo) {
+        this.certificateNo = certificateNo;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCardAttribute() {
+        return cardAttribute;
+    }
+
+    public void setCardAttribute(String cardAttribute) {
+        this.cardAttribute = cardAttribute;
+    }
+
+    public String getCardType() {
+        return cardType;
+    }
+
+    public void setCardType(String cardType) {
+        this.cardType = cardType;
+    }
+
+    public String getPayAccount() {
+        return payAccount;
+    }
+
+    public void setPayAccount(String payAccount) {
+        this.payAccount = payAccount;
+    }
+
+    public String getPayType() {
+        return payType;
+    }
+
+    public void setPayType(String payType) {
+        this.payType = payType;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getService() {
+        return service;
+    }
+
+    public void setService(String service) {
+        this.service = service;
+    }
+
+    public String getSignType() {
+        return signType;
+    }
+
+    public void setSignType(String signType) {
+        this.signType = signType;
+    }
+
+    public String getNotifyUrl() {
+        return notifyUrl;
+    }
+
+    public void setNotifyUrl(String notifyUrl) {
+        this.notifyUrl = notifyUrl;
+    }
+}

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalCallbackService.java

@@ -0,0 +1,8 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.entity.UserWithdrawalCallback;
+
+public interface UserWithdrawalCallbackService extends IService<UserWithdrawalCallback> {
+    void insertCallback(UserWithdrawalCallback callback);
+}

+ 0 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalService.java

@@ -68,11 +68,4 @@ public interface UserWithdrawalService extends IService<UserWithdrawal>  {
 	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.util.List<com.yonge.toolset.utils.easyexcel.ErrMsg>>
 	 */
     void importExcel(List<ExcelDataReaderProperty<UserWithdrawalExport>> dataList, Long userId);
-
-	/**
-	 * @Description: 提现成功回调
-	 * @Author: cy
-	 * @Date: 2022/5/9
-	 */
-	void withdrawSuccess(Map<String, Object> withdrawRecord);
 }

+ 3 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/HomeServiceImpl.java

@@ -18,10 +18,7 @@ import org.springframework.stereotype.Service;
 
 import java.time.LocalDate;
 import java.time.temporal.TemporalAdjusters;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -135,7 +132,7 @@ public class HomeServiceImpl implements HomeService {
         String[] split = dateTimeStr.split("-");
         int year = Integer.parseInt(split[0]);
         //获取月
-        int month = isYear ? 1 : Integer.parseInt(split[1]);;
+        int month = isYear ? 1 : Integer.parseInt(split[1]);
         LocalDate firstDate;
         LocalDate endDate;
         CourseHomeVo result = new CourseHomeVo();
@@ -196,6 +193,7 @@ public class HomeServiceImpl implements HomeService {
         result.setTotalDoneCount(reduceFunc.apply(CourseHomeVo.CourseHomeInfoVo::getDoneCount));
         result.setTotalUndoneCount(reduceFunc.apply(CourseHomeVo.CourseHomeInfoVo::getUndoneCount));
         result.setTotalCount(result.getTotalDoneCount() + result.getTotalUndoneCount());
+        result.getCourseHomeInfoList().sort(Comparator.comparing(CourseHomeVo.CourseHomeInfoVo::getDate));
         return result;
     }
 

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupMemberServiceImpl.java

@@ -57,8 +57,8 @@ public class ImGroupMemberServiceImpl extends ServiceImpl<ImGroupMemberDao, ImGr
     public List<GroupMember> initGroupMember(String imGroupId, Long userId, Boolean isAdmin, ImGroupMember.ImGroupMemberRoleType roleType) throws Exception {
         //记录群成员
         BasicUserInfo basicUserInfo = teacherDao.getBasicUserInfo(userId);
-        String username = roleType== ImGroupMember.ImGroupMemberRoleType.TEACHER?basicUserInfo.getRealName():basicUserInfo.getUsername();
-        ImGroupMember imGroupMember = new ImGroupMember(imGroupId, userId,basicUserInfo.getAvatar(), username, isAdmin, roleType);
+//        String username = roleType== ImGroupMember.ImGroupMemberRoleType.TEACHER?basicUserInfo.getRealName():basicUserInfo.getUsername();
+        ImGroupMember imGroupMember = new ImGroupMember(imGroupId, userId,basicUserInfo.getAvatar(), basicUserInfo.getUsername(), isAdmin, roleType);
         Date date = new Date();
         imGroupMember.setCreateTime(date);
         imGroupMember.setUpdateTime(date);

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java

@@ -267,6 +267,9 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
             musicSheet.setAuditStatus(param.getAuthStatus());
             musicSheet.setUpdateBy(userId);
             musicSheet.setUpdateTime(new Date());
+            if (AuthStatusEnum.PASS.getCode().equals(param.getAuthStatus().getCode())) {
+                musicSheet.setState(YesOrNoEnum.YES);
+            }
             flag =  this.updateById(musicSheet);
         }
 

+ 18 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalCallbackServiceImpl.java

@@ -0,0 +1,18 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.dao.UserWithdrawalCallbackDao;
+import com.yonge.cooleshow.biz.dal.entity.UserWithdrawalCallback;
+import com.yonge.cooleshow.biz.dal.service.UserWithdrawalCallbackService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserWithdrawalCallbackServiceImpl extends ServiceImpl<UserWithdrawalCallbackDao, UserWithdrawalCallback> implements UserWithdrawalCallbackService {
+    private final static Logger log = LoggerFactory.getLogger(UserWithdrawalCallbackServiceImpl.class);
+
+    public void insertCallback(UserWithdrawalCallback callback) {
+        baseMapper.insert(callback);
+    }
+}

+ 0 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalServiceImpl.java

@@ -278,14 +278,4 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
         }
         return subtract;
     }
-
-    /**
-     * @Description: 提现成功回调
-     * @Author: cy
-     * @Date: 2022/5/9
-     */
-    @Override
-    public void withdrawSuccess(Map<String, Object> withdrawRecord) {
-        baseMapper.withdrawSuccess(withdrawRecord);
-    }
 }

+ 22 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherLiveCourseInfoVo.java

@@ -20,6 +20,12 @@ public class TeacherLiveCourseInfoVo implements Serializable {
     @ApiModelProperty(value = "名称")
     private String courseGroupName;
 
+    @ApiModelProperty(value = "课程id")
+    private Long courseId;
+
+    @ApiModelProperty(value = "课堂编号")
+    private Integer classNum;
+
     @ApiModelProperty(value = "声部名称")
     private String subjectName;
 
@@ -114,4 +120,20 @@ public class TeacherLiveCourseInfoVo implements Serializable {
     public void setImGroupId(String imGroupId) {
         this.imGroupId = imGroupId;
     }
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public Integer getClassNum() {
+        return classNum;
+    }
+
+    public void setClassNum(Integer classNum) {
+        this.classNum = classNum;
+    }
 }

+ 2 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -122,6 +122,8 @@
         select
         b.id_ as courseGroupId,
         b.name_ as courseGroupName,
+        a.id_ as courseId,
+        a.class_num_ as classNum,
         s.name_ as subjectName,
         a.start_time_ as startTime,
         a.end_time_ as endTime,

+ 0 - 1
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/SysSuggestionController.java

@@ -26,7 +26,6 @@ public class SysSuggestionController extends BaseController {
 
     @ApiOperation(value = "新增")
     @RequestMapping("sysSuggestion/add")
-    @PreAuthorize("@pcs.hasPermissions('sysSuggestion/add')")
     public Object add(SysSuggestion sysSuggestion) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {

+ 6 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupController.java

@@ -74,5 +74,11 @@ public class ImGroupController extends BaseController {
     public HttpResponseResult<Boolean> update(@Valid @RequestBody ImGroup imGroup) throws Exception {
         return succeed(imGroupService.updateById(imGroup));
     }
+
+    @ApiOperation("获取指定用户的群列表")
+    @PostMapping(value = "/queryTeacherGroup")
+    public HttpResponseResult<List<ImGroupResultDto>> queryTeacherGroup(@RequestBody ImGroupSearchDto imGroupSearchDto) throws Exception {
+        return succeed(imGroupService.queryTeacherFun(imGroupSearchDto));
+    }
 }
 

+ 3 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java

@@ -112,6 +112,9 @@ public class MusicSheetController extends BaseController {
         }
         // 设置只查老师用户 状态为启用
         query.setCreateBy(sysUser.getId());
+        if (AuthStatusEnum.PASS.getCode().equals(query.getAuditStatus().getCode())) {
+            query.setState(YesOrNoEnum.YES);
+        }
 
         IPage<MusicSheetVo> musicSheetVoIPage = musicSheetService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(musicSheetVoIPage));

+ 0 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SysSuggestionController.java

@@ -26,7 +26,6 @@ public class SysSuggestionController extends BaseController {
 
     @ApiOperation(value = "新增")
     @RequestMapping("sysSuggestion/add")
-    @PreAuthorize("@pcs.hasPermissions('sysSuggestion/add')")
     public Object add(SysSuggestion sysSuggestion) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {

+ 15 - 10
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/WithdrawController.java

@@ -1,10 +1,13 @@
 package com.yonge.cooleshow.teacher.controller;
 
 import com.alibaba.fastjson.JSONObject;
-import com.yonge.cooleshow.biz.dal.service.UserWithdrawalService;
+import com.yonge.cooleshow.biz.dal.entity.UserWithdrawalCallback;
+import com.yonge.cooleshow.biz.dal.service.UserWithdrawalCallbackService;
 import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.thirdparty.lingxinpay.RSA;
 import com.yonge.toolset.thirdparty.lingxinpay.Withdraw;
+import com.yonge.toolset.utils.json.JsonUtil;
 import io.swagger.annotations.Api;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -31,7 +34,7 @@ public class WithdrawController extends BaseController {
     private String privateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANf/X1s2raYQAmY5VY929XqOIRESFlpLzWbltA08EI2i0jnJY3/kcCpo1sCHqkyWpDFGRgM1WYE90ayzEpS6EdZpyJ2/N5JFJzx4wMil5KHLdtQUmVv9si+xuYNOKfJW6Xn6zI/Wh81J1+hMlUY4WigU5Qci7DjdOjg5OD6e5DO3AgMBAAECgYEAor9ENhII3SsK48MneKWFaQZWW+po9ThQV8uT0rUDM/UOuYPIeMDC0vGTfhW6d2K57Haqohg8jGjr51g2E+HvNV+fARaBfCwy00DGcxjI6N8gEInj2AppsGV6a0ZtzGBh3BxGhEFV7x3NmTylDk3WkGnkGDqDNyrBUgK0BzCJEmECQQD+gYckYRevVfrZEHDQHRNzzMUlV9/ljA9x8dt0LoCNbd/wFvs0Ekjhas/2lUBkewEd4Kr0jaFcYzlUO/qihcpNAkEA2UP5W44yLuIo8ttPpdsfkH/8Ax64IywQHrXWq+thH7I91VwY2vomTduw8x0PafZtp8xryF3LixTZwQ7gsYbwEwJAQbb8SB5x2SogPVALcREw5qOm+/92pnTFwCws+BDRzLLkMcAdWNKn0tybmhXrrIY+QZKzUbYIRiywrtlV3AUjuQJBAJbnFnfX4NUdchGT79Mjyd2kdxZ3rK+JOD0MUWkhWFkahMX/bKgTXK1xLIr/ISiY53rHigkl1Gzqc4Aa5EeJkI8CQFlzlBOfoVnq3fPMZCCZcZSm97L12MgHho0AzoNj9sw9YYn9WPM7bw2HT8GUheiU3aiZGCyGGpYuVHMiBGa7l9U=";
 
     @Autowired
-    private UserWithdrawalService userWithdrawalService;
+    private UserWithdrawalCallbackService callbackService;
 
     /**
      * 异步回调接收
@@ -41,7 +44,7 @@ public class WithdrawController extends BaseController {
      * @return
      */
     @PostMapping("/callback")
-    public String test(@RequestBody String content, HttpServletRequest request) {
+    public HttpResponseResult<Object> callback(@RequestBody String content, HttpServletRequest request) {
         log.info("交易回调请求地址:{} 请求参数:{}", request.getRemoteAddr(), content);
         try {
             if (StringUtils.isBlank(content)) {
@@ -51,21 +54,23 @@ public class WithdrawController extends BaseController {
             String jsonStr = RSA.decryptPri((String) map.get("sign"), privateKey);
             log.info("jsonStr:{}", jsonStr);
 
-//            Map<String, Object> withdrawRecord = JSONObject.parseObject(jsonStr);
-//            userWithdrawalService.withdrawSuccess(withdrawRecord);
-            return jsonStr;
+            Map<String, Object> withdrawRecord = JSONObject.parseObject(jsonStr);
+            UserWithdrawalCallback callback = JsonUtil.toJavaObject(withdrawRecord, UserWithdrawalCallback.class);
+            callbackService.insertCallback(callback);
+            return succeed();
         } catch (Exception e) {
             log.error("解密失败e:{}", e);
-            return "failed";
+            return failed();
         }
     }
+
     @GetMapping("/test")
-    public String a(){
+    public String a(String remark) {
         Withdraw withdraw = new Withdraw();
 
         //输入商户订单号
         String outerOrderNo = UUID.randomUUID().toString().substring(0, 12);
-        System.out.println("商户订单号:"+outerOrderNo);
+        System.out.println("商户订单号:" + outerOrderNo);
         //输入收款人手机号
         String name = "何亮";
         //输入收款人姓名
@@ -88,7 +93,7 @@ public class WithdrawController extends BaseController {
         String cardAttribute = "C";
 
         String requestParam = withdraw.withdraw(outerOrderNo, name, mobile, certificateNo, predictAmount, payAccount, cardType,
-                salaryType, projectName, payType, cardAttribute);
+                salaryType, projectName, payType, cardAttribute, remark);
         log.info("单笔请求返回参数:{}", requestParam);
         return requestParam;
     }

+ 7 - 2
toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/lingxinpay/Withdraw.java

@@ -2,6 +2,7 @@ package com.yonge.toolset.thirdparty.lingxinpay;
 
 import com.alibaba.fastjson.JSONObject;
 import com.yonge.toolset.utils.http.HttpUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -39,10 +40,11 @@ public class Withdraw {
      * @param projectName   项目名称
      * @param payType       支付类型(1:银行卡,2:支付宝,4:微信) 以实际业务为准
      * @param cardAttribute 卡属性:(C:对私)
+     * @param remark        备注(扩展字段) 只针对测试环境:只要参数合规都会返回交易成功,如果想要模拟交易失败,该字段值中含有“失败”二字即会失败。
      * @return
      */
     public String withdraw(String outerOrderNo, String name, String mobile, String certificateNo, String predictAmount,
-                           String payAccount, String cardType, String salaryType, String projectName, String payType, String cardAttribute) {
+                           String payAccount, String cardType, String salaryType, String projectName, String payType, String cardAttribute, String remark) {
         Map<String, Object> map = new HashMap<>();
         map.put("outMemberNo", memberNo);
         map.put("outerOrderNo", outerOrderNo);
@@ -63,6 +65,9 @@ public class Withdraw {
         map.put("payType", payType);
         map.put("cardAttribute", cardAttribute);
         map.put("payAccount", payAccount);
+        if (StringUtils.isNotBlank(remark)) {
+            map.put("remark", remark);
+        }
         String jsonStr = JSONObject.toJSONString(map);
 
         //签名
@@ -141,7 +146,7 @@ public class Withdraw {
         String cardAttribute = "C";
 
         String requestParam = withdraw.withdraw(outerOrderNo, name, mobile, certificateNo, predictAmount, payAccount, cardType,
-                salaryType, projectName, payType, cardAttribute);
+                salaryType, projectName, payType, cardAttribute,null);
         logger.info("单笔请求返回参数:{}", requestParam);
     }
 }