فهرست منبع

修改内容:角色操作

shishaosong 1 سال پیش
والد
کامیت
ca29a9415a
41فایلهای تغییر یافته به همراه2648 افزوده شده و 0 حذف شده
  1. 50 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/GameGiftController.java
  2. 54 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/RoleAssignController.java
  3. 52 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/RoleGiftController.java
  4. 54 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/RoleMailController.java
  5. 32 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/RoleOperateController.java
  6. 33 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameGiftAddParam.java
  7. 16 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameGiftListParam.java
  8. 48 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleAssignRecordAddParam.java
  9. 48 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleAssignRecordListParam.java
  10. 38 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleGiftRecordAddParam.java
  11. 50 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleGiftRecordListParam.java
  12. 54 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleInfoAndAgentParam.java
  13. 45 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleInfoParam.java
  14. 35 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleMailRecordAddParam.java
  15. 46 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleMailRecordListParam.java
  16. 80 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleOperateParam.java
  17. 49 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleSysUserAssignParam.java
  18. 66 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameGiftListVO.java
  19. 130 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/RoleAssignRecordListVO.java
  20. 60 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/RoleGiftRecordListVO.java
  21. 54 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/RoleMailRecordListVO.java
  22. 26 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameGiftService.java
  23. 29 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IRoleAssignRecordService.java
  24. 27 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IRoleGiftRecordService.java
  25. 27 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IRoleMailRecordService.java
  26. 18 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IRoleOperateService.java
  27. 118 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameGiftServiceImpl.java
  28. 322 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/RoleAssignRecordServiceImpl.java
  29. 172 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/RoleGiftRecordServiceImpl.java
  30. 149 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/RoleMailRecordServiceImpl.java
  31. 70 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/RoleOperateServiceImpl.java
  32. 69 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameGift.java
  33. 117 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/RoleAssignRecord.java
  34. 89 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/RoleGiftRecord.java
  35. 84 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/RoleMailRecord.java
  36. 157 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/RoleOperate.java
  37. 16 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameGiftMapper.java
  38. 16 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/RoleAssignRecordMapper.java
  39. 16 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/RoleGiftRecordMapper.java
  40. 16 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/RoleMailRecordMapper.java
  41. 16 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/RoleOperateMapper.java

+ 50 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/GameGiftController.java

@@ -0,0 +1,50 @@
+package com.zanxiang.game.module.manage.controller;
+
+import com.zanxiang.erp.security.annotation.PreAuthorize;
+import com.zanxiang.game.module.manage.pojo.params.GameGiftAddParam;
+import com.zanxiang.game.module.manage.pojo.params.GameGiftListParam;
+import com.zanxiang.game.module.manage.pojo.vo.GameGiftListVO;
+import com.zanxiang.game.module.manage.service.IGameGiftService;
+import com.zanxiang.module.util.pojo.ResultVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author shishaosong
+ */
+@Api(tags = {"礼包"})
+@RestController
+@RequestMapping("/game/gift")
+@Slf4j
+public class GameGiftController {
+
+    @Autowired
+    private IGameGiftService gameGiftService;
+
+    @ApiOperation(value = "礼包新增或修改")
+    @PostMapping(value = "/add/or/update")
+    @PreAuthorize(permissionKey = "manage:gameGift:addOrUpdate")
+    public ResultVO<Boolean> addOrUpdate(@Validated @RequestBody GameGiftAddParam param) {
+        return ResultVO.ok(gameGiftService.addOrUpdate(param));
+    }
+
+    @ApiOperation(value = "礼包列表")
+    @PostMapping(value = "/list")
+    @PreAuthorize(permissionKey = "manage:gameGift:list")
+    public ResultVO<List<GameGiftListVO>> list(@RequestBody GameGiftListParam param) {
+        return ResultVO.ok(gameGiftService.queryAll(param));
+    }
+
+    @ApiOperation(value = "礼包删除")
+    @DeleteMapping(value = "/delete/{ids}")
+    @PreAuthorize(permissionKey = "manage:gameGift:delete")
+    public ResultVO<Boolean> deleteById(@PathVariable("ids") Long ids) {
+        return ResultVO.ok(gameGiftService.deleteByIds(ids));
+    }
+}

+ 54 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/RoleAssignController.java

@@ -0,0 +1,54 @@
+package com.zanxiang.game.module.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.erp.security.annotation.PreAuthorize;
+import com.zanxiang.game.module.manage.pojo.params.*;
+import com.zanxiang.game.module.manage.pojo.vo.RoleAssignRecordListVO;
+import com.zanxiang.game.module.manage.service.IRoleAssignRecordService;
+import com.zanxiang.module.util.pojo.ResultVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Api(tags = {"角色指派记录"})
+@RestController
+@RequestMapping("/role/assign/record")
+@Slf4j
+public class RoleAssignController {
+
+    @Autowired
+    private IRoleAssignRecordService roleAssignRecordService;
+
+    @ApiOperation(value = "指派人员")
+    @PostMapping(value = "/config/sysUser")
+    @PreAuthorize(permissionKey = "manage:roleAssign:configSysUser")
+    public ResultVO<Boolean> configSysUser(@Validated @RequestBody RoleSysUserAssignParam param) {
+        return ResultVO.ok(roleAssignRecordService.configSysUser(param));
+    }
+
+    @ApiOperation(value = "指派记录修改")
+    @PostMapping(value = "/modify")
+    @PreAuthorize(permissionKey = "manage:roleAssign:modify")
+    public ResultVO<Boolean> modify(@Validated @RequestBody RoleAssignRecordAddParam param) {
+        return ResultVO.ok(roleAssignRecordService.modify(param));
+    }
+
+    @ApiOperation(value = "指派记录列表查询")
+    @PostMapping(value = "/list")
+    @PreAuthorize(permissionKey = "manage:roleAssign:list")
+    public ResultVO<IPage<RoleAssignRecordListVO>> list(@Validated @RequestBody RoleAssignRecordListParam param) {
+        return ResultVO.ok(roleAssignRecordService.listOfPage(param));
+    }
+
+    @ApiOperation(value = "指派记录删除")
+    @DeleteMapping(value = "/delete/{ids}")
+    @PreAuthorize(permissionKey = "manage:roleAssign:delete")
+    public ResultVO<Boolean> deleteById(@PathVariable List<Long> ids) {
+        return ResultVO.ok(roleAssignRecordService.deleteByIds(ids));
+    }
+}

+ 52 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/RoleGiftController.java

@@ -0,0 +1,52 @@
+package com.zanxiang.game.module.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.erp.security.annotation.PreAuthorize;
+import com.zanxiang.game.module.manage.pojo.params.*;
+import com.zanxiang.game.module.manage.pojo.vo.CpVO;
+import com.zanxiang.game.module.manage.pojo.vo.RoleGiftRecordListVO;
+import com.zanxiang.game.module.manage.pojo.vo.RoleMailRecordListVO;
+import com.zanxiang.game.module.manage.service.ICpService;
+import com.zanxiang.game.module.manage.service.IRoleGiftRecordService;
+import com.zanxiang.module.util.pojo.ResultVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Api(tags = {"角色礼包记录"})
+@RestController
+@RequestMapping("/role/gift/record")
+@Slf4j
+public class RoleGiftController {
+
+    @Autowired
+    private IRoleGiftRecordService roleGiftRecordService;
+
+    @ApiOperation(value = "礼包记录新增或者更新")
+    @PostMapping(value = "/add/or/update")
+    @PreAuthorize(permissionKey = "manage:roleGift:addOrUpdate")
+    public ResultVO<Boolean> addOrUpdate(@Validated @RequestBody RoleGiftRecordAddParam param) {
+        return ResultVO.ok(roleGiftRecordService.addOrUpdate(param));
+    }
+
+    @ApiOperation(value = "礼包记录列表查询")
+    @PostMapping(value = "/list")
+    @PreAuthorize(permissionKey = "manage:roleGift:list")
+    public ResultVO<IPage<RoleGiftRecordListVO>> list(@Validated @RequestBody RoleGiftRecordListParam param) {
+        return ResultVO.ok(roleGiftRecordService.listOfPage(param));
+    }
+
+    @ApiOperation(value = "礼包记录删除")
+    @DeleteMapping(value = "/delete/{ids}")
+    @PreAuthorize(permissionKey = "manage:roleGift:delete")
+    public ResultVO<Boolean> deleteById(@PathVariable List<Long> ids) {
+        return ResultVO.ok(roleGiftRecordService.deleteByIds(ids));
+    }
+}

+ 54 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/RoleMailController.java

