浏览代码

财务-收款用户权限

chao 3 年之前
父节点
当前提交
38798f9538

+ 70 - 2
src/main/java/com/caimei365/manager/controller/caimei/FinanceApi.java

@@ -1,14 +1,82 @@
 package com.caimei365.manager.controller.caimei;
 
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.caimei365.manager.entity.ResponseJson;
+import com.caimei365.manager.entity.caimei.ReceiptPermission;
+import com.caimei365.manager.entity.caimei.ReceiptUser;
+import com.caimei365.manager.service.caimei.FinanceService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * 财务管理接口
+ * @author Charles
  */
 @RestController
 @RequestMapping("/finance")
 public class FinanceApi {
 
 
+    @Resource
+    private FinanceService financeService;
+
+    /**
+     * 获取收款用户列表
+     */
+    @GetMapping("/receipt/users")
+    public ResponseJson<List<ReceiptUser>> getReceiptUsers() {
+        return financeService.getReceiptUsers();
+    }
+
+    /**
+     * 获取收款权限列表
+     */
+    @GetMapping("/receipt/permissions")
+    public ResponseJson<List<ReceiptPermission>> getReceiptPermissions() {
+        return financeService.getReceiptPermissions();
+    }
+
+
+    /**
+     * 根据ID获取收款用户
+     */
+    @GetMapping("/receipt/user/{id}")
+    public ResponseJson<ReceiptUser> getReceiptUser(@PathVariable("id") Integer id) {
+        if (null == id || id <= 0) {
+            return ResponseJson.error("收款用户Id不能为空!", null);
+        }
+        return financeService.getReceiptUser(id);
+    }
+
+    /**
+     * 添加收款用户
+     */
+    @PostMapping("/receipt/user/create")
+    public ResponseJson<Void> addReceiptUser(@RequestBody ReceiptUser receiptUser) {
+        return financeService.addReceiptUser(receiptUser);
+    }
+
+    /**
+     * 根据ID更新用户
+     */
+    @PostMapping("/receipt/user/update/{id}")
+    public ResponseJson<Void> updateReceiptUser(@PathVariable("id") Integer id, @RequestBody ReceiptUser receiptUser) {
+        if (null == id || id <= 0) {
+            return ResponseJson.error("收款用户Id不能为空!", null);
+        }
+        return financeService.updateReceiptUser(id, receiptUser);
+    }
+
+    /**
+     * 根据ID删除收款用户
+     */
+    @PostMapping("/receipt/user/delete/{id}")
+    public ResponseJson<Void> deleteReceiptUser(@PathVariable("id") Integer id) {
+        if (null == id || id <= 0) {
+            return ResponseJson.error("收款用户Id不能为空!", null);
+        }
+        return financeService.deleteReceiptUser(id);
+    }
+
 }

+ 59 - 0
src/main/java/com/caimei365/manager/dao/FinanceDao.java

@@ -0,0 +1,59 @@
+package com.caimei365.manager.dao;
+
+import com.caimei365.manager.entity.caimei.ReceiptPermission;
+import com.caimei365.manager.entity.caimei.ReceiptUser;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/2/23
+ */
+@Mapper
+public interface FinanceDao {
+    /**
+     * 所有用户
+     */
+    List<ReceiptUser> getReceiptUsers();
+    /**
+     * 根据ID获取收款用户
+     */
+    ReceiptUser getReceiptUserById(Integer id);
+    /**
+     * 查询是否存在当前手机号的用户
+     * @param mobile 手机号
+     */
+    ReceiptUser getReceiptUserByMobile(String mobile);
+    /**
+     * 获取收款权限列表
+     */
+    List<ReceiptPermission> getReceiptPermissions();
+    /**
+     * 用户权限
+     */
+    List<ReceiptPermission> getReceiptPermissionsByUserId(Integer userId);
+    /**
+     * 新增收款用户
+     */
+    void insertReceiptUser(ReceiptUser receiptUser);
+    /**
+     * 更新收款用户
+     */
+    void updateReceiptUser(ReceiptUser receiptUser);
+    /**
+     * 删除收款用户
+     */
+    void deleteReceiptUser(Integer id);
+    /**
+     * 删除收款用户原有权限关联
+     */
+    void deleteReceiptPermissionRelation(Integer userId);
+    /**
+     * 新增收款用户权限关联
+     */
+    void insertReceiptPermissionRelation(Integer userId, Integer permissionId);
+
+}

+ 24 - 0
src/main/java/com/caimei365/manager/entity/caimei/ReceiptPermission.java

