提交 87a51be4 authored 作者: hzh's avatar hzh

订单开票调试以及项目人员导出

上级 0f36c81e
...@@ -27,6 +27,8 @@ public class SaPermissionImpl implements StpInterface { ...@@ -27,6 +27,8 @@ public class SaPermissionImpl implements StpInterface {
} else if (userType == UserType.APP_USER) { } else if (userType == UserType.APP_USER) {
// 其他端 自行根据业务编写 // 其他端 自行根据业务编写
return new ArrayList<>(loginUser.getMenuPermission()); return new ArrayList<>(loginUser.getMenuPermission());
} else if (userType == UserType.PROJECT_USER) {
return new ArrayList<>(loginUser.getMenuPermission());
} }
return new ArrayList<>(); return new ArrayList<>();
} }
...@@ -42,6 +44,8 @@ public class SaPermissionImpl implements StpInterface { ...@@ -42,6 +44,8 @@ public class SaPermissionImpl implements StpInterface {
return new ArrayList<>(loginUser.getRolePermission()); return new ArrayList<>(loginUser.getRolePermission());
} else if (userType == UserType.APP_USER) { } else if (userType == UserType.APP_USER) {
// 其他端 自行根据业务编写 // 其他端 自行根据业务编写
} else if (userType == UserType.PROJECT_USER) {
return new ArrayList<>(loginUser.getRolePermission());
} }
return new ArrayList<>(); return new ArrayList<>();
} }
......
...@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.exception.ServiceException; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.service.AbstractBaseService; import org.dromara.common.mybatis.service.AbstractBaseService;
...@@ -18,6 +18,7 @@ import org.dromara.server.service.IOrderInvoicingService; ...@@ -18,6 +18,7 @@ import org.dromara.server.service.IOrderInvoicingService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Map; import java.util.Map;
import java.util.Optional;
/** /**
* 开票订单关联Service业务层处理 * 开票订单关联Service业务层处理
...@@ -27,6 +28,7 @@ import java.util.Map; ...@@ -27,6 +28,7 @@ import java.util.Map;
*/ */
@RequiredArgsConstructor @RequiredArgsConstructor
@Service @Service
@Slf4j
public class OrderInvoicingServiceImpl extends AbstractBaseService<OrderInvoicingVo, OrderInvoicingBo, OrderInvoicing> implements IOrderInvoicingService { public class OrderInvoicingServiceImpl extends AbstractBaseService<OrderInvoicingVo, OrderInvoicingBo, OrderInvoicing> implements IOrderInvoicingService {
private final OrderInvoicingMapper baseMapper; private final OrderInvoicingMapper baseMapper;
...@@ -39,11 +41,13 @@ public class OrderInvoicingServiceImpl extends AbstractBaseService<OrderInvoicin ...@@ -39,11 +41,13 @@ public class OrderInvoicingServiceImpl extends AbstractBaseService<OrderInvoicin
@Override @Override
public void save(OrderInvoicingBo bo) { public void save(OrderInvoicingBo bo) {
OrderInvoicingStrategy strategy = strategyMapper.selectOne(OrderInvoicingStrategy::getType, bo.getType());
if (strategy == null) throw new ServiceException("请配置对应开票策略");
OrderInvoicing invoicing = baseMapper.selectOne(OrderInvoicing::getOrderId, bo.getOrderId(), OrderInvoicing::getType, bo.getType()); OrderInvoicing invoicing = baseMapper.selectOne(OrderInvoicing::getOrderId, bo.getOrderId(), OrderInvoicing::getType, bo.getType());
bo.setStrategy(strategy.getStrategy());
if (null == invoicing) { if (null == invoicing) {
OrderInvoicingStrategy strategy = strategyMapper.selectOne(OrderInvoicingStrategy::getType, bo.getType());
bo.setStrategy(Optional.ofNullable(strategy).map(OrderInvoicingStrategy::getStrategy).orElse(null));
if (strategy == null) {
log.info("订单类型:{},未配置开票策略", bo.getType());
}
insertByBo(bo); insertByBo(bo);
}else { }else {
invoicing.setPersonCode(bo.getPersonCode()); invoicing.setPersonCode(bo.getPersonCode());
......
...@@ -32,6 +32,7 @@ import org.dromara.system.domain.bo.SysPostBo; ...@@ -32,6 +32,7 @@ import org.dromara.system.domain.bo.SysPostBo;
import org.dromara.system.domain.bo.SysRoleBo; import org.dromara.system.domain.bo.SysRoleBo;
import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.*; import org.dromara.system.domain.vo.*;
import org.dromara.system.listener.SysProjectUserImportListener;
import org.dromara.system.listener.SysUserImportListener; import org.dromara.system.listener.SysUserImportListener;
import org.dromara.system.service.*; import org.dromara.system.service.*;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
...@@ -111,6 +112,21 @@ public class SysUserController extends BaseController { ...@@ -111,6 +112,21 @@ public class SysUserController extends BaseController {
return R.ok(result.getAnalysis()); return R.ok(result.getAnalysis());
} }
/**
* 导入项目用户数据
*
* @param file 导入文件
* @param projectId 项目id
*/
@Log(title = "项目用户管理", businessType = BusinessType.IMPORT)
@SaCheckPermission("system:projectUser:import")
@PostMapping(value = "/importProjectData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Void> importProjectData(@RequestPart("file") MultipartFile file,
@RequestParam(value = "projectId") Long projectId) throws Exception {
ExcelResult<SysProjectUserImportVo> result = ExcelUtil.importExcel(file.getInputStream(), SysProjectUserImportVo.class, new SysProjectUserImportListener(projectId));
return R.ok(result.getAnalysis());
}
/** /**
* 获取导入模板 * 获取导入模板
*/ */
...@@ -162,9 +178,11 @@ public class SysUserController extends BaseController { ...@@ -162,9 +178,11 @@ public class SysUserController extends BaseController {
su = userService.selectUserById(uoa.getUserId()); su = userService.selectUserById(uoa.getUserId());
} }
//获取部门负责人id //获取部门负责人id
if (su.getDeptId() != null) {
uoa.setLeaderId(Optional.ofNullable(deptService.selectDeptById(su.getDeptId())) uoa.setLeaderId(Optional.ofNullable(deptService.selectDeptById(su.getDeptId()))
.map(SysDeptVo::getLeader).orElse(null)); .map(SysDeptVo::getLeader).orElse(null));
uoa.setDeptApprove(remoteDeptOrderApproveService.selectOrderApproveByDeptId(su.getDeptId())); uoa.setDeptApprove(remoteDeptOrderApproveService.selectOrderApproveByDeptId(su.getDeptId()));
}
return R.ok(uoa); return R.ok(uoa);
} }
......
package org.dromara.system.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
/**
* 项目用户对象导入VO
*
* @author Lion Li
*/
@Data
@NoArgsConstructor
public class SysProjectUserImportVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 用户昵称
*/
@ExcelProperty(value = "用户名称")
private String nickName;
/**
* 手机号码
*/
@ExcelProperty(value = "手机号码")
private String phonenumber;
/**
* 密码
*/
@ExcelProperty(value = "密码")
private String password;
/**
* 项目名称
*/
@ExcelProperty(value = "项目名称")
private String projectName;
/**
* 角色名称
*/
@ExcelProperty("角色")
private String roleName;
}
package org.dromara.system.listener;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.BCrypt;
import cn.hutool.http.HtmlUtil;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.excel.core.ExcelListener;
import org.dromara.common.excel.core.ExcelResult;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.controller.system.SysUserController;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysProjectUserImportVo;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.service.ISysRoleService;
import org.dromara.system.service.ISysUserService;
import java.util.List;
import static org.dromara.system.domain.SysUser.PROJECT_USER_TYPE;
import static org.dromara.system.domain.SysUser.PROJECT_USER_TYPE_SPLIT;
/**
* 项目用户自定义导入
*
* @author Lion Li
*/
@Slf4j
public class SysProjectUserImportListener extends AnalysisEventListener<SysProjectUserImportVo> implements ExcelListener<SysProjectUserImportVo> {
private final ISysUserService userService;
private final SysUserController sysUserController;
private final ISysRoleService sysRoleService;
private final Long operUserId;
private final String userType;
private final String operTenantId;
private int successNum = 0;
private int failureNum = 0;
private final StringBuilder successMsg = new StringBuilder();
private final StringBuilder failureMsg = new StringBuilder();
public SysProjectUserImportListener( Long projectId) {
this.userService = SpringUtils.getBean(ISysUserService.class);
this.sysUserController = SpringUtils.getBean(SysUserController.class);
this.sysRoleService = SpringUtils.getBean(ISysRoleService.class);
this.operUserId = LoginHelper.getUserId();
this.operTenantId = LoginHelper.getTenantId();
this.userType = PROJECT_USER_TYPE + PROJECT_USER_TYPE_SPLIT + projectId;
}
@Override
public void invoke(SysProjectUserImportVo userVo, AnalysisContext context) {
SysUserVo sysUser = this.userService.selectUserByUserName(userVo.getPhonenumber(), userType, operTenantId);
try {
// 验证是否存在这个用户
if (ObjectUtil.isNull(sysUser)) {
SysUserBo user = BeanUtil.toBean(userVo, SysUserBo.class);
user.setUserName(user.getPassword());
user.setUserType(userType);
ValidatorUtils.validate(user);
String password = user.getPassword();
if (StringUtils.isBlank(password)) {
password = user.getPhonenumber();
}
user.setPassword(BCrypt.hashpw(password));
user.setCreateBy(operUserId);
//设置角色
if (StringUtils.isNotEmpty(userVo.getRoleName())) {
user.setRoleIds(sysRoleService.selectRoleIdsByNameList(StrUtil.split(userVo.getRoleName(), "/")).toArray(Long[]::new));
}
sysUserController.add(user);
successNum++;
successMsg.append("<br/>").append(successNum).append("、账号 ").append(user.getUserName()).append(" 导入成功");
} else {
failureNum++;
failureMsg.append("<br/>").append(failureNum).append("、账号 ").append(sysUser.getUserName()).append(" 已存在");
}
} catch (Exception e) {
failureNum++;
String msg = "<br/>" + failureNum + "、账号 " + HtmlUtil.cleanHtmlTag(userVo.getPhonenumber()) + " 导入失败:";
String message = e.getMessage();
if (e instanceof ConstraintViolationException cvException) {
message = StreamUtils.join(cvException.getConstraintViolations(), ConstraintViolation::getMessage, ", ");
}
failureMsg.append(msg).append(message);
log.error(msg, e);
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
}
@Override
public ExcelResult<SysProjectUserImportVo> getExcelResult() {
return new ExcelResult<>() {
@Override
public String getAnalysis() {
if (failureNum > 0) {
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
} else {
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
}
return successMsg.toString();
}
@Override
public List<SysProjectUserImportVo> getList() {
return null;
}
@Override
public List<String> getErrorList() {
return null;
}
};
}
}
...@@ -56,6 +56,14 @@ public interface ISysUserService { ...@@ -56,6 +56,14 @@ public interface ISysUserService {
*/ */
SysUserVo selectUserByUserName(String userName); SysUserVo selectUserByUserName(String userName);
/**
* 通过用户名查询用户
*
* @param userName 用户名
* @return 用户对象信息
*/
SysUserVo selectUserByUserName(String userName, String userType, String tenantId);
/** /**
* 通过手机号查询用户 * 通过手机号查询用户
* *
......
...@@ -29,6 +29,8 @@ public class SysSensitiveServiceImpl implements SensitiveService { ...@@ -29,6 +29,8 @@ public class SysSensitiveServiceImpl implements SensitiveService {
} }
if (StringUtils.equals(LoginHelper.getUserTypeStr(), UserType.APP_USER.getUserType())) { if (StringUtils.equals(LoginHelper.getUserTypeStr(), UserType.APP_USER.getUserType())) {
return false; return false;
} else if (StringUtils.containsAny(LoginHelper.getUserTypeStr(), UserType.PROJECT_USER.getUserType())) {
return false;
} }
boolean roleExist = StringUtils.isNotEmpty(roleKey); boolean roleExist = StringUtils.isNotEmpty(roleKey);
boolean permsExist = StringUtils.isNotEmpty(perms); boolean permsExist = StringUtils.isNotEmpty(perms);
......
...@@ -239,6 +239,13 @@ public class SysUserServiceImpl implements ISysUserService { ...@@ -239,6 +239,13 @@ public class SysUserServiceImpl implements ISysUserService {
.eq(SysUser::getUserType, UserType.SYS_USER.getUserType())); .eq(SysUser::getUserType, UserType.SYS_USER.getUserType()));
} }
@Override
public SysUserVo selectUserByUserName(String userName, String userType, String tenantId) {
return baseMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, userName)
.eq(SysUser::getUserType, userType)
.eq(SysUser::getTenantId, tenantId));
}
/** /**
* 通过手机号查询用户 * 通过手机号查询用户
* *
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论