@@ -0,0 +1,54 @@
+package com.zanxiang.game.module.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.erp.security.annotation.PreAuthorize;
+import com.zanxiang.game.module.manage.pojo.params.CpAddUpdateParam;
+import com.zanxiang.game.module.manage.pojo.params.CpListParam;
+import com.zanxiang.game.module.manage.pojo.params.RoleMailRecordAddParam;
+import com.zanxiang.game.module.manage.pojo.params.RoleMailRecordListParam;
+import com.zanxiang.game.module.manage.pojo.vo.CpVO;
+import com.zanxiang.game.module.manage.pojo.vo.RoleMailRecordListVO;
+import com.zanxiang.game.module.manage.service.ICpService;
+import com.zanxiang.game.module.manage.service.IRoleMailRecordService;
+import com.zanxiang.module.util.pojo.ResultVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Api(tags = {"角色邮件发送记录"})
+@RestController
+@RequestMapping("/role/mail/record")
+@Slf4j
+public class RoleMailController {
+
+    @Autowired
+    private IRoleMailRecordService roleMailRecordService;
+
+    @ApiOperation(value = "邮件记录新增或者更新")
+    @PostMapping(value = "/add/or/update")
+    @PreAuthorize(permissionKey = "manage:roleMail:addOrUpdate")
+    public ResultVO<Boolean> addOrUpdate(@Validated @RequestBody RoleMailRecordAddParam param) {
+        return ResultVO.ok(roleMailRecordService.addOrUpdate(param));
+    }
+
+    @ApiOperation(value = "邮件记录列表查询")
+    @PostMapping(value = "/list")
+    @PreAuthorize(permissionKey = "manage:roleMail:list")
+    public ResultVO<IPage<RoleMailRecordListVO>> list(@Validated @RequestBody RoleMailRecordListParam param) {
+        return ResultVO.ok(roleMailRecordService.listOfPage(param));
+    }
+
+    @ApiOperation(value = "邮件记录删除")
+    @DeleteMapping(value = "/delete/{ids}")
+    @PreAuthorize(permissionKey = "manage:roleMail:delete")
+    public ResultVO<Boolean> deleteById(@PathVariable List<Long> ids) {
+        return ResultVO.ok(roleMailRecordService.deleteByIds(ids));
+    }
+}

+ 32 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/RoleOperateController.java

@@ -0,0 +1,32 @@
+package com.zanxiang.game.module.manage.controller;
+
+import com.zanxiang.erp.security.annotation.PreAuthorize;
+import com.zanxiang.game.module.manage.pojo.params.RoleOperateParam;
+import com.zanxiang.game.module.manage.service.IRoleOperateService;
+import com.zanxiang.module.util.pojo.ResultVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Api(tags = {"角色操作"})
+@RestController
+@RequestMapping("/role/operate")
+@Slf4j
+public class RoleOperateController {
+
+    @Autowired
+    private IRoleOperateService roleOperateService;
+
+    @ApiOperation(value = "角色操作")
+    @PostMapping(value = "/modify")
+    @PreAuthorize(permissionKey = "manage:roleOperate:modify")
+    public ResultVO<Boolean> modify(@Validated @RequestBody RoleOperateParam param) {
+        return ResultVO.ok(roleOperateService.modify(param));
+    }
+}

+ 33 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameGiftAddParam.java

@@ -0,0 +1,33 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+
+@ApiModel
+@Data
+public class GameGiftAddParam {
+
+    @ApiModelProperty("传id为修改, 不传id为新增")
+    private Long id;
+
+    /**
+     * 游戏id
+     */
+    @NotNull
+    @ApiModelProperty("游戏id")
+    private Long gameId;
+
+    /**
+     * 礼包名称
+     */
+    @NotBlank
+    @ApiModelProperty("礼包名称")
+    private String giftName;
+
+}

+ 16 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameGiftListParam.java

@@ -0,0 +1,16 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author shishaosong
+ */
+@Data
+public class GameGiftListParam {
+    @ApiModelProperty(notes = "礼包名称")
+    private String giftName;
+
+    @ApiModelProperty(notes = "游戏id")
+    private Long gameId;
+}

+ 48 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleAssignRecordAddParam.java

@@ -0,0 +1,48 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+
+/**
+ * @author shishaosong
+ */
+@ApiModel
+@Data
+public class RoleAssignRecordAddParam {
+    @NotNull
+    private Long id;
+
+    @NotNull
+    @ApiModelProperty("开始时间")
+    private LocalDate startTime;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    /**
+     * GS
+     */
+    @ApiModelProperty("GS id")
+    private Long gsId;
+
+    /**
+     * 客服
+     */
+    @ApiModelProperty("客服id")
+    private Long customerServiceId;
+
+    /**
+     * 运营
+     */
+    @ApiModelProperty("运营id")
+    private Long operUserId;
+
+}

+ 48 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleAssignRecordListParam.java

@@ -0,0 +1,48 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import com.zanxiang.game.module.mybatis.entity.RoleAssignRecord;
+import com.zanxiang.game.module.mybatis.entity.RoleGiftRecord;
+import com.zanxiang.module.web.pojo.BaseListDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+/**
+ * @author shishaosong
+ */
+@Data
+public class RoleAssignRecordListParam extends BaseListDTO<RoleAssignRecord> {
+    @NotNull
+    @ApiModelProperty("游戏id")
+    private Long gameId;
+
+    @NotNull
+    @ApiModelProperty("区服id")
+    private String serverId;
+
+    @NotNull
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    @NotNull
+    @ApiModelProperty("角色id")
+    private String roleId;
+
+    @NotNull
+    @ApiModelProperty("渠道id")
+    private Long regAgentId;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @ApiModelProperty("GS id")
+    private Long gsId;
+
+    @ApiModelProperty("客服id")
+    private Long customerServiceId;
+
+    @ApiModelProperty("运营id")
+    private Long operUserId;
+}

+ 38 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleGiftRecordAddParam.java

@@ -0,0 +1,38 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+import java.util.List;
+
+
+/**
+ * @author shishaosong
+ */
+@ApiModel
+@Data
+public class RoleGiftRecordAddParam {
+
+    @ApiModelProperty("传ids为修改, 不传ids为新增")
+    private List<Long> ids;
+
+    @NotEmpty
+    @ApiModelProperty("角色信息")
+    private List<RoleInfoParam> roleInfoList;
+
+    /**
+     * 发送时间
+     */
+    @NotNull
+    @ApiModelProperty("发送时间")
+    private LocalDateTime sendTime;
+
+    @NotNull
+    @ApiModelProperty("礼包id")
+    private Long giftId;
+
+}

+ 50 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleGiftRecordListParam.java

@@ -0,0 +1,50 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import com.zanxiang.game.module.mybatis.entity.RoleGiftRecord;
+import com.zanxiang.game.module.mybatis.entity.RoleMailRecord;
+import com.zanxiang.module.web.pojo.BaseListDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+/**
+ * @author shishaosong
+ */
+@Data
+public class RoleGiftRecordListParam extends BaseListDTO<RoleGiftRecord> {
+    @NotNull
+    @ApiModelProperty("游戏id")
+    private Long gameId;
+
+    /**
+     * 区服id
+     */
+    @NotNull
+    @ApiModelProperty("区服id")
+    private String serverId;
+
+    /**
+     * 用户id
+     */
+    @NotNull
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    /**
+     * 角色id
+     */
+    @NotNull
+    @ApiModelProperty("角色id")
+    private String roleId;
+
+    @ApiModelProperty("礼包名称")
+    private String giftName;
+
+    @ApiModelProperty("发送时间范围-起")
+    private LocalDateTime startDateTime;
+
+    @ApiModelProperty("发送时间范围-止")
+    private LocalDateTime endDateTime;
+}

+ 54 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleInfoAndAgentParam.java

@@ -0,0 +1,54 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.validation.constraints.NotNull;
+
+
+/**
+ * @author shishaosong
+ */
+@ApiModel
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+public class RoleInfoAndAgentParam {
+    /**
+     * 游戏id
+     */
+    @NotNull
+    @ApiModelProperty("游戏id")
+    private Long gameId;
+
+    /**
+     * 注册渠道id
+     */
+    @ApiModelProperty("注册渠道id")
+    private String regAgentId;
+
+    /**
+     * 区服id
+     */
+    @NotNull
+    @ApiModelProperty("区服id")
+    private String serverId;
+
+    /**
+     * 用户id
+     */
+    @NotNull
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    /**
+     * 角色id
+     */
+    @NotNull
+    @ApiModelProperty("角色id")
+    private String roleId;
+
+}

+ 45 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleInfoParam.java

@@ -0,0 +1,45 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+
+/**
+ * @author shishaosong
+ */
+@ApiModel
+@Data
+public class RoleInfoParam {
+    /**
+     * 游戏id
+     */
+    @NotNull
+    @ApiModelProperty("游戏id")
+    private Long gameId;
+
+    /**
+     * 区服id
+     */
+    @NotNull
+    @ApiModelProperty("区服id")
+    private String serverId;
+
+    /**
+     * 用户id
+     */
+    @NotNull
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    /**
+     * 角色id
+     */
+    @NotNull
+    @ApiModelProperty("角色id")
+    private String roleId;
+
+}

+ 35 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleMailRecordAddParam.java

@@ -0,0 +1,35 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+import java.util.List;
+
+
+/**
+ * @author shishaosong
+ */
+@ApiModel
+@Data
+public class RoleMailRecordAddParam {
+
+    @ApiModelProperty("传ids为修改, 不传ids为新增")
+    private List<Long> ids;
+
+    @NotEmpty
+    @ApiModelProperty("角色信息")
+    private List<RoleInfoParam> roleInfoList;
+
+    /**
+     * 发送时间
+     */
+    @NotNull
+    @ApiModelProperty("发送时间")
+    private LocalDateTime sendTime;
+
+}

+ 46 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleMailRecordListParam.java

