|
@@ -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);
|
|
|
|
+ }
|
|
|
|
+}
|