瀏覽代碼

功能提交: 完成运营商维护功能

杨六六 4 年之前
父節點
當前提交
a2b0480984
共有 34 個文件被更改,包括 1011 次插入51 次删除
  1. 6 0
      common/fire-dto/pom.xml
  2. 1 1
      common/fire-dto/src/main/java/com/fire/dto/FireProductInfo.java
  3. 4 0
      common/fire-dto/src/main/java/com/fire/dto/FlowAppInfo.java
  4. 51 0
      common/fire-dto/src/main/java/com/fire/dto/IpWhiteList.java
  5. 29 2
      common/fire-dto/src/main/java/com/fire/dto/OperatorMaintenance.java
  6. 4 0
      common/fire-dto/src/main/java/com/fire/dto/system/SysUser.java
  7. 22 0
      modules/admin/src/main/java/com/fire/admin/dto/CustomerLoginUserDto.java
  8. 32 0
      modules/admin/src/main/java/com/fire/admin/dto/CustomerParentUserDto.java
  9. 12 3
      modules/admin/src/main/java/com/fire/admin/dto/FlowAppInfoDto.java
  10. 30 0
      modules/admin/src/main/java/com/fire/admin/dto/IpWhiteListDto.java
  11. 54 0
      modules/admin/src/main/java/com/fire/admin/dto/OperatorMaintenanceDto.java
  12. 38 0
      modules/admin/src/main/java/com/fire/admin/mapper/IpWhiteListMapper.java
  13. 52 0
      modules/admin/src/main/java/com/fire/admin/mapper/OperatorMaintenanceMapper.java
  14. 4 0
      modules/admin/src/main/java/com/fire/admin/mapper/SysUserMapper.java
  15. 66 0
      modules/admin/src/main/java/com/fire/admin/rest/OperatorMaintenanceController.java
  16. 35 5
      modules/admin/src/main/java/com/fire/admin/rest/TestController.java
  17. 5 1
      modules/admin/src/main/java/com/fire/admin/service/ISysUserService.java
  18. 26 0
      modules/admin/src/main/java/com/fire/admin/service/IpWhiteListService.java
  19. 46 0
      modules/admin/src/main/java/com/fire/admin/service/OperatorMaintenanceService.java
  20. 4 1
      modules/admin/src/main/java/com/fire/admin/service/impl/AdditionalPaymentServiceImpl.java
  21. 1 0
      modules/admin/src/main/java/com/fire/admin/service/impl/CustomerServiceImpl.java
  22. 10 7
      modules/admin/src/main/java/com/fire/admin/service/impl/FireProductServiceImpl.java
  23. 63 11
      modules/admin/src/main/java/com/fire/admin/service/impl/FlowAppInfoServiceImpl.java
  24. 37 0
      modules/admin/src/main/java/com/fire/admin/service/impl/IpWhiteListServiceImpl.java
  25. 143 0
      modules/admin/src/main/java/com/fire/admin/service/impl/OperatorMaintenanceServiceImpl.java
  26. 56 7
      modules/admin/src/main/java/com/fire/admin/service/impl/SysUserServiceImpl.java
  27. 17 0
      modules/admin/src/main/java/com/fire/admin/util/EnumUtils.java
  28. 8 9
      modules/admin/src/main/java/com/fire/admin/util/SecurityUtil.java
  29. 9 0
      modules/admin/src/main/java/com/fire/admin/vo/CustomerInfoVo.java
  30. 14 3
      modules/admin/src/main/java/com/fire/admin/vo/FlowAppInfoVo.java
  31. 7 0
      modules/admin/src/main/resources/mapper/CustomerMapper.xml
  32. 8 1
      modules/admin/src/main/resources/mapper/FlowAppInfoMapper.xml
  33. 21 0
      modules/admin/src/main/resources/mapper/IpWhiteListMapper.xml
  34. 96 0
      modules/admin/src/main/resources/mapper/OperatorMaintennaceMapper.xml

+ 6 - 0
common/fire-dto/pom.xml

@@ -39,6 +39,12 @@
             <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>jakarta.validation</groupId>
+            <artifactId>jakarta.validation-api</artifactId>
+            <version>2.0.2</version>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 1 - 1
common/fire-dto/src/main/java/com/fire/dto/FireProductInfo.java