@@ -0,0 +1,46 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import com.zanxiang.game.module.mybatis.entity.RoleMailRecord;
+import com.zanxiang.module.web.pojo.BaseListDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+/**
+ * @author shishaosong
+ */
+@Data
+public class RoleMailRecordListParam extends BaseListDTO<RoleMailRecord> {
+    @NotNull
+    @ApiModelProperty("游戏id")
+    private Long gameId;
+
+    /**
+     * 区服id
+     */
+    @NotNull
+    @ApiModelProperty("区服id")
+    private String serverId;
+
+    /**
+     * 用户id
+     */
+    @NotNull
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    /**
+     * 角色id
+     */
+    @NotNull
+    @ApiModelProperty("角色id")
+    private String roleId;
+
+    @ApiModelProperty("发送时间范围-起")
+    private LocalDateTime startDateTime;
+
+    @ApiModelProperty("发送时间范围-止")
+    private LocalDateTime endDateTime;
+}

+ 80 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleOperateParam.java

@@ -0,0 +1,80 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+import java.util.List;
+
+
+/**
+ * @author shishaosong
+ */
+@ApiModel
+@Data
+public class RoleOperateParam {
+
+    @NotEmpty
+    @ApiModelProperty("角色信息")
+    private List<RoleInfoParam> roleInfoList;
+
+    /**
+     * 是否转端
+     */
+    @ApiModelProperty("1:已转端,0:未转端")
+    private Integer isChangeGameType;
+
+    /**
+     * 是否添加企微
+     */
+    @ApiModelProperty("1:已添加企微,0:未添加企微")
+    private Integer isAddCorpWechat;
+
+    /**
+     * 企微号
+     */
+    @ApiModelProperty("企微号")
+    private Integer addCorpUserId;
+
+    /**
+     * 客户微信
+     */
+    @ApiModelProperty("客户微信")
+    private String userWechat;
+
+    /**
+     * 客户手机
+     */
+    @ApiModelProperty("客户手机")
+    private String userPhone;
+
+    /**
+     * 是否退游
+     */
+    @ApiModelProperty("1:已退游,0:未退游")
+    private Integer isRemoveGame;
+
+    /**
+     * 是否唤醒
+     */
+    @ApiModelProperty("1:已唤醒,0:未唤醒")
+    private Integer isWakeUp;
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty("备注")
+    private String remark;
+
+    /**
+     * 投手
+     */
+    @ApiModelProperty("投手")
+    private Long putUserId;
+
+}

+ 49 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/RoleSysUserAssignParam.java

@@ -0,0 +1,49 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+
+/**
+ * @author shishaosong
+ */
+@ApiModel
+@Data
+public class RoleSysUserAssignParam {
+    @NotEmpty
+    @ApiModelProperty("角色信息")
+    private List<RoleInfoAndAgentParam> roleInfoAndAgentParamList;
+
+    @NotNull
+    @ApiModelProperty("开始时间")
+    private LocalDate startTime;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    /**
+     * GS
+     */
+    @ApiModelProperty("GS id")
+    private Long gsId;
+
+    /**
+     * 客服
+     */
+    @ApiModelProperty("客服id")
+    private Long customerServiceId;
+
+    /**
+     * 运营
+     */
+    @ApiModelProperty("运营id")
+    private Long operUserId;
+
+}

+ 66 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameGiftListVO.java

@@ -0,0 +1,66 @@
+package com.zanxiang.game.module.manage.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author shishaosong
+ */
+@Builder
+@Data
+public class GameGiftListVO {
+
+    /**
+     * id
+     */
+    @ApiModelProperty(notes = "id")
+    private Long id;
+
+    /**
+     * 游戏id
+     */
+    @ApiModelProperty("游戏id")
+    private Long gameId;
+
+    @ApiModelProperty("游戏名称")
+    private String gameName;
+
+    /**
+     * 礼包名称
+     */
+    @ApiModelProperty("礼包名称")
+    private String giftName;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 创建者
+     */
+    @ApiModelProperty("创建者")
+    private Long createBy;
+
+    @ApiModelProperty("创建者名称")
+    private String createName;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新者
+     */
+    @ApiModelProperty("更新者")
+    private Long updateBy;
+
+    @ApiModelProperty("更新者名称")
+    private String updateName;
+}

+ 130 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/RoleAssignRecordListVO.java

@@ -0,0 +1,130 @@
+package com.zanxiang.game.module.manage.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * @author shishaosong
+ */
+@Builder
+@Data
+public class RoleAssignRecordListVO {
+    private Long id;
+
+    /**
+     * 游戏id
+     */
+    @ApiModelProperty("游戏id")
+    private Long gameId;
+
+    /**
+     * 游戏名称
+     */
+    @ApiModelProperty("游戏名称")
+    private String gameName;
+
+    /**
+     * 区服id
+     */
+    @ApiModelProperty("区服id")
+    private String serverId;
+
+    /**
+     * 区服名称
+     */
+    @ApiModelProperty("区服名称")
+    private String serverName;
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty("创建时间")
+    private Long userId;
+
+    /**
+     * 角色id
+     */
+    @ApiModelProperty("角色id")
+    private String roleId;
+
+    /**
+     * 角色名称
+     */
+    @ApiModelProperty("角色名称")
+    private String roleName;
+
+    /**
+     * 注册渠道id
+     */
+    @ApiModelProperty("注册渠道id")
+    private String regAgentId;
+
+    /**
+     * 注册渠道名称
+     */
+    @ApiModelProperty("注册渠道名称")
+    private String regAgentName;
+
+    /**
+     * 开始时间
+     */
+    @ApiModelProperty("开始时间")
+    private LocalDate startTime;
+
+    /**
+     * 结束时间
+     */
+    @ApiModelProperty("结束时间")
+    private LocalDate endTime;
+
+    /**
+     * GS
+     */
+    @ApiModelProperty("GS")
+    private Long gsId;
+    private String gsName;
+
+    /**
+     * 客服
+     */
+    @ApiModelProperty("客服")
+    private Long customerServiceId;
+    private String customerServiceName;
+
+    /**
+     * 运营
+     */
+    @ApiModelProperty("运营")
+    private Long operUserId;
+    private String operUserName;
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+    
+    @ApiModelProperty("创建者")
+    private Long createBy;
+
+    @ApiModelProperty("创建者名称")
+    private String createName;
+    
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+    
+    @ApiModelProperty("更新者")
+    private Long updateBy;
+
+    @ApiModelProperty("更新者名称")
+    private String updateName;
+
+
+}

+ 60 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/RoleGiftRecordListVO.java

@@ -0,0 +1,60 @@
+package com.zanxiang.game.module.manage.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author shishaosong
+ */
+@Builder
+@Data
+public class RoleGiftRecordListVO {
+    private Long id;
+
+    @ApiModelProperty("礼包id")
+    private Long giftId;
+
+    @ApiModelProperty("礼包名称")
+    private String giftName;
+
+    /**
+     * 发送时间
+     */
+    @ApiModelProperty("发送时间")
+    private LocalDateTime sendTime;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 创建者
+     */
+    @ApiModelProperty("创建者")
+    private Long createBy;
+
+    @ApiModelProperty("创建者名称")
+    private String createName;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新者
+     */
+    @ApiModelProperty("更新者")
+    private Long updateBy;
+
+    @ApiModelProperty("更新者名称")
+    private String updateName;
+
+
+}

+ 54 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/RoleMailRecordListVO.java

@@ -0,0 +1,54 @@
+package com.zanxiang.game.module.manage.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author shishaosong
+ */
+@Builder
+@Data
+public class RoleMailRecordListVO {
+    private Long id;
+
+    /**
+     * 发送时间
+     */
+    @ApiModelProperty("发送时间")
+    private LocalDateTime sendTime;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 创建者
+     */
+    @ApiModelProperty("创建者")
+    private Long createBy;
+
+    @ApiModelProperty("创建者名称")
+    private String createName;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新者
+     */
+    @ApiModelProperty("更新者")
+    private Long updateBy;
+
+    @ApiModelProperty("更新者名称")
+    private String updateName;
+
+
+}

+ 26 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameGiftService.java

@@ -0,0 +1,26 @@
+package com.zanxiang.game.module.manage.service;
+
+import com.zanxiang.game.module.manage.pojo.params.GameGiftAddParam;
+import com.zanxiang.game.module.manage.pojo.params.GameGiftListParam;
+import com.zanxiang.game.module.manage.pojo.vo.GameGiftListVO;
+import com.zanxiang.game.module.mybatis.entity.GameGift;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 游戏礼包表 服务类
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+public interface IGameGiftService extends IService<GameGift> {
+
+    boolean addOrUpdate(GameGiftAddParam param);
+
+    List<GameGiftListVO> queryAll(GameGiftListParam param);
+
+    boolean deleteByIds(Long ids);
+}

+ 29 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IRoleAssignRecordService.java

@@ -0,0 +1,29 @@
+package com.zanxiang.game.module.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.game.module.manage.pojo.params.RoleAssignRecordListParam;
+import com.zanxiang.game.module.manage.pojo.params.RoleAssignRecordAddParam;
+import com.zanxiang.game.module.manage.pojo.params.RoleSysUserAssignParam;
+import com.zanxiang.game.module.manage.pojo.vo.RoleAssignRecordListVO;
+import com.zanxiang.game.module.mybatis.entity.RoleAssignRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 角色指派记录表 服务类
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+public interface IRoleAssignRecordService extends IService<RoleAssignRecord> {
+    IPage<RoleAssignRecordListVO> listOfPage(RoleAssignRecordListParam param);
+
+    boolean deleteByIds(List<Long> ids);
+
+    boolean configSysUser(RoleSysUserAssignParam param);
+
+    boolean modify(RoleAssignRecordAddParam param);
+}