@@ -0,0 +1,24 @@
+package com.caimei365.manager.entity.caimei;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/2/23
+ */
+@Data
+public class ReceiptPermission implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 收款权限Id
+     */
+    private Integer id;
+    /**
+     * 收款权限描述: (1,'收款列表访问'),(2,'收款详情访问'),(3,'收款录入'),(4,'收款关联订单'),(5,'收款关联返佣'),(6,'收款关联供应商退款'),(7,'收款审核')
+     */
+    private String permission;
+}

+ 51 - 0
src/main/java/com/caimei365/manager/entity/caimei/ReceiptUser.java

@@ -0,0 +1,51 @@
+package com.caimei365.manager.entity.caimei;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/2/23
+ */
+@Data
+public class ReceiptUser implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 收款用户Id
+     */
+    private Integer id;
+    /**
+     * 用户类型:1协销人员,2客服,3财务,4超级管理员
+     */
+    private Integer userType;
+    private String userTypeText;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 收款人手机号
+     */
+    private String mobile;
+    /**
+     * 微信openid
+     */
+    private String openid;
+    /**
+     * 密码
+     */
+    private String password;
+    /**
+     * 用户权限
+     */
+    private String permissionIds;
+    private List<ReceiptPermission> permissions;
+    /**
+     * 删除标记:0未删,其他删除
+     */
+    private Integer delFlag;
+}

+ 48 - 0
src/main/java/com/caimei365/manager/service/caimei/FinanceService.java

@@ -0,0 +1,48 @@
+package com.caimei365.manager.service.caimei;
+
+import com.caimei365.manager.entity.ResponseJson;
+import com.caimei365.manager.entity.caimei.ReceiptPermission;
+import com.caimei365.manager.entity.caimei.ReceiptUser;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/2/23
+ */
+public interface FinanceService {
+    /**
+     * 获取收款用户列表
+     */
+    ResponseJson<List<ReceiptUser>> getReceiptUsers();
+
+    /**
+     * 获取收款权限列表
+     */
+    ResponseJson<List<ReceiptPermission>> getReceiptPermissions();
+
+    /**
+     * 根据ID获取收款用户
+     * @param id 收款用户Id
+     */
+    ResponseJson<ReceiptUser> getReceiptUser(Integer id);
+
+    /**
+     * 添加收款用户
+     */
+    ResponseJson<Void> addReceiptUser(ReceiptUser receiptUser);
+
+    /**
+     * 根据ID更新用户
+     * @param id 收款用户Id
+     */
+    ResponseJson<Void> updateReceiptUser(Integer id, ReceiptUser receiptUser);
+
+    /**
+     * 根据ID删除收款用户
+     */
+    ResponseJson<Void> deleteReceiptUser(Integer id);
+
+}

+ 222 - 0
src/main/java/com/caimei365/manager/service/caimei/impl/FinanceServiceImpl.java