@@ -34,7 +34,7 @@ public class FireProductInfo extends Model<FireProductInfo> {
      * 产品zhu
      */
     @ApiModelProperty(value = "产品编号(主键)")
-    @TableId(value = "product_id", type = IdType.AUTO)
+    @TableId(value = "product_id", type = IdType.INPUT)
     private Long productId;
 
     /**

+ 4 - 0
common/fire-dto/src/main/java/com/fire/dto/FlowAppInfo.java

@@ -65,6 +65,10 @@ public class FlowAppInfo {
     @ApiModelProperty(value = "通道ID(关联的通道组id)")
     private  Long channelId;
 
+    @ApiModelProperty(value = "是否支持二次回调,默认是不支持,0,支持的话修改编号为1")
+    private Integer secondCallback;
+
+
     /********************************扩展字段***********************************/
     @ApiModelProperty(value = "客户基本信息")
     @TableField(exist = false)

+ 51 - 0
common/fire-dto/src/main/java/com/fire/dto/IpWhiteList.java

@@ -0,0 +1,51 @@
+package com.fire.dto;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @ClassName: ipWhiteList
+ * @Author: liuliu
+ * @Date: 2021/6/17 18:11
+ * @Description: TODO 客户ip 白名单
+ */
+@Data
+@TableName("ip_white_list")
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class IpWhiteList {
+
+    /**
+     * 主键
+     */
+    @TableId(value = "ip_id", type = IdType.INPUT)
+    @ApiModelProperty(value = "主键")
+    private Long ipId;
+
+    /**
+     * IP地址
+     */
+    @ApiModelProperty(value = "IP地址")
+    private String ipAddr;
+
+    /**
+     * 描述
+     */
+    @ApiModelProperty(value = "客户ip描述")
+    private String des;
+
+    /**
+     * 客户编号
+     */
+    @ApiModelProperty(value = "客户编号")
+    private Long customerId;
+
+
+}

+ 29 - 2
common/fire-dto/src/main/java/com/fire/dto/OperatorMaintenance.java

@@ -2,34 +2,61 @@ package com.fire.dto;
 
 import java.util.Date;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import javax.validation.constraints.NotNull;
 
 @ApiModel(value = "运营商系统维护表实体")
 @Data
+@TableName("operator_maintenance")
 public class OperatorMaintenance {
 
     @ApiModelProperty(value = "地区")
+    @NotNull(message = "参数 province 不能为空")
     private String province;
 
+    @NotNull(message = "参数 operator 不能为空")
     @ApiModelProperty(value = "运营商")
     private String operator;
 
     @ApiModelProperty(value = "维护状态:0-否 ;1-维护")
+    @NotNull(message = "参数 status 不能为空")
     private Integer status;
 
     @ApiModelProperty(value = "开始维护时间")
+    @NotNull(message = "参数 startTime 不能为空")
     private Date startTime;
 
     @ApiModelProperty(value = "结束维护时间")
+    @NotNull(message = "参数 endTime 不能为空")
     private Date endTime;
 
     @ApiModelProperty(value = "0 表示所有面额")
+    @NotNull(message = "参数 facePrice 不能为空")
+    @TableField(value = "face_price")
     private Integer facePrice;
 
-    @ApiModelProperty(value = "0 表示所有面额")
-    private Integer operType;
+    @ApiModelProperty(value = "维护类型:0.自动 1.手动")
+    @TableField(value = "oder_type")
+    @NotNull(message = "参数 orderType 不能为空")
+    private Integer orderType;
+
+    @ApiModelProperty(value = "修改者名称")
+    @TableField(value = "modify_user")
+    private String modifyUser;
+
+    @ApiModelProperty(value = "修改时间")
+    private String updateTime;
+
+    @ApiModelProperty(value = "创建者名称")
+    private String createUser;
+
+    @ApiModelProperty(value = "创建者时间")
+    private String createTime;
+
 
 
 }

+ 4 - 0
common/fire-dto/src/main/java/com/fire/dto/system/SysUser.java

@@ -6,8 +6,10 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
 import java.time.LocalDateTime;
@@ -25,6 +27,8 @@ import java.util.List;
 @Accessors(chain = true)
 @TableName("sys_user")
 @JsonInclude(JsonInclude.Include.NON_EMPTY)
+@NoArgsConstructor
+@AllArgsConstructor
 public class SysUser extends Model<SysUser> {
 
     private static final long serialVersionUID = 1L;

+ 22 - 0
modules/admin/src/main/java/com/fire/admin/dto/CustomerLoginUserDto.java

@@ -0,0 +1,22 @@
+package com.fire.admin.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * @ClassName: CustomerLoginUserDto
+ * @Author: liuliu
+ * @Date: 2021/6/25 11:28
+ * @Description: TODO 客户登录用户网络传输对象
+ */
+@Data
+@Builder
+public class CustomerLoginUserDto {
+
+    private Long userId;
+
+    private String username;
+
+    private Integer type;
+
+}

+ 32 - 0
modules/admin/src/main/java/com/fire/admin/dto/CustomerParentUserDto.java

@@ -0,0 +1,32 @@
+package com.fire.admin.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * @ClassName: CustomerUserDto
+ * @Author: liuliu
+ * @Date: 2021/6/24 18:25
+ * @Description: TODO 用户中间人网络传输对象
+ */
+
+@Data
+@Builder
+public class CustomerParentUserDto {
+
+    @ApiModelProperty(value = "合作伙伴[中间人]ID")
+    private Long partnerId;
+
+
+    @ApiModelProperty(value = "合作伙伴姓名(中间人姓名)")
+    private String partnerName;
+
+
+    /**
+     * 1 :管理员  2:客户  3: 中间人
+     */
+    @ApiModelProperty(value = "值为3 ,表示中间人")
+    private Integer type;
+
+}

+ 12 - 3
modules/admin/src/main/java/com/fire/admin/dto/FlowAppInfoDto.java

@@ -3,6 +3,8 @@ package com.fire.admin.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * @author: liuliu
  * @ClassName: FlowAppInfoDto
@@ -15,6 +17,9 @@ public class FlowAppInfoDto {
     @ApiModelProperty(value = "接入ID号(修改必传)")
     private Long flowAppId;
 
+    @ApiModelProperty(value = "客户ID")
+    private Long customerId;
+
     @ApiModelProperty(value = "应用ID")
     private String appId;
 
@@ -30,8 +35,6 @@ public class FlowAppInfoDto {
     @ApiModelProperty(value = "回调URL")
     private String callbackUrl;
 
-    @ApiModelProperty(value = "ip白名单")
-    private String ipAddress;
 
     @ApiModelProperty(value = "流量下发通道名称(冗余字段主要用于显示,名称根据通道id名称获取)")
     private String dispatchChannel;
@@ -43,6 +46,12 @@ public class FlowAppInfoDto {
     private Integer time;
 
     @ApiModelProperty(value = "通道ID(关联的通道组id)")
-    private  Long channelId;
+    private Long channelId;
+
+    @ApiModelProperty(value = "ip地址")
+    private List<IpWhiteListDto> ipWhiteListList;
+
+    @ApiModelProperty(value = "是否支持二次回调,默认是不支持,0,支持的话修改编号为1")
+    private Integer secondCallback;
 
 }

+ 30 - 0
modules/admin/src/main/java/com/fire/admin/dto/IpWhiteListDto.java

@@ -0,0 +1,30 @@
+package com.fire.admin.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @ClassName: IpWhiteListDto
+ * @Author: liuliu
+ * @Date: 2021/6/24 11:58
+ * @Description: TODO ip 地址网络传输层
+ */
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class IpWhiteListDto {
+
+    /**
+     * IP地址
+     */
+    @ApiModelProperty(value = "IP地址")
+    private String ipAddr;
+
+    /**
+     * 描述
+     */
+    @ApiModelProperty(value = "客户ip描述")
+    private String des;
+
+
+}

+ 54 - 0
modules/admin/src/main/java/com/fire/admin/dto/OperatorMaintenanceDto.java

@@ -0,0 +1,54 @@
+package com.fire.admin.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+
+/**
+ * @ClassName: OperatorMaintenanceDto
+ * @Author: liuliu
+ * @Date: 2021/6/24 16:28
+ * @Description: TODO 运营商维护网络传输对象
+ */
+@Data
+public class OperatorMaintenanceDto {
+
+    @ApiModelProperty(value = "地区")
+    private String province;
+
+
+    @ApiModelProperty(value = "运营商")
+    private String operator;
+
+    @ApiModelProperty(value = "0 表示所有面额")
+    private Integer facePrice;
+
+    @ApiModelProperty(value = "维护状态:0-否 ;1-维护")
+    private Integer status;
+
+    @ApiModelProperty(value = "开始维护时间")
+    private String startTime;
+
+    @ApiModelProperty(value = "结束维护时间")
+    private String endTime;
+
+
+    @ApiModelProperty(value = "维护类型:0.自动 1.手动")
+    private Integer orderType;
+
+    /**
+     * 每页记录条数
+     */
+    @ApiModelProperty(value = "每页记录条数")
+    private Integer size;
+
+    /**
+     * 当前页码
+     */
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+}

+ 38 - 0
modules/admin/src/main/java/com/fire/admin/mapper/IpWhiteListMapper.java

@@ -0,0 +1,38 @@
+package com.fire.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fire.dto.IpWhiteList;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ * @ClassName: IpWhiteListMapper
+ * @Author: liuliu
+ * @Date: 2021/6/24 10:12
+ * @Description: TODO ip白名单
+ */
+@Mapper
+public interface IpWhiteListMapper extends BaseMapper<IpWhiteList> {
+
+    /**
+     * @descible: TODO  删除某一个客户的所有ip白名单
+     * @param:	customerId
+     * @return: void
+     * @author: liuliu
+     * @date: 2021-06-24 10:54
+     */
+    void deleteIpWhiteList(Long customerId);
+
+
+    /**
+     * @descible: TODO 获取某个客户的ip列表
+     * @param:	customerId	 客户编号
+     * @return: java.util.List<com.fire.dto.IpWhiteList> ip 集合
+     * @author: liuliu
+     * @date: 2021-06-24 12:22
+     */
+    @Select("select ip_addr,des from ip_white_list where customer_id=#{customerId}")
+    List<IpWhiteList> getIpWhiteByCustomerId(Long customerId);
+}

+ 52 - 0
modules/admin/src/main/java/com/fire/admin/mapper/OperatorMaintenanceMapper.java

@@ -0,0 +1,52 @@
+package com.fire.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fire.admin.dto.OperatorMaintenanceDto;
+import com.fire.dto.OperatorMaintenance;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @ClassName: OperatorMaintenanceMapper
+ * @Author: liuliu
+ * @Date: 2021/6/24 14:21
+ * @Description: TODO 运营商系统维护
+ */
+@Mapper
+public interface OperatorMaintenanceMapper extends BaseMapper<OperatorMaintenance> {
+
+    /**
+     * @descible: TODO 手动添加或者修改运营商维护信息
+     * @param: OperatorMaintenance
+     * @return: int
+     * @author: liuliu
+     * @date: 2021-06-24 14:22
+     */
+    int saveOrUpdateOperatorMaintenance(@Param("param") OperatorMaintenance OperatorMaintenance);
+
+
+    /**
+     * @descible: TODO 分月获取运营商维护信息
+     * @param: page
+     * @param: operatorMaintenanceDto
+     * @return: com.baomidou.mybatisplus.core.metadata.IPage<com.fire.dto.OperatorMaintenance>
+     * @author: liuliu
+     * @date: 2021-06-25 14:47
+     */
+    IPage<OperatorMaintenance> selectOperatorMaintenancPage(Page page, @Param("select") OperatorMaintenanceDto operatorMaintenanceDto);
+
+
+    /**
+     * @descible: TODO 删除运营商系统维护
+     * @param: OperatorMaintenance
+     * @return: int
+     * @author: liuliu
+     * @date: 2021-06-25 14:48
+     */
+    @Delete("delete from operator_maintenance where face_price=#{param.facePrice} and operator=#{param.operator} and province=#{param.province} and oder_type=1")
+    int deleteOperatorMaintenance(@Param("param") OperatorMaintenanceDto operatorMaintenanceDto);
+
+}

+ 4 - 0
modules/admin/src/main/java/com/fire/admin/mapper/SysUserMapper.java

@@ -8,6 +8,7 @@ import com.fire.dto.system.SysUser;
 import org.apache.ibatis.annotations.Insert;
 import org.apache.ibatis.annotations.Options;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Repository;
 
 /**
@@ -33,4 +34,7 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
     IPage<SysUser> getUserVosPage(Page page, @Param("query") UserDTO userDTO);
 
 
+    @Select("select username from sys_user where user_id=#{userId}")
+    String getCustomerUserName(Long userId);
+
 }

+ 66 - 0
modules/admin/src/main/java/com/fire/admin/rest/OperatorMaintenanceController.java

@@ -0,0 +1,66 @@
+package com.fire.admin.rest;
+
+import com.fire.admin.dto.OperatorMaintenanceDto;
+import com.fire.admin.service.OperatorMaintenanceService;
+import com.fire.dto.OperatorMaintenance;
+import com.fire.dto.enums.Status;
+import com.fire.dto.response.BaseResponse;
+import com.fire.dto.response.BaseRestResponse;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.FieldError;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * @ClassName: OperatorMaintenanceController
+ * @Author: liuliu
+ * @Date: 2021/6/24 15:04
+ * @Description: TODO
+ */
+@RestController
+@Api(tags = "运营商系统维护")
+@RequestMapping("/operator")
+public class OperatorMaintenanceController {
+
+    private OperatorMaintenanceService operatorMaintenanceService;
+
+    @Autowired
+    public OperatorMaintenanceController(OperatorMaintenanceService operatorMaintenanceService) {
+        this.operatorMaintenanceService = operatorMaintenanceService;
+    }
+
+    @ApiOperation("新增修改维护信息")
+    @PostMapping
+    public BaseRestResponse savrOrUpdateOperatorMaintenance(@Valid @RequestBody OperatorMaintenance operatorMaintenance, BindingResult bindingResult) {
+
+        if (bindingResult.hasErrors()) {
+            FieldError fieldError = bindingResult.getFieldError();
+            //获取验证失败字段名
+            String field = fieldError.getField();
+            //获取验证失败的message
+            String defaultMessage = fieldError.getDefaultMessage();
+            return BaseRestResponse.error(Status.PARAM_LOSS.status(), defaultMessage);
+
+        }
+        return new BaseRestResponse(operatorMaintenanceService.operatorMaintenanceServiceSaveOrUpdate(operatorMaintenance));
+    }
+
+
+    @ApiOperation("分页获取维护信息")
+    @GetMapping("/info")
+    public BaseRestResponse getOperatorMaintenance(OperatorMaintenanceDto operatorMaintenanceDto) {
+        return new BaseRestResponse(operatorMaintenanceService.queryOperatorMaintenancePage(operatorMaintenanceDto));
+    }
+
+
+    @ApiOperation("删除运营商维护信息,必须传递参数为:运营商,面额,地区")
+    @DeleteMapping
+    public BaseResponse operatorMaintenanceDtoRemove(@RequestBody OperatorMaintenanceDto operatorMaintenanceDto) {
+        operatorMaintenanceService.removeOperatorMaintenance(operatorMaintenanceDto);
+        return new BaseResponse();
+    }
+}

+ 35 - 5
modules/admin/src/main/java/com/fire/admin/rest/TestController.java

@@ -2,8 +2,10 @@ package com.fire.admin.rest;
 
 import cn.hutool.core.util.RandomUtil;
 import com.fire.admin.dto.CustomerProductDto;
+import com.fire.admin.dto.IpWhiteListDto;
 import com.fire.admin.mapper.CustomerProductInfoMapper;
 import com.fire.admin.util.AliyunOSSUtil;
+import com.fire.admin.util.EnumUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.SneakyThrows;
@@ -15,7 +17,10 @@ import org.springframework.web.multipart.support.StandardMultipartHttpServletReq
 import java.io.File;
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author: liuliu
@@ -44,13 +49,38 @@ public class TestController {
     }
 
 
-
     public static void main(String[] args) {
 
-        BigDecimal b=new BigDecimal(10);
-        BigDecimal c=new BigDecimal(3);
-        System.out.println("b = " +b.divide(c,2 ,BigDecimal.ROUND_DOWN));
-
+        BigDecimal b = new BigDecimal(10);
+        BigDecimal c = new BigDecimal(3);
+        System.out.println("b = " + b.divide(c, 2, BigDecimal.ROUND_DOWN));
+
+   /*     String str = "q,b,c";
+        List<String> strings = Arrays.asList(str.split(","));
+        strings.forEach(s -> {
+            System.out.println("s = " + s);
+        });
+
+        List<IpWhiteListDto> list = new ArrayList<>();
+        IpWhiteListDto ip2 = new IpWhiteListDto();
+        IpWhiteListDto ip3 = new IpWhiteListDto();
+        IpWhiteListDto ip4 = new IpWhiteListDto();
+        IpWhiteListDto ip5 = new IpWhiteListDto();
+        ip2.setIpAddr("192.168.1.1");
+        ip3.setIpAddr("192.168.1.2");
+        ip4.setIpAddr("192.168.1.3");
+        ip5.setIpAddr("192.168.1.4");
+
+        list.add(ip2);
+        list.add(ip3);
+        list.add(ip4);
+        list.add(ip5);
+
+        String collect = list.stream().map(ipWhiteListDto -> ipWhiteListDto.getIpAddr()+";").collect(Collectors.joining());
+        System.out.println("collect = " + collect);*/
+
+        String convertName = EnumUtils.convertName("23");
+        System.out.println("convertName = " + convertName);
     }
 
 }

+ 5 - 1
modules/admin/src/main/java/com/fire/admin/service/ISysUserService.java

@@ -1,5 +1,6 @@
 package com.fire.admin.service;
 
+import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -136,6 +137,9 @@ public interface ISysUserService extends IService<SysUser> {
     * @Author: liuliu
     * @Date: 2021/6/16 17:46
     */
-    List<SysUser>  queryUserByType(Integer type);
+    List queryUserByType(Integer type);
+
+
+
 
 }

+ 26 - 0
modules/admin/src/main/java/com/fire/admin/service/IpWhiteListService.java

@@ -0,0 +1,26 @@
+package com.fire.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fire.dto.IpWhiteList;
+
+import java.util.List;
+
+/**
+ * @ClassName: IpWhiteListService
+ * @Author: liuliu
+ * @Date: 2021/6/24 10:14
+ * @Description: TODO 客户ip白名单service
+ */
+public interface IpWhiteListService extends IService<IpWhiteList> {
+
+    /**
+     * @descible: TODO 对客户的ip白名单进行处理,删除以前的ip白名单,新增当前传入的ip白名单
+     * @param: ipWhiteLists ip白名单集合
+     * @param: customerId 客户id
+     * @return: int
+     * @author: liuliu
+     * @date: 2021-06-24 10:47
+     */
+    void saveCustomerIpWhiteList(List<IpWhiteList> ipWhiteLists, Long customerId);
+
+}

+ 46 - 0
modules/admin/src/main/java/com/fire/admin/service/OperatorMaintenanceService.java

@@ -0,0 +1,46 @@
+package com.fire.admin.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fire.admin.dto.OperatorMaintenanceDto;
+import com.fire.dto.OperatorMaintenance;
+
+/**
+ * @ClassName: OperatorMaintenance
+ * @Author: liuliu
+ * @Date: 2021/6/24 14:44
+ * @Description: TODO 运营商系统维护service
+ */
+
+public interface OperatorMaintenanceService extends IService<OperatorMaintenance> {
+
+
+    /**
+     * @descible: TODO 运营商系统维护 saveOdUpdate
+     * @param:	operatorMaintenanceService
+     * @return: int
+     * @author: liuliu
+     * @date: 2021-06-24 14:45
+     */
+    int operatorMaintenanceServiceSaveOrUpdate(OperatorMaintenance operatorMaintenance);
+
+
+    /**
+     * @descible: TODO 分页获取维护信息
+     * @param:	operatorMaintenanceDto	维护信息网络传输对象
+     * @return: com.baomidou.mybatisplus.core.metadata.IPage<com.fire.dto.OperatorMaintenance>
+     * @author: liuliu
+     * @date: 2021-06-24 16:38
+     */
+    IPage<OperatorMaintenance> queryOperatorMaintenancePage(OperatorMaintenanceDto operatorMaintenanceDto);
+
+
+    /**
+     * @descible: TODO 删除运营商维护信息
+     * @param:	operatorMaintenance
+     * @return: int
+     * @author: liuliu
+     * @date: 2021-06-25 14:52
+     */
+    void removeOperatorMaintenance(OperatorMaintenanceDto operatorMaintenanceDto);
+}

+ 4 - 1
modules/admin/src/main/java/com/fire/admin/service/impl/AdditionalPaymentServiceImpl.java

@@ -161,7 +161,10 @@ public class AdditionalPaymentServiceImpl extends ServiceImpl<AdditionalPaymentM
 
         Page page = new Page();
         //  对前端页码及每页显示的数量进行处理
-        if (ObjectUtil.isNotEmpty(additionalPaymentDto.getCurrent()) && ObjectUtil.isNotEmpty(additionalPaymentDto.getSize())) {
+        if (ObjectUtil.isNotEmpty(additionalPaymentDto.getCurrent()) || ObjectUtil.isNotEmpty(additionalPaymentDto.getSize())) {
+            if(ObjectUtil.isEmpty(additionalPaymentDto.getSize())){
+                additionalPaymentDto.setSize(10);
+            }
             page.setSize(additionalPaymentDto.getSize());
             page.setCurrent(additionalPaymentDto.getCurrent());
         }

+ 1 - 0
modules/admin/src/main/java/com/fire/admin/service/impl/CustomerServiceImpl.java

@@ -176,6 +176,7 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, CustomerInf
                 .updator(SecurityUtil.getUser().getUsername())
                 .updateTime(DateUtils.strformatDatetime(LocalDateTime.now()))
                 .partnerCommission(customerDto.getPartnerCommission())
+                .userId(customerDto.getUserId())
                 .priceCheck(customerDto.getPriceCheck()).build();
 
         int count = baseMapper.updateById(customerInfo);

+ 10 - 7
modules/admin/src/main/java/com/fire/admin/service/impl/FireProductServiceImpl.java

@@ -24,10 +24,13 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.messaging.support.MessageBuilder;
 import org.springframework.stereotype.Service;
 import redis.clients.jedis.JedisCluster;
+
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.stream.Collectors;
+
+import static com.fire.common.constants.RocketTags.CONSUMER_PRODUCT_TAG;
 import static com.fire.common.constants.RocketTags.PRODUCT_TAG;
 import static com.fire.common.constants.RocketTopic.UPDATE_TOPIC;
 import static com.fire.dto.enums.RedisKey.GLOBAL_ID_INCR;
@@ -87,7 +90,7 @@ public class FireProductServiceImpl extends ServiceImpl<FireProductMapper, FireP
 
         if (ObjectUtil.hasEmpty(productInfos)) {
             FireProductInfo productInfo = FireProductInfo.builder().packageId(packageId)
-                    .productId(  jedisCluster.incr(GLOBAL_ID_INCR.key()))
+                    .productId(jedisCluster.incr(GLOBAL_ID_INCR.key()))
                     .productName(fireProductInfoDto.getProductName())
                     .productType(fireProductInfoDto.getProductType())
                     .productPrice(fireProductInfoDto.getProductPrice())
@@ -101,7 +104,7 @@ public class FireProductServiceImpl extends ServiceImpl<FireProductMapper, FireP
             int count = baseMapper.insert(productInfo);
             if (count > 0) {
                 // TODO 发送消息到 产品的 TOPIC
-                rocketMQTemplate.send(UPDATE_TOPIC + ":" + PRODUCT_TAG, MessageBuilder.withPayload(PRODUCT_TAG).build());
+                rocketMQTemplate.send(UPDATE_TOPIC + ":" + CONSUMER_PRODUCT_TAG, MessageBuilder.withPayload(CONSUMER_PRODUCT_TAG).build());
             }
         } else {
             log.info("--------  产品信息已经存在,添加产品失败 -----------------");
@@ -181,7 +184,7 @@ public class FireProductServiceImpl extends ServiceImpl<FireProductMapper, FireP
         boolean flag = this.saveOrUpdate(productInfo);
         if (flag) {
             //  TODO 发送消息到topic
-            rocketMQTemplate.send(UPDATE_TOPIC + ":" + PRODUCT_TAG, MessageBuilder.withPayload(PRODUCT_TAG).build());
+            rocketMQTemplate.send(UPDATE_TOPIC + ":" + CONSUMER_PRODUCT_TAG, MessageBuilder.withPayload(CONSUMER_PRODUCT_TAG).build());
         }
         return flag;
     }
@@ -195,7 +198,7 @@ public class FireProductServiceImpl extends ServiceImpl<FireProductMapper, FireP
      * @Date: 2021/5/28 17:49
      */
     @Override
-    public List<FireProductInfoVo> getProductAll( Long customerId) {
+    public List<FireProductInfoVo> getProductAll(Long customerId) {
 
         // TODO  构建返回的对象
         List<FireProductInfoVo> ProductVolist = Lists.newArrayList();
@@ -224,10 +227,10 @@ public class FireProductServiceImpl extends ServiceImpl<FireProductMapper, FireP
         FireProductInfo productInfo = FireProductInfo.builder().productId(productId)
                 .isDelete(1).build();
         int count = baseMapper.updateById(productInfo);
-        if(count>0){
+        if (count > 0) {
             // TODO 发送消息到 topic
-            log.info("产品编号为:【{}】进行了逻辑删除",productId);
-            rocketMQTemplate.send(UPDATE_TOPIC + ":" + PRODUCT_TAG, MessageBuilder.withPayload(PRODUCT_TAG).build());
+            log.info("产品编号为:【{}】进行了逻辑删除", productId);
+            rocketMQTemplate.send(UPDATE_TOPIC + ":" + CONSUMER_PRODUCT_TAG, MessageBuilder.withPayload(CONSUMER_PRODUCT_TAG).build());
         }
 
     }

+ 63 - 11
modules/admin/src/main/java/com/fire/admin/service/impl/FlowAppInfoServiceImpl.java

@@ -6,20 +6,36 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fire.admin.dto.FlowAppInfoDto;
+import com.fire.admin.dto.IpWhiteListDto;
 import com.fire.admin.mapper.FlowAppMapper;
 import com.fire.admin.service.ChannelGroupService;
 import com.fire.admin.service.FlowAppInfoService;
+import com.fire.admin.service.IpWhiteListService;
 import com.fire.admin.vo.FlowAppInfoVo;
+import com.fire.common.exception.BaseException;
 import com.fire.dto.ChannelGroup;
 import com.fire.dto.FlowAppInfo;
+import com.fire.dto.IpWhiteList;
+import com.fire.dto.enums.Status;
+import com.google.common.collect.Lists;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.rocketmq.spring.core.RocketMQTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.messaging.support.MessageBuilder;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import redis.clients.jedis.JedisCluster;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import static com.fire.common.constants.RocketTags.CONSUMER_PRODUCT_TAG;
+import static com.fire.common.constants.RocketTags.PRODUCT_TAG;
+import static com.fire.common.constants.RocketTopic.UPDATE_TOPIC;
+import static com.fire.dto.enums.RedisKey.GLOBAL_ID_INCR;
+
 /**
  * @author: liuliu
  * @ClassName: FlowAppInfoServiceImpl
@@ -31,12 +47,21 @@ import java.util.stream.Collectors;
 public class FlowAppInfoServiceImpl extends ServiceImpl<FlowAppMapper, FlowAppInfo> implements FlowAppInfoService {
 
 
-
     private ChannelGroupService channelGroupService;
 
+    private IpWhiteListService ipWhiteListService;
+
+    private RocketMQTemplate rocketMQTemplate;
+
+    private JedisCluster jedisCluster;
+
     @Autowired
-    public  FlowAppInfoServiceImpl(ChannelGroupService channelGroupService){
-        this.channelGroupService=channelGroupService;
+    public FlowAppInfoServiceImpl(ChannelGroupService channelGroupService, IpWhiteListService ipWhiteListService,
+                                  RocketMQTemplate rocketMQTemplate, JedisCluster jedisCluster) {
+        this.channelGroupService = channelGroupService;
+        this.ipWhiteListService = ipWhiteListService;
+        this.rocketMQTemplate = rocketMQTemplate;
+        this.jedisCluster = jedisCluster;
     }
 
     /**
@@ -53,16 +78,16 @@ public class FlowAppInfoServiceImpl extends ServiceImpl<FlowAppMapper, FlowAppIn
         IPage<FlowAppInfoVo> flowAppInfoVoIPage = baseMapper.queryFlowAppInfoPage(page, customerName);
 
         // TODO  元数据
-        List<FlowAppInfoVo> flowAppInfoVoList= flowAppInfoVoIPage.getRecords();
+        List<FlowAppInfoVo> flowAppInfoVoList = flowAppInfoVoIPage.getRecords();
 
         List<Long> channelGroupIds = JSONArray.parseArray(flowAppInfoVoList.stream().map(FlowAppInfoVo::getChannelId).collect(Collectors.toList()).toString(), Long.class);
 
         List<ChannelGroup> channelGroups = channelGroupService.queryChannelGroup(channelGroupIds);
 
-        flowAppInfoVoList.forEach(app->{
-            channelGroups.forEach(channel->{
-                if(ObjectUtil.isNotEmpty(app.getChannelId()) && ObjectUtil.isNotEmpty(channel.getChannelGroupId())){
-                    if(app.getChannelId().longValue() == channel.getChannelGroupId().longValue()){
+        flowAppInfoVoList.forEach(app -> {
+            channelGroups.forEach(channel -> {
+                if (ObjectUtil.isNotEmpty(app.getChannelId()) && ObjectUtil.isNotEmpty(channel.getChannelGroupId())) {
+                    if (app.getChannelId().longValue() == channel.getChannelGroupId().longValue()) {
                         app.setGroupName(channel.getGroupName());
                     }
                 }
@@ -80,6 +105,7 @@ public class FlowAppInfoServiceImpl extends ServiceImpl<FlowAppMapper, FlowAppIn
      * @Date: 2021/5/26 10:16
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void updateFlowAppInfo(FlowAppInfoDto flowAppInfoDto) {
         FlowAppInfo appInfo = FlowAppInfo.builder()
                 .flowAppId(flowAppInfoDto.getFlowAppId())
@@ -88,20 +114,46 @@ public class FlowAppInfoServiceImpl extends ServiceImpl<FlowAppMapper, FlowAppIn
                 .status(flowAppInfoDto.getStatus())
                 .appName(flowAppInfoDto.getAppName())
                 .callbackUrl(flowAppInfoDto.getCallbackUrl())
-                .ipAddress(flowAppInfoDto.getIpAddress())
+                .ipAddress(formatIps(flowAppInfoDto.getIpWhiteListList()))
                 .dispatchChannel(flowAppInfoDto.getDispatchChannel())
                 .totalCount(flowAppInfoDto.getTotalCount())
                 .time(flowAppInfoDto.getTime())
-                .channelId(flowAppInfoDto.getChannelId()).build();
+                .channelId(flowAppInfoDto.getChannelId())
+                .secondCallback(flowAppInfoDto.getSecondCallback()).build();
         int count = baseMapper.updateById(appInfo);
+        List<IpWhiteList> list = Lists.newArrayList();
+        flowAppInfoDto.getIpWhiteListList().forEach(ip -> {
+            IpWhiteList whiteList = IpWhiteList.builder().ipId(jedisCluster.incr(GLOBAL_ID_INCR.key()))
+                    .des(ip.getDes())
+                    .ipAddr(ip.getIpAddr())
+                    .customerId(flowAppInfoDto.getCustomerId()).build();
+            list.add(whiteList);
+        });
+        ipWhiteListService.saveCustomerIpWhiteList(list, flowAppInfoDto.getCustomerId());
+
         if (count > 0) {
             log.info("客户接入信息修改,修改信息为:【{}】", appInfo.toString());
             // TODO 发送消息到 客户接入 topic
-
+            rocketMQTemplate.send(UPDATE_TOPIC + ":" + CONSUMER_PRODUCT_TAG, MessageBuilder.withPayload(CONSUMER_PRODUCT_TAG).build());
         }
 
 
     }
 
+    /**
+     * @descible: TODO 将 list 集合的ip地址转换为 string
+     * @param: list
+     * @return: java.lang.String
+     * @author: liuliu
+     * @date: 2021-06-24 13:22
+     */
+    private String formatIps(List<IpWhiteListDto> list) {
+        if(!list.isEmpty()){
+            return list.stream().map(ipWhiteListDto -> ipWhiteListDto.getIpAddr().concat(";")).collect(Collectors.joining());
+        }else {
+            throw new BaseException(Status.PARAM_LOSS.status(),Status.PARAM_LOSS.message());
+        }
+
+    }
 
 }

+ 37 - 0
modules/admin/src/main/java/com/fire/admin/service/impl/IpWhiteListServiceImpl.java

@@ -0,0 +1,37 @@
+package com.fire.admin.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fire.admin.mapper.IpWhiteListMapper;
+import com.fire.admin.service.IpWhiteListService;
+import com.fire.dto.IpWhiteList;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @ClassName: IpWhiteListServiceImpl
+ * @Author: liuliu
+ * @Date: 2021/6/24 10:41
+ * @Description: TODO 客户ip白名单的控制层
+ */
+@Service
+public class IpWhiteListServiceImpl extends ServiceImpl<IpWhiteListMapper, IpWhiteList> implements IpWhiteListService {
+
+
+    /**
+     * @descible: TODO 对客户的ip白名单进行处理,删除以前的ip白名单,新增当前传入的ip白名单
+     * @param: ipWhiteLists ip白名单集合
+     * @param: customerId 客户id
+     * @return: int
+     * @author: liuliu
+     * @date: 2021-06-24 10:47
+     */
+    @Override
+    public void saveCustomerIpWhiteList(List<IpWhiteList> ipWhiteLists, Long customerId) {
+        // TODO 删除之前的客户ip白名单
+        baseMapper.deleteIpWhiteList(customerId);
+        // TODO 新增当前客户的ip白名单
+        saveBatch(ipWhiteLists);
+    }
+}

+ 143 - 0
modules/admin/src/main/java/com/fire/admin/service/impl/OperatorMaintenanceServiceImpl.java

@@ -0,0 +1,143 @@
+package com.fire.admin.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fire.admin.dto.OperatorMaintenanceDto;
+import com.fire.admin.mapper.OperatorMaintenanceMapper;
+import com.fire.admin.service.OperatorMaintenanceService;
+import com.fire.admin.util.EnumUtils;
+import com.fire.admin.util.SecurityUtil;
+import com.fire.common.exception.BaseException;
+import com.fire.dto.OperatorMaintenance;
+import com.fire.dto.enums.Status;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.rocketmq.spring.core.RocketMQTemplate;
+import org.springframework.messaging.support.MessageBuilder;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+import static com.fire.common.constants.RocketTags.MAINTENANCE_TAG;
+import static com.fire.common.constants.RocketTopic.UPDATE_TOPIC;
+
+/**
+ * @ClassName: OperatorMaintenanceServiceImpl
+ * @Author: liuliu
+ * @Date: 2021/6/24 14:46
+ * @Description: TODO
+ */
+@Service
+@Slf4j
+public class OperatorMaintenanceServiceImpl extends ServiceImpl<OperatorMaintenanceMapper, OperatorMaintenance> implements OperatorMaintenanceService {
+
+    @Resource
+    private RocketMQTemplate rocketMQTemplate;
+
+    /**
+     * @descible: TODO 运营商系统维护 saveOdUpdate
+     * @param: operatorMaintenanceService
+     * @return: int
+     * @author: liuliu
+     * @date: 2021-06-24 14:45
+     */
+    @Override
+    public int operatorMaintenanceServiceSaveOrUpdate(OperatorMaintenance operatorMaintenance) {
+        if (ObjectUtil.isNotEmpty(operatorMaintenance)) {
+            // TODO 设置维护类型为手动
+            operatorMaintenance.setOrderType(1);
+          /*  operatorMaintenance.setCreateUser(SecurityUtil.getUser().getUsername());
+            operatorMaintenance.setModifyUser(SecurityUtil.getUser().getUsername());*/
+            operatorMaintenance.setCreateUser("admin");
+            operatorMaintenance.setModifyUser("admin");
+            operatorMaintenance.setProvince(EnumUtils.convert(operatorMaintenance.getProvince()));
+            if (ObjectUtil.isNotEmpty(operatorMaintenance.getOperator())) {
+                operatorMaintenance.setOperator(getOperatorName(operatorMaintenance.getOperator()));
+            }
+            log.info("添加的维护信息为:【{}】", operatorMaintenance.toString());
+            int count = baseMapper.saveOrUpdateOperatorMaintenance(operatorMaintenance);
+            if (count > 0) {
+                // TODO 发送维护信息更新到topic
+                rocketMQTemplate.send(UPDATE_TOPIC + ":" + MAINTENANCE_TAG, MessageBuilder.withPayload(MAINTENANCE_TAG).build());
+            }
+            return count;
+        } else {
+            throw new BaseException(Status.PARAM_LOSS.status(), Status.PARAM_LOSS.message());
+        }
+    }
+
+    /**
+     * @descible: TODO 通过运营商编号变成运营商的名称
+     * @param: operator
+     * @return: java.lang.String
+     * @author: liuliu
+     * @date: 2021-06-25 14:06
+     */
+    private String getOperatorName(String operator) {
+        switch (operator) {
+            case "1":
+                return "移动";
+            case "2":
+                return "联通";
+            case "3":
+                return "电信";
+            default:
+                log.info("前端传递的运营商编号有误,1 :移动  2 :联通  3 :电信");
+                throw new BaseException("577", "运营商编号有误");
+        }
+    }
+
+
+    /**
+     * @descible: TODO 分页获取维护信息
+     * @param: operatorMaintenanceDto    维护信息网络传输对象
+     * @return: com.baomidou.mybatisplus.core.metadata.IPage<com.fire.dto.OperatorMaintenance>
+     * @author: liuliu
+     * @date: 2021-06-24 16:38
+     */
+    @Override
+    public IPage<OperatorMaintenance> queryOperatorMaintenancePage(OperatorMaintenanceDto operatorMaintenanceDto) {
+        Page page = new Page();
+        if (ObjectUtil.isNotEmpty(operatorMaintenanceDto.getCurrent()) || ObjectUtil.isNotEmpty(operatorMaintenanceDto.getSize())) {
+            if (ObjectUtil.isEmpty(operatorMaintenanceDto.getSize())) {
+                operatorMaintenanceDto.setSize(10);
+            }
+            page.setCurrent(operatorMaintenanceDto.getCurrent());
+            page.setSize(operatorMaintenanceDto.getSize());
+        }
+        if (ObjectUtil.isNotEmpty(operatorMaintenanceDto.getOperator())) {
+            operatorMaintenanceDto.setOperator(getOperatorName(operatorMaintenanceDto.getOperator()));
+        }
+        log.info("分页获取维护信息,请求参数为:【{}】", operatorMaintenanceDto.toString());
+        operatorMaintenanceDto.setProvince(EnumUtils.convert(operatorMaintenanceDto.getProvince()));
+        IPage<OperatorMaintenance> operatorMaintenanceIPage = baseMapper.selectOperatorMaintenancPage(page, operatorMaintenanceDto);
+        operatorMaintenanceIPage.getRecords().forEach(operator -> operator.setProvince(EnumUtils.convertName(operator.getProvince())));
+        return operatorMaintenanceIPage;
+    }
+
+
+    /**
+     * @descible: TODO 删除运营商维护信息
+     * @param: operatorMaintenance
+     * @return: int
+     * @author: liuliu
+     * @date: 2021-06-25 14:53
+     */
+    @Override
+    public void removeOperatorMaintenance(OperatorMaintenanceDto operatorMaintenanceDto) {
+        if (ObjectUtil.isNotEmpty(operatorMaintenanceDto.getOperator()) && ObjectUtil.isNotEmpty(operatorMaintenanceDto.getFacePrice()) && ObjectUtil.isNotEmpty(operatorMaintenanceDto.getProvince())) {
+            operatorMaintenanceDto.setProvince(EnumUtils.convert(operatorMaintenanceDto.getProvince()));
+            int count = baseMapper.deleteOperatorMaintenance(operatorMaintenanceDto);
+            if (count > 0) {
+                // TODO 删除维护信息更新到topic
+                log.info("删除维护信息,省份为:【{}】,面额为:【{}】 ,运营商为:【{}】,发送消息到指定的 topic", EnumUtils.convertName(operatorMaintenanceDto.getProvince()), operatorMaintenanceDto.getFacePrice(), getOperatorName(operatorMaintenanceDto.getOperator()));
+                rocketMQTemplate.send(UPDATE_TOPIC + ":" + MAINTENANCE_TAG, MessageBuilder.withPayload(MAINTENANCE_TAG).build());
+            } else {
+                throw new BaseException("577", "删除维护信息失败");
+            }
+        } else {
+            throw new BaseException("577", "删除运营商维护信息传递参数有误");
+        }
+    }
+}

+ 56 - 7
modules/admin/src/main/java/com/fire/admin/service/impl/SysUserServiceImpl.java

@@ -3,11 +3,16 @@ package com.fire.admin.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSON;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fire.admin.dto.CustomerLoginUserDto;
+import com.fire.admin.dto.CustomerParentUserDto;
 import com.fire.admin.dto.UserDTO;
 import com.fire.admin.mapper.SysUserMapper;
 import com.fire.admin.service.*;
@@ -19,6 +24,7 @@ import com.fire.dto.CustomerInfo;
 import com.fire.dto.enums.Status;
 import com.fire.dto.system.SysUser;
 import com.fire.dto.system.SysUserRole;
+import com.google.common.collect.Lists;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,6 +38,7 @@ import org.springframework.transaction.annotation.Transactional;
 import redis.clients.jedis.JedisCluster;
 
 import javax.annotation.Resource;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -296,24 +303,64 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
      * @Date: 2021/6/16 17:46
      */
     @Override
-    public List<SysUser> queryUserByType(Integer type) {
-        // TODO 获取用户属性为中间人的用户
+    public List queryUserByType(Integer type) {
+        switch (type) {
+            case 2:
+                // TODO 获取属性为客户的用户,该用户只能绑定一个客户
+                List<SysUser> sysUserList = queryUserByPartner(type);
+                // TODO 获取客户已经绑定的所有用户
+                List<Long> collect = customerService.queryCustomerInfo(null).stream().map(CustomerInfo::getUserId).collect(Collectors.toList());
+                if (ObjectUtil.isNotEmpty(collect)) {
+                    return sysUserList.stream().filter((SysUser user) -> !collect.contains(user.getUserId())).collect(Collectors.toList());
+                }
+                return sysUserList;
+            case 3:
+                List<SysUser> sysUsers = queryUserByPartner(type);
+                if (!sysUsers.isEmpty()) {
+                    List<CustomerParentUserDto> customerParentUserDtoList = Lists.newLinkedList();
+                    sysUsers.forEach(user -> {
+                        CustomerParentUserDto parent = CustomerParentUserDto.builder().partnerId(user.getUserId())
+                                .partnerName(user.getUsername())
+                                .type(user.getType()).build();
+                        customerParentUserDtoList.add(parent);
+                    });
+                    return customerParentUserDtoList;
+                }
+
+            default:
+                log.info("获取中间人或者客户用户失败,前端未传入用户属性 type  ,中间人用户属性为: 3,客户用户属性为: 2");
+                throw new BaseException(Status.REQUEST_PARAM_ERROR.status(), Status.REQUEST_PARAM_ERROR.message());
+        }
+
+      /*  // TODO 获取用户属性为中间人的用户
         if (type.equals(3)) {
-            return queryUserByPartner(type);
+            List<SysUser> sysUsers = queryUserByPartner(type);
+            if (!sysUsers.isEmpty()) {
+                List<CustomerParentUserDto> customerParentUserDtoList = Lists.newLinkedList();
+                sysUsers.forEach(user -> {
+                    CustomerParentUserDto parent = CustomerParentUserDto.builder().partnerId(user.getUserId())
+                            .partnerName(user.getUsername())
+                            .type(user.getType()).build();
+                    customerParentUserDtoList.add(parent);
+                });
+                return JSONUtil.parseObj(customerParentUserDtoList);
+            }
         } else if (type.equals(2)) {
             // TODO 获取属性为客户的用户,该用户只能绑定一个客户
             List<SysUser> sysUsers = queryUserByPartner(type);
             // TODO 获取客户已经绑定的所有用户
             List<Long> collect = customerService.queryCustomerInfo(null).stream().map(CustomerInfo::getUserId).collect(Collectors.toList());
             if (!collect.isEmpty()) {
-                return sysUsers.stream().filter((SysUser user) -> !collect.contains(user.getUserId())).collect(Collectors.toList());
+                return JSONUtil.parseObj(sysUsers.stream().filter((SysUser user) -> !collect.contains(user.getUserId())).collect(Collectors.toList()));
+            } else {
+                return JSONUtil.parseObj(sysUsers);
             }
-            return sysUsers;
+
         } else {
             log.info("获取中间人或者客户用户失败,前端未传入用户属性 type  ,中间人用户属性为: 3,客户用户属性为: 2");
             throw new BaseException(Status.REQUEST_PARAM_ERROR.status(), Status.REQUEST_PARAM_ERROR.message());
         }
-
+        return null;*/
     }
 
 
@@ -328,7 +375,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
         wrapper.select(SysUser::getUserId, SysUser::getUsername, SysUser::getType)
                 .eq(SysUser::getType, type);
-        return baseMapper.selectList(wrapper);
+        List<SysUser> sysUsers = baseMapper.selectList(wrapper);
+        return sysUsers;
+
     }
 
 

+ 17 - 0
modules/admin/src/main/java/com/fire/admin/util/EnumUtils.java

@@ -55,6 +55,23 @@ public class EnumUtils {
         return null;
     }
 
+    /**
+     * @descible: TODO 根据code 获取 value
+     * @param: code
+     * @return: java.lang.String
+     * @author: liuliu
+     * @date: 2021-06-25 14:20
+     */
+    public static String convertName(String code) {
+        for (Province province : Province.values()) {
+            if (code.equals(province.getCode())) {
+                return province.getName();
+            }
+        }
+        return null;
+
+    }
+
     /**
      * 获取所有分发策略
      *

+ 8 - 9
modules/admin/src/main/java/com/fire/admin/util/SecurityUtil.java

@@ -13,7 +13,6 @@ import java.io.IOException;
 import java.io.PrintWriter;
 
 
-
 /**
  * @author: liuliu
  * @ClassName: SecurityUtil
@@ -34,12 +33,12 @@ public class SecurityUtil {
 
 
     /**
-    * @Description:  TODO  获取Authentication
-    * @Param: []
-    * @return: org.springframework.security.core.Authentication
-    * @Author: liuliu
-    * @Date: 2021/5/11 17:59
-    */
+     * @Description: TODO  获取Authentication
+     * @Param: []
+     * @return: org.springframework.security.core.Authentication
+     * @Author: liuliu
+     * @Date: 2021/5/11 17:59
+     */
     private Authentication getAuthentication() {
         return SecurityContextHolder.getContext().getAuthentication();
     }
@@ -52,11 +51,11 @@ public class SecurityUtil {
      * @Author: liuliu
      * @Date: 2021/5/11 17:58
      */
-    public PreSecurityUser getUser(){
+    public PreSecurityUser getUser() {
         try {
             return (PreSecurityUser) getAuthentication().getPrincipal();
         } catch (Exception e) {
-            throw  new BaseException(String.valueOf(HttpStatus.UNAUTHORIZED.value()),"登录状态过期");
+            throw new BaseException(String.valueOf(HttpStatus.UNAUTHORIZED.value()), "登录状态过期");
         }
     }
 }

+ 9 - 0
modules/admin/src/main/java/com/fire/admin/vo/CustomerInfoVo.java

@@ -32,6 +32,10 @@ public class CustomerInfoVo {
     @TableId(value = "customer_id",type = IdType.AUTO)
     private Long customerId;
 
+
+    @ApiModelProperty(value = "合作伙伴[中间人]ID")
+    private Long partnerId;
+
     @ApiModelProperty(value = "合作伙伴姓名(中间人姓名)")
     private String partnerName;
 
@@ -119,6 +123,11 @@ public class CustomerInfoVo {
     @ApiModelProperty(value = "价格校验")
     private Integer priceCheck;
 
+    @ApiModelProperty(value = "跟用户关联,客户登录使用")
+    private Long userId;
+
+    @ApiModelProperty(value = "客户登录名称")
+    private String loginName;
 
     @ApiModelProperty("银行卡列表")
     private List<BankCard> bankCards;

+ 14 - 3
modules/admin/src/main/java/com/fire/admin/vo/FlowAppInfoVo.java

@@ -4,12 +4,15 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fire.dto.IpWhiteList;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.List;
+
 /**
  * @author: liuliu
  * @ClassName: FlowAppInfoVo
@@ -25,6 +28,9 @@ public class FlowAppInfoVo {
     @ApiModelProperty(value = "接入ID号")
     private Long flowAppId;
 
+    @ApiModelProperty(value = "客户编号")
+    private Long customerId;
+
     @ApiModelProperty(value = "客户名称")
     private String customerName;
 
@@ -49,8 +55,6 @@ public class FlowAppInfoVo {
     @ApiModelProperty(value = "回调URL")
     private String callbackUrl;
 
-    @ApiModelProperty(value = "CPIP地址")
-    private String ipAddress;
 
     @ApiModelProperty(value = "流量下发通道")
     private String dispatchChannel;
@@ -62,8 +66,15 @@ public class FlowAppInfoVo {
     private Integer time;
 
     @ApiModelProperty(value = "通道ID(关联的通道组id)")
-    private  Integer channelId;
+    private Integer channelId;
 
     @ApiModelProperty(value = "通道组名称")
     private String groupName;
+
+    @ApiModelProperty(value = "是否支持二次回调,默认是不支持,0,支持的话修改编号为1")
+    private Integer secondCallback;
+
+    @ApiModelProperty(value = "客户ip地址以及描述")
+    private List<IpWhiteList> ipWhiteListList;
+
 }

+ 7 - 0
modules/admin/src/main/resources/mapper/CustomerMapper.xml

@@ -30,6 +30,7 @@
 
     <resultMap id="ResultMapPage" type="com.fire.admin.vo.CustomerInfoVo">
         <result column="customer_id" property="customerId"/>
+        <result column="partner_id" property="partnerId"/>
         <result column="partner_name" property="partnerName"/>
         <result column="customer_name" property="customerName"/>
         <result column="shorter_name" property="shorterName"/>
@@ -58,11 +59,16 @@
         <result column="time" property="time"/>
         <result column="channel_id" property="channelId"/>
         <result column="price_check" property="priceCheck"/>
+        <result column="user_id" property="userId"/>
+        <collection property="loginName" ofType="java.lang.String"
+                    select="com.fire.admin.mapper.SysUserMapper.getCustomerUserName"
+                    column="user_id"/>
     </resultMap>
 
 
     <sql id="selectCustomerInfoPage">
         c.customer_id ,
+        c.partner_id,
         u.username as partner_name,
         c.customer_name,
         c.shorter_name,
@@ -80,6 +86,7 @@
         c.update_time,
         c.partner_commission,
         c.price_check,
+        c.user_id,
         app.flow_app_id,
         app.app_id,
         app.app_key,

+ 8 - 1
modules/admin/src/main/resources/mapper/FlowAppInfoMapper.xml

@@ -18,11 +18,13 @@
         <result column="total_count" property="totalCount"/>
         <result column="time" property="time"/>
         <result column="channel_id" property="channelId"/>
+        <result column="second_callback" property="secondCallback"/>
     </resultMap>
 
 
     <resultMap id="ResultMap" type="com.fire.admin.vo.FlowAppInfoVo">
         <result column="flow_app_id" property="flowAppId"/>
+        <result column="customer_id" property="customerId"/>
         <result column="customer_name" property="customerName"/>
         <result column="app_id" property="appId"/>
         <result column="app_key" property="appKey"/>
@@ -31,17 +33,21 @@
         <result column="status" property="status"/>
         <result column="app_name" property="appName"/>
         <result column="callback_url" property="callbackUrl"/>
-        <result column="ip_address" property="ipAddress"/>
         <result column="dispatch_channel" property="dispatchChannel"/>
         <result column="total_count" property="totalCount"/>
         <result column="time" property="time"/>
         <result column="channel_id" property="channelId"/>
+        <result column="second_callback" property="secondCallback"/>
+        <collection property="ipWhiteListList" ofType="com.fire.dto.IpWhiteList"
+                    select="com.fire.admin.mapper.IpWhiteListMapper.getIpWhiteByCustomerId"
+                    column="customer_id"/>
     </resultMap>
 
 
     <select id="queryFlowAppInfoPage" resultMap="ResultMap" parameterType="java.lang.String">
         SELECT
         f.flow_app_id,
+        f.customer_id,
         cu.customer_name,
         f.app_id,
         f.app_key,
@@ -54,6 +60,7 @@
         f.dispatch_channel,
         f.total_count,
         f.time,
+        f.second_callback,
         f.channel_id
         FROM flow_app_info AS f
         LEFT JOIN customer_info AS cu ON f.customer_id=cu.customer_id

+ 21 - 0
modules/admin/src/main/resources/mapper/IpWhiteListMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fire.admin.mapper.IpWhiteListMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.fire.dto.IpWhiteList">
+        <id column="ip_id" property="ipId"/>
+        <result column="ip_addr" property="ipAddr"/>
+        <result column="des" property="des"/>
+        <result column="customer_id" property="customerId"/>
+    </resultMap>
+
+
+    <delete id="deleteIpWhiteList" parameterType="java.lang.Long">
+        DELETE
+        FROM ip_white_list
+        WHERE customer_id = #{customerId}
+    </delete>
+
+
+</mapper>

+ 96 - 0
modules/admin/src/main/resources/mapper/OperatorMaintennaceMapper.xml

@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fire.admin.mapper.OperatorMaintenanceMapper">
+
+    <resultMap id="BaseResultMap" type="com.fire.dto.OperatorMaintenance">
+        <result column="face_price" property="facePrice"/>
+        <result column="operator" property="operator"/>
+        <result column="province" property="province"/>
+        <result column="start_time" property="startTime"/>
+        <result column="end_time" property="endTime"/>
+        <result column="status" property="status"/>
+        <result column="oder_type" property="orderType"/>
+        <result column="modify_user" property="modifyUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+    </resultMap>
+
+
+    <insert id="saveOrUpdateOperatorMaintenance" parameterType="com.fire.dto.OperatorMaintenance">
+        INSERT INTO operator_maintenance
+        (face_price,
+         oder_type,
+         operator,
+         province,
+         start_time,
+         end_time,
+         `status`,
+         modify_user,
+         create_user)
+        VALUES (#{param.facePrice},
+                #{param.orderType},
+                #{param.operator},
+                #{param.province},
+                #{param.startTime},
+                #{param.endTime},
+                #{param.status},
+                #{param.modifyUser},
+                #{param.createUser}) ON DUPLICATE KEY
+        UPDATE
+            face_price = #{param.facePrice},
+            oder_type=#{param.orderType},
+            operator= #{param.operator},
+            province=#{param.province},
+            start_time=#{param.startTime},
+            end_time=#{param.endTime},
+            `status`=#{param.status},
+            modify_user=#{param.modifyUser}
+    </insert>
+
+
+    <sql id="pageSql">
+        face_price,
+        operator,
+        province,
+        start_time,
+        end_time,
+        `status`,
+        oder_type,
+        modify_user,
+        update_time,
+        create_user,
+        create_time
+    </sql>
+    <select id="selectOperatorMaintenancPage" resultMap="BaseResultMap">
+        SELECT
+        <include refid="pageSql"/>
+        FROM
+        operator_maintenance
+        <where>
+            <if test="select.operator !=null and select.operator !='' ">
+                AND operator=#{select.operator}
+            </if>
+            <if test="select.province !=null and select.province !=''">
+                AND province=#{select.province}
+            </if>
+            <if test="select.status !=null">
+                AND `status`= #{select.status}
+            </if>
+            <if test="select.startTime !=null and select.startTime !='' ">
+                AND start_time &gt;= #{select.startTime}
+            </if>
+            <if  test="select.endTime !=null and select.endTime !=''">
+                AND end_time &lt;= #{select.endTime}
+            </if>
+            <if test="select.orderType !=null ">
+                AND oder_type=#{select.orderType}
+            </if>
+            <if test="select.facePrice !=null ">
+                AND face_price=#{select.facePrice}
+            </if>
+        </where>
+        ORDER BY  start_time, oder_type,`status` DESC
+    </select>
+
+</mapper>