+ 27 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IRoleGiftRecordService.java

@@ -0,0 +1,27 @@
+package com.zanxiang.game.module.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.game.module.manage.pojo.params.RoleGiftRecordAddParam;
+import com.zanxiang.game.module.manage.pojo.params.RoleGiftRecordListParam;
+import com.zanxiang.game.module.manage.pojo.vo.RoleGiftRecordListVO;
+import com.zanxiang.game.module.mybatis.entity.RoleGiftRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 角色礼包发送记录表 服务类
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+public interface IRoleGiftRecordService extends IService<RoleGiftRecord> {
+
+    boolean addOrUpdate(RoleGiftRecordAddParam param);
+
+    IPage<RoleGiftRecordListVO> listOfPage(RoleGiftRecordListParam param);
+
+    boolean deleteByIds(List<Long> ids);
+}

+ 27 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IRoleMailRecordService.java

@@ -0,0 +1,27 @@
+package com.zanxiang.game.module.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.game.module.manage.pojo.params.RoleMailRecordAddParam;
+import com.zanxiang.game.module.manage.pojo.params.RoleMailRecordListParam;
+import com.zanxiang.game.module.manage.pojo.vo.RoleMailRecordListVO;
+import com.zanxiang.game.module.mybatis.entity.RoleMailRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 角色邮件发送记录表 服务类
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+public interface IRoleMailRecordService extends IService<RoleMailRecord> {
+
+    boolean addOrUpdate(RoleMailRecordAddParam param);
+
+    IPage<RoleMailRecordListVO> listOfPage(RoleMailRecordListParam param);
+
+    boolean deleteByIds(List<Long> ids);
+}

+ 18 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IRoleOperateService.java

@@ -0,0 +1,18 @@
+package com.zanxiang.game.module.manage.service;
+
+import com.zanxiang.game.module.manage.pojo.params.RoleOperateParam;
+import com.zanxiang.game.module.mybatis.entity.RoleOperate;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 角色操作表 服务类
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+public interface IRoleOperateService extends IService<RoleOperate> {
+
+    boolean modify(RoleOperateParam param);
+}

+ 118 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameGiftServiceImpl.java