@@ -0,0 +1,222 @@
+package com.caimei365.manager.service.caimei.impl;
+
+import com.caimei365.manager.dao.FinanceDao;
+import com.caimei365.manager.entity.ResponseJson;
+import com.caimei365.manager.entity.caimei.ReceiptPermission;
+import com.caimei365.manager.entity.caimei.ReceiptUser;
+import com.caimei365.manager.entity.sys.SysRole;
+import com.caimei365.manager.service.caimei.FinanceService;
+import com.caimei365.manager.utils.CommonUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/2/23
+ */
+@Slf4j
+@Service
+public class FinanceServiceImpl implements FinanceService {
+    @Resource
+    private FinanceDao financeDao;
+
+    /**
+     * 获取收款用户列表
+     */
+    @Override
+    public ResponseJson<List<ReceiptUser>> getReceiptUsers() {
+        List<ReceiptUser> list = financeDao.getReceiptUsers();
+        list.removeIf(Objects::isNull);
+        for (ReceiptUser user : list) {
+            setUserPermissions(user);
+        }
+        return ResponseJson.success(list);
+    }
+
+    /**
+     * 获取收款权限列表
+     */
+    @Override
+    public ResponseJson<List<ReceiptPermission>> getReceiptPermissions() {
+        List<ReceiptPermission> permissions = financeDao.getReceiptPermissions();
+        return ResponseJson.success(permissions);
+    }
+
+    /**
+     * 根据ID获取收款用户
+     *
+     * @param id 收款用户Id
+     */
+    @Override
+    public ResponseJson<ReceiptUser> getReceiptUser(Integer id) {
+        ReceiptUser user = financeDao.getReceiptUserById(id);
+        setUserPermissions(user);
+        return ResponseJson.success(user);
+    }
+
+    /**
+     * 添加收款用户
+     */
+    @Transactional(rollbackFor=Exception.class)
+    @Override
+    public ResponseJson<Void> addReceiptUser(ReceiptUser receiptUser) {
+        if (!StringUtils.hasLength(receiptUser.getMobile())){
+            return ResponseJson.error("收款人手机号不能为空!", null);
+        }
+        if (!StringUtils.hasLength(receiptUser.getPassword())){
+            return ResponseJson.error("收款人密码不能为空!", null);
+        }
+        if (!StringUtils.hasLength(receiptUser.getName())){
+            return ResponseJson.error("收款人姓名不能为空!", null);
+        }
+        if (null == receiptUser.getUserType() || receiptUser.getUserType() <= 0){
+            return ResponseJson.error("收款人用户类型不能为空!", null);
+        }
+        // 查询是否存在当前手机号的用户
+        ReceiptUser dbUser = financeDao.getReceiptUserByMobile(receiptUser.getMobile());
+        if (null == dbUser) {
+            // 新增收款用户返回用户Id
+            financeDao.insertReceiptUser(receiptUser);
+            // 保存用户权限关系
+            saveReceiptPermissionRelation(receiptUser.getId(), receiptUser.getPermissionIds());
+            return ResponseJson.success("添加收款用户成功", null);
+        } else if (null != dbUser.getDelFlag() && 0 != dbUser.getDelFlag()){
+            // 更新已删除用户
+            return updateReceiptUser(dbUser.getId(), receiptUser);
+        } else {
+            return ResponseJson.error("用户手机号已存在!", null);
+        }
+    }
+
+    /**
+     * 根据ID更新用户
+     *
+     * @param id          收款用户Id
+     */
+    @Transactional(rollbackFor=Exception.class)
+    @Override
+    public ResponseJson<Void> updateReceiptUser(Integer id, ReceiptUser receiptUser) {
+        receiptUser.setId(id);
+        receiptUser.setDelFlag(0);
+        if (StringUtils.hasLength(receiptUser.getPassword())){
+            String encodePassword = null;
+            try {
+                // 密码加密
+                encodePassword = encodeReceiptPassword(receiptUser.getPassword());
+            } catch (NoSuchAlgorithmException e) {
+                log.error("收款用户密码加密异常:", e);
+                return ResponseJson.error("收款用户密码加密异常!", null);
+            }
+            receiptUser.setPassword(encodePassword);
+        }
+        financeDao.updateReceiptUser(receiptUser);
+        // 删除原有权限关联
+        financeDao.deleteReceiptPermissionRelation(id);
+        // 保存用户权限关系
+        saveReceiptPermissionRelation(id, receiptUser.getPermissionIds());
+        return ResponseJson.success();
+    }
+
+
+
+    /**
+     * 根据ID删除收款用户
+     *
+     * @param id
+     */
+    @Override
+    public ResponseJson<Void> deleteReceiptUser(Integer id) {
+        // 删除原有权限关联
+        financeDao.deleteReceiptPermissionRelation(id);
+        // 删除收款用户
+        financeDao.deleteReceiptUser(id);
+        return ResponseJson.success();
+    }
+
+    /**
+     * 保存角色菜单关系
+     */
+    private void saveReceiptPermissionRelation(Integer userId, String permissionIds) {
+        if (StringUtils.hasLength(permissionIds)) {
+            // 删除原有权限关联
+            financeDao.deleteReceiptPermissionRelation(userId);
+            // 设置权限
+            String[] split = permissionIds.split(",");
+            for (String s : split) {
+                if (StringUtils.hasLength(s)) {
+                    financeDao.insertReceiptPermissionRelation(userId, Integer.valueOf(s));
+                }
+            }
+        }
+    }
+
+    /**
+     * MD5加密
+     * @param password 待加密字段
+     * @return encodePassword
+     * @throws NoSuchAlgorithmException
+     */
+    private String encodeReceiptPassword(String password) throws NoSuchAlgorithmException {
+        if (StringUtils.hasLength(password)){
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            //通过digest方法返回哈希计算后的字节数组
+            byte[] bytes = md.digest(password.getBytes(StandardCharsets.UTF_8));
+            //将字节数组转换为16进制字符串并返回
+            final char[] hex = "0123456789ABCDEF".toCharArray();
+            StringBuilder ret = new StringBuilder(bytes.length * 2);
+            for (byte aByte : bytes) {
+                ret.append(hex[(aByte >> 4) & 0x0f]);
+                ret.append(hex[aByte & 0x0f]);
+            }
+            return ret.toString();
+        }
+        return "";
+    }
+
+    /**
+     * 设置收款用户类型和权限列表
+     */
+    private void setUserPermissions(ReceiptUser user) {
+        switch(user.getUserType()) {
+            case 1 :
+                user.setUserTypeText("协销");
+                break;
+            case 2 :
+                user.setUserTypeText("客服");
+                break;
+            case 3 :
+                user.setUserTypeText("财务");
+                break;
+            case 4 :
+                user.setUserTypeText("超级管理员");
+                break;
+            default :
+                user.setUserTypeText("");
+        }
+        List<ReceiptPermission> permissions = financeDao.getReceiptPermissionsByUserId(user.getId());
+        user.setPermissions(permissions);
+        List<Integer> permissionIdList = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(permissions)) {
+            for (ReceiptPermission item : permissions) {
+                if (null != item) {
+                    permissionIdList.add(item.getId());
+                }
+            }
+        }
+        String permissionIds = CommonUtil.idListToString(permissionIdList, ",");
+        user.setPermissionIds(permissionIds);
+    }
+}

+ 2 - 2
src/main/java/com/caimei365/manager/service/sys/impl/SysUserServiceImpl.java

@@ -163,7 +163,7 @@ public class SysUserServiceImpl implements SysUserService {
         if (StringUtils.hasLength(sysUser.getUsername()) && StringUtils.hasLength(sysUser.getPassword())) {
             // 查询是否存在当前用户名的用户
             SysUser dbUser = systemDao.findByUsername(sysUser.getUsername());
-            if (null == dbUser || dbUser.getDelFlag() != 0) {
+            if (null == dbUser) {
                 // 密码加密
                 String encodePassword = bCryptPasswordEncoder.encode(sysUser.getPassword());
                 sysUser.setPassword(encodePassword);
@@ -174,7 +174,7 @@ public class SysUserServiceImpl implements SysUserService {
                 // 保存用户角色关系
                 saveRoleRelation(sysUser.getId(), roleIds);
                 return ResponseJson.success("添加用户成功", null);
-            } else if (!Integer.valueOf(0).equals(dbUser.getDelFlag())){
+            } else if (null != dbUser.getDelFlag() && 0 != dbUser.getDelFlag()){
                 // 更新已删除用户
                 return updateUser(dbUser.getId(), sysUser);
             } else {

+ 45 - 0
src/main/resources/mapper/FinanceDao.xml

@@ -0,0 +1,45 @@
+<?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.caimei365.manager.dao.FinanceDao">
+    <insert id="insertReceiptUser" keyProperty="id" keyColumn="id" useGeneratedKeys="true">
+        INSERT INTO cm_receipt_user(name, password, user_type, mobile, create_time)
+        VALUES(#{name}, #{password}, #{userType}, #{mobile},  NOW())
+    </insert>
+    <update id="updateReceiptUser">
+        UPDATE cm_receipt_user SET name=#{name},
+        <if test="password != null and password != ''">
+            password=#{password},
+        </if>
+        user_type=#{userType}, mobile=#{mobile}, del_flag=#{delFlag}, update_time=NOW()
+        WHERE id = #{id}
+    </update>
+    <delete id="deleteReceiptUser">
+        UPDATE cm_receipt_user SET del_flag=1, update_time=NOW() WHERE id = #{id}
+    </delete>
+    <delete id="deleteReceiptPermissionRelation">
+        DELETE FROM cm_receipt_user_permission WHERE user_id = #{userId}
+    </delete>
+    <insert id="insertReceiptPermissionRelation">
+        INSERT INTO cm_receipt_user_permission(user_id, permission_id) VALUES(#{userId}, #{permissionId})
+    </insert>
+    <select id="getReceiptUsers" resultType="com.caimei365.manager.entity.caimei.ReceiptUser">
+        SELECT id, user_type AS userType, name, mobile, openid, unionId, del_flag AS delFlag
+        FROM cm_receipt_user WHERE del_flag = 0 ORDER BY id
+    </select>
+    <select id="getReceiptUserById" resultType="com.caimei365.manager.entity.caimei.ReceiptUser">
+        SELECT id, user_type AS userType, name, mobile, openid, unionId, del_flag AS delFlag
+        FROM cm_receipt_user WHERE id = #{id}
+    </select>
+    <select id="getReceiptUserByMobile" resultType="com.caimei365.manager.entity.caimei.ReceiptUser">
+        SELECT id, user_type AS userType, name, mobile, openid, unionId, del_flag AS delFlag
+        FROM cm_receipt_user WHERE mobile = #{mobile}
+    </select>
+    <select id="getReceiptPermissions" resultType="com.caimei365.manager.entity.caimei.ReceiptPermission">
+        SELECT id, permission FROM cm_receipt_permission  ORDER BY id
+    </select>
+    <select id="getReceiptPermissionsByUserId" resultType="com.caimei365.manager.entity.caimei.ReceiptPermission">
+        SELECT p.id, p.permission FROM cm_receipt_permission p
+        LEFT JOIN cm_receipt_user_permission crup ON crup.permission_id = p.id
+        WHERE crup.user_id = #{userId}
+    </select>
+</mapper>