@@ -0,0 +1,118 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.zanxiang.erp.base.ErpServer;
+import com.zanxiang.erp.base.rpc.ISysUserRpc;
+import com.zanxiang.erp.security.util.SecurityUtil;
+import com.zanxiang.game.module.manage.pojo.dto.GameDTO;
+import com.zanxiang.game.module.manage.pojo.params.GameGiftAddParam;
+import com.zanxiang.game.module.manage.pojo.params.GameGiftListParam;
+import com.zanxiang.game.module.manage.pojo.vo.GameGiftListVO;
+import com.zanxiang.game.module.manage.service.IGameService;
+import com.zanxiang.game.module.mybatis.entity.GameGift;
+import com.zanxiang.game.module.mybatis.entity.RoleMailRecord;
+import com.zanxiang.game.module.mybatis.mapper.GameGiftMapper;
+import com.zanxiang.game.module.manage.service.IGameGiftService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.module.util.exception.BaseException;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 游戏礼包表 服务实现类
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+@Service
+public class GameGiftServiceImpl extends ServiceImpl<GameGiftMapper, GameGift> implements IGameGiftService {
+    @Autowired
+    private IGameService gameService;
+    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
+    private ISysUserRpc sysUserRpc;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addOrUpdate(GameGiftAddParam param) {
+        Long sysUserId = SecurityUtil.getUserId();
+        LocalDateTime now = LocalDateTime.now();
+        if (null == param.getId()) {
+            int count = count(new LambdaQueryWrapper<GameGift>()
+                    .eq(GameGift::getGameId, param.getGameId())
+                    .eq(GameGift::getGiftName, param.getGiftName()));
+            if (count > 1) {
+                throw new BaseException("此游戏礼包名称重复");
+            }
+            GameGift gameGift = GameGift.builder()
+                    .gameId(param.getGameId())
+                    .giftName(param.getGiftName())
+                    .createBy(sysUserId)
+                    .createTime(now)
+                    .updateBy(sysUserId)
+                    .updateTime(now)
+                    .build();
+            return save(gameGift);
+        } else {
+            int count = count(new LambdaQueryWrapper<GameGift>()
+                    .ne(GameGift::getId, param.getId())
+                    .eq(GameGift::getGameId, param.getGameId())
+                    .eq(GameGift::getGiftName, param.getGiftName()));
+            if (count > 1) {
+                throw new BaseException("此游戏礼包名称重复");
+            }
+            GameGift gameGift = GameGift.builder()
+                    .id(param.getId())
+                    .gameId(param.getGameId())
+                    .giftName(param.getGiftName())
+                    .updateBy(sysUserId)
+                    .updateTime(now)
+                    .build();
+            return updateById(gameGift);
+        }
+    }
+
+    @Override
+    public List<GameGiftListVO> queryAll(GameGiftListParam param) {
+        return list(new LambdaQueryWrapper<GameGift>()
+                .eq(null != param.getGameId(), GameGift::getGameId, param.getGameId())
+                .like(StringUtils.isNotBlank(param.getGiftName()), GameGift::getGiftName, param.getGiftName())
+                .eq(GameGift::getIsDelete, 0))
+                .stream()
+                .map(item -> {
+                    GameDTO game = gameService.getById(item.getGameId());
+                    return GameGiftListVO.builder()
+                            .id(item.getId())
+                            .gameId(item.getGameId())
+                            .gameName(null == game ? null : game.getName())
+                            .giftName(item.getGiftName())
+                            .createBy(item.getCreateBy())
+                            .createName(sysUserRpc.getById(item.getCreateBy()).getData().getNickname())
+                            .createTime(item.getCreateTime())
+                            .updateBy(item.getUpdateBy())
+                            .updateName(sysUserRpc.getById(item.getUpdateBy()).getData().getNickname())
+                            .updateTime(item.getUpdateTime())
+                            .build();
+                }).collect(Collectors.toList());
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean deleteByIds(Long ids) {
+        Long sysUserId = SecurityUtil.getUserId();
+        return update(new LambdaUpdateWrapper<GameGift>()
+                .set(GameGift::getIsDelete, 1)
+                .set(GameGift::getUpdateBy, sysUserId)
+                .set(GameGift::getUpdateTime, LocalDateTime.now())
+                .in(GameGift::getId, ids));
+    }
+}

+ 322 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/RoleAssignRecordServiceImpl.java

@@ -0,0 +1,322 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.zanxiang.erp.base.ErpServer;
+import com.zanxiang.erp.base.rpc.ISysUserRpc;
+import com.zanxiang.erp.security.util.SecurityUtil;
+import com.zanxiang.game.module.manage.pojo.dto.GameDTO;
+import com.zanxiang.game.module.manage.pojo.params.RoleAssignRecordListParam;
+import com.zanxiang.game.module.manage.pojo.params.RoleAssignRecordAddParam;
+import com.zanxiang.game.module.manage.pojo.params.RoleInfoAndAgentParam;
+import com.zanxiang.game.module.manage.pojo.params.RoleSysUserAssignParam;
+import com.zanxiang.game.module.manage.pojo.vo.RoleAssignRecordListVO;
+import com.zanxiang.game.module.manage.service.*;
+import com.zanxiang.game.module.mybatis.entity.*;
+import com.zanxiang.game.module.mybatis.mapper.RoleAssignRecordMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.module.util.exception.BaseException;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 角色指派记录表 服务实现类
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+@Service
+public class RoleAssignRecordServiceImpl extends ServiceImpl<RoleAssignRecordMapper, RoleAssignRecord> implements IRoleAssignRecordService {
+    @Autowired
+    private IAgentService agentService;
+    @Autowired
+    private IGameService gameService;
+    @Autowired
+    private IUserService userService;
+    @Autowired
+    private IGameServerService gameServerService;
+    @Autowired
+    private IGameUserRoleService gameUserRoleService;
+    @Autowired
+    private IRoleOperateService roleOperateService;
+    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
+    private ISysUserRpc sysUserRpc;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean configSysUser(RoleSysUserAssignParam param) {
+        Long sysUserId = SecurityUtil.getUserId();
+        LocalDateTime now = LocalDateTime.now();
+        List<RoleAssignRecord> lastAssignRecordList = new ArrayList<>();
+        List<RoleAssignRecord> insertAssignRecordList = new ArrayList<>();
+        param.getRoleInfoAndAgentParamList().forEach(item -> {
+            RoleAssignRecord lastAssignRecord = lastAssignRecord(item);
+            RoleAssignRecord insertRoleAssignRecord = RoleAssignRecord.builder()
+                    .gameId(item.getGameId())
+                    .serverId(item.getServerId())
+                    .userId(item.getUserId())
+                    .roleId(item.getRoleId())
+                    .regAgentId(item.getRegAgentId())
+                    .startTime(param.getStartTime())
+                    .gsId(param.getGsId())
+                    .customerServiceId(param.getCustomerServiceId())
+                    .operUserId(param.getOperUserId())
+                    .remark(param.getRemark())
+                    .createBy(sysUserId)
+                    .createTime(now)
+                    .updateBy(sysUserId)
+                    .updateTime(now)
+                    .build();
+            if (null == lastAssignRecord) {
+                insertAssignRecordList.add(insertRoleAssignRecord);
+            } else {
+                //存在记录,更新最后一条记录
+                int compare = param.getStartTime().compareTo(lastAssignRecord.getStartTime());
+                if (compare < 0) {
+                    throw new BaseException("角色" + item.getRoleId() + "开始时间不能早于上条指派记录的开始时间!!!");
+                }
+                lastAssignRecord.setUpdateBy(sysUserId);
+                lastAssignRecord.setUpdateTime(now);
+                if (compare == 0) {
+                    lastAssignRecord.setCustomerServiceId(param.getCustomerServiceId());
+                    lastAssignRecord.setGsId(param.getGsId());
+                    lastAssignRecord.setOperUserId(param.getOperUserId());
+                    lastAssignRecord.setRemark(param.getRemark());
+                } else {
+                    lastAssignRecord.setEndTime(param.getStartTime());
+                    insertAssignRecordList.add(insertRoleAssignRecord);
+                }
+                lastAssignRecordList.add(lastAssignRecord);
+            }
+        });
+        if (CollectionUtils.isNotEmpty(lastAssignRecordList)) {
+            updateBatchById(lastAssignRecordList);
+        }
+        if (CollectionUtils.isNotEmpty(insertAssignRecordList)) {
+            saveBatch(insertAssignRecordList);
+        }
+
+        //角色操作表更新
+        List<RoleOperate> roleOperateList = param.getRoleInfoAndAgentParamList().stream()
+                .map(this::getModifyRoleOperate).collect(Collectors.toList());
+        return roleOperateService.saveOrUpdateBatch(roleOperateList);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean modify(RoleAssignRecordAddParam param) {
+        Long sysUserId = SecurityUtil.getUserId();
+        LocalDateTime now = LocalDateTime.now();
+        RoleAssignRecord changeRecord = getById(param.getId());
+        RoleAssignRecord previousAssignRecord = previousAssignRecord(changeRecord, param.getStartTime());
+        changeRecord.setStartTime(param.getStartTime());
+        changeRecord.setOperUserId(param.getOperUserId());
+        changeRecord.setGsId(param.getGsId());
+        changeRecord.setCustomerServiceId(param.getCustomerServiceId());
+        changeRecord.setRemark(param.getRemark());
+        changeRecord.setUpdateBy(sysUserId);
+        changeRecord.setUpdateTime(now);
+        if (previousAssignRecord != null) {
+            if (previousAssignRecord.getStartTime().compareTo(changeRecord.getStartTime()) >= 0) {
+                throw new BaseException("开始时间必须大于下一条记录的开始时间!");
+            }
+            update(new LambdaUpdateWrapper<RoleAssignRecord>()
+                    .set(RoleAssignRecord::getEndTime, changeRecord.getStartTime())
+                    .eq(RoleAssignRecord::getId, previousAssignRecord.getId())
+            );
+        }
+        updateById(changeRecord);
+        //角色操作表更新
+        RoleInfoAndAgentParam roleInfoAndAgentParam = RoleInfoAndAgentParam.builder()
+                .regAgentId(changeRecord.getRegAgentId())
+                .gameId(changeRecord.getGameId())
+                .serverId(changeRecord.getServerId())
+                .userId(changeRecord.getUserId())
+                .roleId(changeRecord.getRoleId())
+                .build();
+        RoleOperate modifyRoleOperate = getModifyRoleOperate(roleInfoAndAgentParam);
+        return roleOperateService.saveOrUpdate(modifyRoleOperate);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public IPage<RoleAssignRecordListVO> listOfPage(RoleAssignRecordListParam param) {
+        Agent agent = agentService.getById(param.getRegAgentId());
+        GameDTO game = gameService.getById(param.getGameId());
+        GameServer gameServer = gameServerService.getOne(new LambdaQueryWrapper<GameServer>()
+                .eq(GameServer::getGameId, param.getGameId())
+                .eq(GameServer::getServerId, param.getServerId()));
+        GameUserRole role = gameUserRoleService.getOne(new LambdaQueryWrapper<GameUserRole>()
+                .eq(GameUserRole::getGameId, param.getGameId())
+                .eq(GameUserRole::getServerId, param.getServerId())
+                .eq(GameUserRole::getUserId, param.getUserId())
+                .eq(GameUserRole::getRoleId, param.getRoleId()));
+
+        return page(param.toPage(), new LambdaQueryWrapper<RoleAssignRecord>()
+                .eq(RoleAssignRecord::getRegAgentId, param.getRegAgentId())
+                .eq(RoleAssignRecord::getGameId, param.getGameId())
+                .eq(RoleAssignRecord::getServerId, param.getServerId())
+                .eq(RoleAssignRecord::getUserId, param.getUserId())
+                .eq(RoleAssignRecord::getRoleId, param.getRoleId())
+                .like(StringUtils.isNotBlank(param.getRemark()), RoleAssignRecord::getRemark, param.getRemark())
+                .eq(null != param.getGsId(), RoleAssignRecord::getGsId, param.getGsId())
+                .eq(null != param.getOperUserId(), RoleAssignRecord::getOperUserId, param.getOperUserId())
+                .eq(null != param.getCustomerServiceId(), RoleAssignRecord::getCustomerServiceId, param.getCustomerServiceId())
+                .eq(RoleAssignRecord::getIsDelete, 0)
+                .orderByDesc(RoleAssignRecord::getCreateTime))
+                .convert(item -> RoleAssignRecordListVO.builder()
+                        .id(item.getId())
+                        .gameId(item.getGameId())
+                        .gameName(null == game ? null : game.getName())
+                        .serverId(item.getServerId())
+                        .serverName(null == gameServer ? null : gameServer.getServerName())
+                        .userId(item.getUserId())
+                        .roleId(item.getRoleId())
+                        .roleName(null == role ? null : role.getRoleName())
+                        .regAgentId(null == agent ? null : agent.getAgentName())
+                        .startTime(item.getStartTime())
+                        .endTime(item.getEndTime())
+                        .gsId(item.getGsId())
+                        .gsName(getNickname(item.getGsId()))
+                        .operUserId(item.getOperUserId())
+                        .operUserName(getNickname(item.getOperUserId()))
+                        .customerServiceId(item.getCustomerServiceId())
+                        .customerServiceName(getNickname(item.getCustomerServiceId()))
+                        .remark(item.getRemark())
+                        .createBy(item.getCreateBy())
+                        .createName(getNickname(item.getCreateBy()))
+                        .createTime(item.getCreateTime())
+                        .updateBy(item.getUpdateBy())
+                        .updateName(getNickname(item.getUpdateBy()))
+                        .updateTime(item.getUpdateTime())
+                        .build());
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean deleteByIds(List<Long> ids) {
+        Long sysUserId = SecurityUtil.getUserId();
+        LocalDateTime now = LocalDateTime.now();
+        update(new LambdaUpdateWrapper<RoleAssignRecord>()
+                .set(RoleAssignRecord::getIsDelete, 1)
+                .set(RoleAssignRecord::getUpdateBy, sysUserId)
+                .set(RoleAssignRecord::getUpdateTime, now)
+                .in(RoleAssignRecord::getId, ids));
+        List<RoleAssignRecord> roleAssignRecordList = listByIds(ids);
+        if (CollectionUtils.isNotEmpty(roleAssignRecordList)) {
+            RoleAssignRecord roleAssignRecord = roleAssignRecordList.get(0);
+            RoleInfoAndAgentParam roleInfoAndAgentParam = RoleInfoAndAgentParam.builder()
+                    .regAgentId(roleAssignRecord.getRegAgentId())
+                    .gameId(roleAssignRecord.getGameId())
+                    .serverId(roleAssignRecord.getServerId())
+                    .userId(roleAssignRecord.getUserId())
+                    .roleId(roleAssignRecord.getRoleId())
+                    .build();
+            RoleOperate modifyRoleOperate = getModifyRoleOperate(roleInfoAndAgentParam);
+            return roleOperateService.saveOrUpdate(modifyRoleOperate);
+        }
+        return true;
+    }
+
+    /**
+     * 最后记录
+     *
+     * @param item
+     * @return
+     */
+    private RoleAssignRecord lastAssignRecord(RoleInfoAndAgentParam item) {
+        return getOne(new LambdaQueryWrapper<RoleAssignRecord>()
+                .eq(RoleAssignRecord::getRegAgentId, item.getRegAgentId())
+                .eq(RoleAssignRecord::getGameId, item.getGameId())
+                .eq(RoleAssignRecord::getServerId, item.getServerId())
+                .eq(RoleAssignRecord::getUserId, item.getUserId())
+                .eq(RoleAssignRecord::getRoleId, item.getRoleId())
+                .orderByDesc(RoleAssignRecord::getStartTime)
+                .eq(RoleAssignRecord::getIsDelete, 0)
+                .last("limit 1"));
+    }
+
+    /**
+     * 上一条记录
+     *
+     * @return
+     */
+    private RoleAssignRecord previousAssignRecord(RoleAssignRecord item, LocalDate startTime) {
+        return getOne(new LambdaQueryWrapper<RoleAssignRecord>()
+                .eq(RoleAssignRecord::getRegAgentId, item.getRegAgentId())
+                .eq(RoleAssignRecord::getGameId, item.getGameId())
+                .eq(RoleAssignRecord::getServerId, item.getServerId())
+                .eq(RoleAssignRecord::getUserId, item.getUserId())
+                .eq(RoleAssignRecord::getRoleId, item.getRoleId())
+                .le(RoleAssignRecord::getStartTime, startTime)
+                .orderByDesc(RoleAssignRecord::getStartTime)
+                .eq(RoleAssignRecord::getIsDelete, 0)
+                .last("limit 1"));
+    }
+
+    /**
+     * 下一条记录
+     *
+     * @return
+     */
+    private RoleAssignRecord getNextRecord(RoleAssignRecord item, LocalDate startTime) {
+        return getOne(new LambdaQueryWrapper<RoleAssignRecord>()
+                .eq(RoleAssignRecord::getRegAgentId, item.getRegAgentId())
+                .eq(RoleAssignRecord::getGameId, item.getGameId())
+                .eq(RoleAssignRecord::getServerId, item.getServerId())
+                .eq(RoleAssignRecord::getUserId, item.getUserId())
+                .eq(RoleAssignRecord::getRoleId, item.getRoleId())
+                .ge(RoleAssignRecord::getStartTime, startTime)
+                .orderByAsc(RoleAssignRecord::getStartTime)
+                .eq(RoleAssignRecord::getIsDelete, 0)
+                .last("limit 1")
+        );
+    }
+
+    private String getNickname(Long sysUserId) {
+        return sysUserRpc.getById(sysUserId).getData().getNickname();
+    }
+
+    private RoleOperate getModifyRoleOperate(RoleInfoAndAgentParam roleInfoAndAgentParam) {
+        RoleAssignRecord lastAssignRecord = lastAssignRecord(roleInfoAndAgentParam);
+        Long sysUserId = SecurityUtil.getUserId();
+        LocalDateTime now = LocalDateTime.now();
+        RoleOperate roleOperate = RoleOperate.builder().build();
+        RoleOperate queryOne = roleOperateService.getOne(new LambdaQueryWrapper<RoleOperate>()
+                .eq(RoleOperate::getGameId, lastAssignRecord.getGameId())
+                .eq(RoleOperate::getServerId, lastAssignRecord.getServerId())
+                .eq(RoleOperate::getUserId, lastAssignRecord.getUserId())
+                .eq(RoleOperate::getRoleId, lastAssignRecord.getRoleId())
+                .eq(RoleOperate::getIsDelete, 0));
+        if (null == queryOne) {
+            roleOperate.setGameId(lastAssignRecord.getGameId());
+            roleOperate.setServerId(lastAssignRecord.getServerId());
+            roleOperate.setUserId(lastAssignRecord.getUserId());
+            roleOperate.setRoleId(lastAssignRecord.getRoleId());
+            roleOperate.setCreateBy(sysUserId);
+            roleOperate.setCreateTime(now);
+        } else {
+            roleOperate = queryOne;
+        }
+        roleOperate.setGsId(lastAssignRecord.getGsId());
+        roleOperate.setCustomerServiceId(lastAssignRecord.getCustomerServiceId());
+        roleOperate.setOperUserId(lastAssignRecord.getOperUserId());
+        roleOperate.setRemark(lastAssignRecord.getRemark());
+        roleOperate.setUpdateBy(sysUserId);
+        roleOperate.setUpdateTime(now);
+        return roleOperate;
+    }
+}

+ 172 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/RoleGiftRecordServiceImpl.java

@@ -0,0 +1,172 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.zanxiang.erp.base.ErpServer;
+import com.zanxiang.erp.base.rpc.ISysUserRpc;
+import com.zanxiang.erp.security.util.SecurityUtil;
+import com.zanxiang.game.module.manage.pojo.params.RoleGiftRecordAddParam;
+import com.zanxiang.game.module.manage.pojo.params.RoleGiftRecordListParam;
+import com.zanxiang.game.module.manage.pojo.vo.RoleGiftRecordListVO;
+import com.zanxiang.game.module.manage.pojo.vo.RoleMailRecordListVO;
+import com.zanxiang.game.module.manage.service.IGameGiftService;
+import com.zanxiang.game.module.manage.service.IRoleOperateService;
+import com.zanxiang.game.module.mybatis.entity.*;
+import com.zanxiang.game.module.mybatis.entity.RoleGiftRecord;
+import com.zanxiang.game.module.mybatis.mapper.RoleGiftRecordMapper;
+import com.zanxiang.game.module.manage.service.IRoleGiftRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 角色礼包发送记录表 服务实现类
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+@Service
+public class RoleGiftRecordServiceImpl extends ServiceImpl<RoleGiftRecordMapper, RoleGiftRecord> implements IRoleGiftRecordService {
+    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
+    private ISysUserRpc sysUserRpc;
+    @Autowired
+    private IRoleOperateService roleOperateService;
+    @Autowired
+    private IGameGiftService gameGiftService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addOrUpdate(RoleGiftRecordAddParam param) {
+                Long sysUserId = SecurityUtil.getUserId();
+        LocalDateTime now = LocalDateTime.now();
+        if (CollectionUtils.isEmpty(param.getIds())) {
+            List<RoleGiftRecord> roleGiftRecordList = param.getRoleInfoList().stream()
+                    .map(item -> RoleGiftRecord.builder()
+                            .gameId(item.getGameId())
+                            .serverId(item.getServerId())
+                            .userId(item.getUserId())
+                            .roleId(item.getRoleId())
+                            .sendTime(param.getSendTime())
+                            .sendGiftId(param.getGiftId())
+                            .createBy(sysUserId)
+                            .createTime(now)
+                            .updateBy(sysUserId)
+                            .updateTime(now)
+                            .build()).collect(Collectors.toList());
+            saveBatch(roleGiftRecordList);
+            List<RoleOperate> roleOperateList = param.getRoleInfoList().stream()
+                    .map(item -> {
+                        RoleOperate roleOperate = RoleOperate.builder().build();
+                        RoleOperate queryOne = roleOperateService.getOne(new LambdaQueryWrapper<RoleOperate>()
+                                .eq(RoleOperate::getGameId, item.getGameId())
+                                .eq(RoleOperate::getServerId, item.getServerId())
+                                .eq(RoleOperate::getUserId, item.getUserId())
+                                .eq(RoleOperate::getRoleId, item.getRoleId())
+                                .eq(RoleOperate::getIsDelete, 0));
+                        if (null == queryOne) {
+                            roleOperate.setGameId(item.getGameId());
+                            roleOperate.setServerId(item.getServerId());
+                            roleOperate.setUserId(item.getUserId());
+                            roleOperate.setRoleId(item.getRoleId());
+                            roleOperate.setCreateBy(sysUserId);
+                            roleOperate.setCreateTime(now);
+                            RoleGiftRecord roleGiftRecord = latestGift(item.getGameId(), item.getServerId(), item.getUserId(), item.getRoleId());
+                            roleOperate.setSendGiftId(null == roleGiftRecord ? null : roleGiftRecord.getSendGiftId());
+                        } else {
+                            roleOperate = queryOne;
+                            roleOperate.setSendGiftId(param.getGiftId());
+                        }
+                        roleOperate.setUpdateBy(sysUserId);
+                        roleOperate.setUpdateTime(now);
+                        return roleOperate;
+                    }).collect(Collectors.toList());
+            return roleOperateService.saveOrUpdateBatch(roleOperateList);
+        } else {
+            RoleGiftRecord roleGiftRecord = listByIds(param.getIds()).get(0);
+            update(new LambdaUpdateWrapper<RoleGiftRecord>()
+                    .set(RoleGiftRecord::getSendTime, param.getSendTime())
+                    .set(RoleGiftRecord::getSendGiftId, param.getGiftId())
+                    .set(RoleGiftRecord::getUpdateBy, sysUserId)
+                    .set(RoleGiftRecord::getUpdateTime, now)
+                    .in(RoleGiftRecord::getId, param.getIds()));
+            return sendLatestGift(roleGiftRecord.getGameId(), roleGiftRecord.getServerId(), roleGiftRecord.getUserId(), roleGiftRecord.getRoleId());
+        }
+
+    }
+
+    @Override
+    public IPage<RoleGiftRecordListVO> listOfPage(RoleGiftRecordListParam param) {
+        List<Long> gameGiftIdList = gameGiftService.list(new LambdaQueryWrapper<GameGift>()
+                        .eq(GameGift::getGameId, param.getGameId())
+                        .like(StringUtils.isNotBlank(param.getGiftName()), GameGift::getGiftName, param.getGiftName()))
+                .stream()
+                .map(GameGift::getId)
+                .collect(Collectors.toList());
+        return page(param.toPage(), new LambdaQueryWrapper<RoleGiftRecord>()
+                .eq(RoleGiftRecord::getGameId, param.getGameId())
+                .eq(RoleGiftRecord::getServerId, param.getServerId())
+                .eq(RoleGiftRecord::getUserId, param.getUserId())
+                .eq(RoleGiftRecord::getRoleId, param.getRoleId())
+                .in(CollectionUtils.isNotEmpty(gameGiftIdList), RoleGiftRecord::getSendGiftId, gameGiftIdList)
+                .ge(null != param.getStartDateTime(), RoleGiftRecord::getSendTime, param.getStartDateTime())
+                .le(null != param.getEndDateTime(), RoleGiftRecord::getSendTime, param.getEndDateTime())
+                .orderByDesc(RoleGiftRecord::getSendTime))
+                .convert(item -> RoleGiftRecordListVO.builder()
+                        .id(item.getId())
+                        .sendTime(item.getSendTime())
+                        .giftId(item.getSendGiftId())
+                        .giftName(null == item.getSendGiftId() ? null : gameGiftService.getById(item.getSendGiftId()).getGiftName())
+                        .createBy(item.getCreateBy())
+                        .createName(sysUserRpc.getById(item.getCreateBy()).getData().getNickname())
+                        .createTime(item.getCreateTime())
+                        .updateBy(item.getUpdateBy())
+                        .updateName(sysUserRpc.getById(item.getUpdateBy()).getData().getNickname())
+                        .updateTime(item.getUpdateTime())
+                        .build());
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean deleteByIds(List<Long> ids) {
+                Long sysUserId = SecurityUtil.getUserId();
+        RoleGiftRecord roleGiftRecord = listByIds(ids).get(0);
+        update(new LambdaUpdateWrapper<RoleGiftRecord>()
+                .set(RoleGiftRecord::getIsDelete, 1)
+                .set(RoleGiftRecord::getUpdateBy, sysUserId)
+                .set(RoleGiftRecord::getUpdateTime, LocalDateTime.now())
+                .in(RoleGiftRecord::getId, ids));
+        return sendLatestGift(roleGiftRecord.getGameId(), roleGiftRecord.getServerId(), roleGiftRecord.getUserId(), roleGiftRecord.getRoleId());
+    }
+
+    private boolean sendLatestGift(Long gameId, String serverId, Long userId, String roleId) {
+        RoleGiftRecord roleGiftRecord = latestGift(gameId,serverId,userId,roleId);
+        return roleOperateService.update(new LambdaUpdateWrapper<RoleOperate>()
+                .set(RoleOperate::getSendGiftId, null == roleGiftRecord ? null : roleGiftRecord.getSendGiftId())
+                .eq(RoleOperate::getGameId, gameId)
+                .eq(RoleOperate::getServerId, serverId)
+                .eq(RoleOperate::getUserId, userId)
+                .eq(RoleOperate::getRoleId, roleId));
+    }
+
+    private RoleGiftRecord latestGift(Long gameId, String serverId, Long userId, String roleId) {
+        return getOne(new LambdaQueryWrapper<RoleGiftRecord>()
+                .eq(RoleGiftRecord::getGameId, gameId)
+                .eq(RoleGiftRecord::getServerId, serverId)
+                .eq(RoleGiftRecord::getUserId, userId)
+                .eq(RoleGiftRecord::getRoleId, roleId)
+                .eq(RoleGiftRecord::getIsDelete, 0)
+                .orderByDesc(RoleGiftRecord::getSendTime)
+                .last("LIMIT 1"));
+    }
+}

+ 149 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/RoleMailRecordServiceImpl.java

@@ -0,0 +1,149 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.zanxiang.erp.base.ErpServer;
+import com.zanxiang.erp.base.rpc.ISysUserRpc;
+import com.zanxiang.erp.security.util.SecurityUtil;
+import com.zanxiang.game.module.manage.pojo.params.RoleMailRecordAddParam;
+import com.zanxiang.game.module.manage.pojo.params.RoleMailRecordListParam;
+import com.zanxiang.game.module.manage.pojo.vo.RoleMailRecordListVO;
+import com.zanxiang.game.module.manage.service.IRoleOperateService;
+import com.zanxiang.game.module.mybatis.entity.RoleGiftRecord;
+import com.zanxiang.game.module.mybatis.entity.RoleMailRecord;
+import com.zanxiang.game.module.mybatis.entity.RoleMailRecord;
+import com.zanxiang.game.module.mybatis.entity.RoleOperate;
+import com.zanxiang.game.module.mybatis.mapper.RoleMailRecordMapper;
+import com.zanxiang.game.module.manage.service.IRoleMailRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.module.util.exception.BaseException;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 角色邮件发送记录表 服务实现类
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+@Service
+public class RoleMailRecordServiceImpl extends ServiceImpl<RoleMailRecordMapper, RoleMailRecord> implements IRoleMailRecordService {
+    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
+    private ISysUserRpc sysUserRpc;
+    @Autowired
+    private IRoleOperateService roleOperateService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addOrUpdate(RoleMailRecordAddParam param) {
+        Long sysUserId = SecurityUtil.getUserId();
+        LocalDateTime now = LocalDateTime.now();
+        if (CollectionUtils.isEmpty(param.getIds())) {
+            List<RoleMailRecord> roleMailRecordList = param.getRoleInfoList().stream()
+                    .map(item -> RoleMailRecord.builder()
+                            .gameId(item.getGameId())
+                            .serverId(item.getServerId())
+                            .userId(item.getUserId())
+                            .roleId(item.getRoleId())
+                            .sendTime(param.getSendTime())
+                            .createBy(sysUserId)
+                            .createTime(now)
+                            .updateBy(sysUserId)
+                            .updateTime(now)
+                            .build()).collect(Collectors.toList());
+            saveBatch(roleMailRecordList);
+            List<RoleOperate> roleOperateList = param.getRoleInfoList().stream()
+                    .map(item -> {
+                        RoleOperate roleOperate = RoleOperate.builder().build();
+                        RoleOperate queryOne = roleOperateService.getOne(new LambdaQueryWrapper<RoleOperate>()
+                                .eq(RoleOperate::getGameId, item.getGameId())
+                                .eq(RoleOperate::getServerId, item.getServerId())
+                                .eq(RoleOperate::getUserId, item.getUserId())
+                                .eq(RoleOperate::getRoleId, item.getRoleId())
+                                .eq(RoleOperate::getIsDelete, 0));
+                        if (null == queryOne) {
+                            roleOperate.setGameId(item.getGameId());
+                            roleOperate.setServerId(item.getServerId());
+                            roleOperate.setUserId(item.getUserId());
+                            roleOperate.setRoleId(item.getRoleId());
+                            roleOperate.setCreateBy(sysUserId);
+                            roleOperate.setCreateTime(now);
+                        } else {
+                            roleOperate = queryOne;
+                        }
+                        roleOperate.setIsSendMail(1);
+                        roleOperate.setUpdateBy(sysUserId);
+                        roleOperate.setUpdateTime(now);
+                        return roleOperate;
+                    }).collect(Collectors.toList());
+            return roleOperateService.saveOrUpdateBatch(roleOperateList);
+        } else {
+            return update(new LambdaUpdateWrapper<RoleMailRecord>()
+                    .set(RoleMailRecord::getSendTime, param.getSendTime())
+                    .set(RoleMailRecord::getUpdateBy, sysUserId)
+                    .set(RoleMailRecord::getUpdateTime, now)
+                    .in(RoleMailRecord::getId, param.getIds()));
+        }
+
+    }
+
+    @Override
+    public IPage<RoleMailRecordListVO> listOfPage(RoleMailRecordListParam param) {
+        return page(param.toPage(), new LambdaQueryWrapper<RoleMailRecord>()
+                .eq(RoleMailRecord::getGameId, param.getGameId())
+                .eq(RoleMailRecord::getServerId, param.getServerId())
+                .eq(RoleMailRecord::getUserId, param.getUserId())
+                .eq(RoleMailRecord::getRoleId, param.getRoleId())
+                .ge(null != param.getStartDateTime(), RoleMailRecord::getSendTime, param.getStartDateTime())
+                .le(null != param.getEndDateTime(), RoleMailRecord::getSendTime, param.getEndDateTime())
+                .orderByDesc(RoleMailRecord::getCreateTime))
+                .convert(item -> RoleMailRecordListVO.builder()
+                        .id(item.getId())
+                        .sendTime(item.getSendTime())
+                        .createBy(item.getCreateBy())
+                        .createName(sysUserRpc.getById(item.getCreateBy()).getData().getNickname())
+                        .createTime(item.getCreateTime())
+                        .updateBy(item.getUpdateBy())
+                        .updateName(sysUserRpc.getById(item.getUpdateBy()).getData().getNickname())
+                        .updateTime(item.getUpdateTime())
+                        .build());
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean deleteByIds(List<Long> ids) {
+        Long sysUserId = SecurityUtil.getUserId();
+        RoleMailRecord roleMailRecord = listByIds(ids).get(0);
+        update(new LambdaUpdateWrapper<RoleMailRecord>()
+                .set(RoleMailRecord::getIsDelete, 1)
+                .set(RoleMailRecord::getUpdateBy, sysUserId)
+                .set(RoleMailRecord::getUpdateTime, LocalDateTime.now())
+                .in(RoleMailRecord::getId, ids));
+        return hasMai(roleMailRecord.getGameId(), roleMailRecord.getServerId(), roleMailRecord.getUserId(), roleMailRecord.getRoleId());
+    }
+
+    private boolean hasMai(Long gameId, String serverId, Long userId, String roleId) {
+        int count = count(new LambdaQueryWrapper<RoleMailRecord>()
+                .eq(RoleMailRecord::getGameId, gameId)
+                .eq(RoleMailRecord::getServerId, serverId)
+                .eq(RoleMailRecord::getUserId, userId)
+                .eq(RoleMailRecord::getRoleId, roleId)
+                .eq(RoleMailRecord::getIsDelete, 0));
+        return roleOperateService.update(new LambdaUpdateWrapper<RoleOperate>()
+                .set(RoleOperate::getIsSendMail, count > 0 ? 1 : 0)
+                .eq(RoleOperate::getGameId, gameId)
+                .eq(RoleOperate::getServerId, serverId)
+                .eq(RoleOperate::getUserId, userId)
+                .eq(RoleOperate::getRoleId, roleId));
+    }
+}

+ 70 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/RoleOperateServiceImpl.java

@@ -0,0 +1,70 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.zanxiang.erp.security.util.SecurityUtil;
+import com.zanxiang.game.module.manage.pojo.params.RoleOperateParam;
+import com.zanxiang.game.module.mybatis.entity.RoleGiftRecord;
+import com.zanxiang.game.module.mybatis.entity.RoleOperate;
+import com.zanxiang.game.module.mybatis.mapper.RoleOperateMapper;
+import com.zanxiang.game.module.manage.service.IRoleOperateService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 角色操作表 服务实现类
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+@Service
+public class RoleOperateServiceImpl extends ServiceImpl<RoleOperateMapper, RoleOperate> implements IRoleOperateService {
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean modify(RoleOperateParam param) {
+        Long sysUserId = SecurityUtil.getUserId();
+        LocalDateTime now = LocalDateTime.now();
+        List<RoleOperate> roleOperateList = param.getRoleInfoList().stream()
+                .map(item -> {
+                    RoleOperate roleOperate = RoleOperate.builder().build();
+                    RoleOperate queryOne = getOne(new LambdaQueryWrapper<RoleOperate>()
+                            .eq(RoleOperate::getGameId, item.getGameId())
+                            .eq(RoleOperate::getServerId, item.getServerId())
+                            .eq(RoleOperate::getUserId, item.getUserId())
+                            .eq(RoleOperate::getRoleId, item.getRoleId())
+                            .eq(RoleOperate::getIsDelete, 0));
+                    if (null == queryOne) {
+                        roleOperate.setCreateBy(sysUserId);
+                        roleOperate.setCreateTime(now);
+                    } else {
+                        roleOperate = queryOne;
+                    }
+                    roleOperate.setGameId(item.getGameId());
+                    roleOperate.setServerId(item.getServerId());
+                    roleOperate.setUserId(item.getUserId());
+                    roleOperate.setRoleId(item.getRoleId());
+                    roleOperate.setIsChangeGameType(param.getIsChangeGameType());
+                    roleOperate.setIsAddCorpWechat(param.getIsAddCorpWechat());
+                    roleOperate.setAddCorpUserId(param.getAddCorpUserId());
+                    roleOperate.setUserWechat(param.getUserWechat());
+                    roleOperate.setUserPhone(param.getUserPhone());
+                    roleOperate.setIsRemoveGame(param.getIsRemoveGame());
+                    roleOperate.setIsWakeUp(param.getIsWakeUp());
+                    roleOperate.setRemark(param.getRemark());
+                    roleOperate.setPutUserId(param.getPutUserId());
+                    roleOperate.setUpdateBy(sysUserId);
+                    roleOperate.setUpdateTime(now);
+                    return roleOperate;
+                }).collect(Collectors.toList());
+        return saveOrUpdateBatch(roleOperateList);
+    }
+}

+ 69 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameGift.java

@@ -0,0 +1,69 @@
+package com.zanxiang.game.module.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+import lombok.*;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 游戏礼包表
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_game_gift")
+public class GameGift implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 游戏id
+     */
+    private Long gameId;
+
+    /**
+     * 礼包名称
+     */
+    private String giftName;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 1 删除  0正常
+     */
+    private Integer isDelete;
+
+
+}

+ 117 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/RoleAssignRecord.java

@@ -0,0 +1,117 @@
+package com.zanxiang.game.module.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+import lombok.*;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 角色指派记录表
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_role_assign_record")
+public class RoleAssignRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 游戏id
+     */
+    private Long gameId;
+
+    /**
+     * 区服id
+     */
+    private String serverId;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 角色id
+     */
+    private String roleId;
+
+    /**
+     * 注册渠道id
+     */
+    private String regAgentId;
+
+    /**
+     * 开始时间
+     */
+    private LocalDate startTime;
+
+    /**
+     * 结束时间
+     */
+    private LocalDate endTime;
+
+    /**
+     * GS
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Long gsId;
+
+    /**
+     * 客服
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Long customerServiceId;
+
+    /**
+     * 运营
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Long operUserId;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 1 删除  0正常
+     */
+    private Integer isDelete;
+
+
+}

+ 89 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/RoleGiftRecord.java

@@ -0,0 +1,89 @@
+package com.zanxiang.game.module.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+import lombok.*;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 角色礼包发送记录表
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_role_gift_record")
+public class RoleGiftRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 游戏id
+     */
+    private Long gameId;
+
+    /**
+     * 区服id
+     */
+    private String serverId;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 角色id
+     */
+    private String roleId;
+
+    /**
+     * 发送时间
+     */
+    private LocalDateTime sendTime;
+
+    /**
+     * 礼包id
+     */
+    private Long sendGiftId;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 1 删除  0正常
+     */
+    private Integer isDelete;
+
+
+}

+ 84 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/RoleMailRecord.java

@@ -0,0 +1,84 @@
+package com.zanxiang.game.module.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+import lombok.*;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 角色邮件发送记录表
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_role_mail_record")
+public class RoleMailRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 游戏id
+     */
+    private Long gameId;
+
+    /**
+     * 区服id
+     */
+    private String serverId;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 角色id
+     */
+    private String roleId;
+
+    /**
+     * 发送时间
+     */
+    private LocalDateTime sendTime;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 1 删除  0正常
+     */
+    private Integer isDelete;
+
+
+}

+ 157 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/RoleOperate.java

@@ -0,0 +1,157 @@
+package com.zanxiang.game.module.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+import lombok.*;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 角色操作表
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_role_operate")
+public class RoleOperate implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 游戏id
+     */
+    private Long gameId;
+
+    /**
+     * 区服id
+     */
+    private String serverId;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 角色id
+     */
+    private String roleId;
+
+    /**
+     * 是否发送邮件
+     */
+    private Integer isSendMail;
+
+    /**
+     * 最新发送礼物id
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Long sendGiftId;
+
+    /**
+     * 是否转端
+     */
+    private Integer isChangeGameType;
+
+    /**
+     * 是否添加企微
+     */
+    private Integer isAddCorpWechat;
+
+    /**
+     * 企微号
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Integer addCorpUserId;
+
+    /**
+     * 客户微信
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private String userWechat;
+
+    /**
+     * 客户手机
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private String userPhone;
+
+    /**
+     * 是否退游
+     */
+    private Integer isRemoveGame;
+
+    /**
+     * 是否唤醒
+     */
+    private Integer isWakeUp;
+
+    /**
+     * 备注
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private String remark;
+
+    /**
+     * GS
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Long gsId;
+
+    /**
+     * 客服
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Long customerServiceId;
+
+    /**
+     * 运营
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Long operUserId;
+
+    /**
+     * 投手
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Long putUserId;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 1 删除  0正常
+     */
+    private Integer isDelete;
+
+
+}

+ 16 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameGiftMapper.java

@@ -0,0 +1,16 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.zanxiang.game.module.mybatis.entity.GameGift;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 游戏礼包表 Mapper 接口
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+public interface GameGiftMapper extends BaseMapper<GameGift> {
+
+}

+ 16 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/RoleAssignRecordMapper.java

@@ -0,0 +1,16 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.zanxiang.game.module.mybatis.entity.RoleAssignRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 角色指派记录表 Mapper 接口
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+public interface RoleAssignRecordMapper extends BaseMapper<RoleAssignRecord> {
+
+}

+ 16 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/RoleGiftRecordMapper.java

@@ -0,0 +1,16 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.zanxiang.game.module.mybatis.entity.RoleGiftRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 角色礼包发送记录表 Mapper 接口
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+public interface RoleGiftRecordMapper extends BaseMapper<RoleGiftRecord> {
+
+}

+ 16 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/RoleMailRecordMapper.java

@@ -0,0 +1,16 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.zanxiang.game.module.mybatis.entity.RoleMailRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 角色邮件发送记录表 Mapper 接口
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+public interface RoleMailRecordMapper extends BaseMapper<RoleMailRecord> {
+
+}

+ 16 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/RoleOperateMapper.java

@@ -0,0 +1,16 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.zanxiang.game.module.mybatis.entity.RoleOperate;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 角色操作表 Mapper 接口
+ * </p>
+ *
+ * @author auto
+ * @since 2023-09-09
+ */
+public interface RoleOperateMapper extends BaseMapper<RoleOperate> {
+
+}