Merge remote-tracking branch '惠信/dev_zhangke' into develop

# Conflicts:
#	nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/UserControllerService.java
This commit is contained in:
曹鹏飞 2025-09-19 09:11:19 +08:00
commit 8500640600
18 changed files with 632 additions and 248 deletions

View File

@ -104,31 +104,6 @@ public class ComponentPackingController {
VUtil.trueThrowBusinessError(StrUtil.isBlank(result.getHeadDTO().getWbstk()) VUtil.trueThrowBusinessError(StrUtil.isBlank(result.getHeadDTO().getWbstk())
|| result.getHeadDTO().getWbstk().equalsIgnoreCase("C")) || result.getHeadDTO().getWbstk().equalsIgnoreCase("C"))
.throwMessage("此交货单已完成了过账"); .throwMessage("此交货单已完成了过账");
result.getHeadDTO().setGStreen("setGStreen");
result.getHeadDTO().setGStrSuppl2("setGStrSuppl2");
result.getHeadDTO().setTelNumber("setTelNumber");
result.getHeadDTO().setCnum("setCnum");
result.getHeadDTO().setHuodh("setHuodh");
result.getHeadDTO().setBname("setBname");
result.getHeadDTO().setMaktx("setMaktx");
result.getHeadDTO().setMatnr("setMatnr");
result.getHeadDTO().setSernr("setSernr");
result.getHeadDTO().setUname("setUname");
result.getHeadDTO().setXnum("setXnum");
result.getHeadDTO().setZchep("setZchep");
result.getHeadDTO().setZjshz("setZjshz");
result.getHeadDTO().setZjshz("setZjshz");
for (ZWM3A19ITEMDTO itemDTO : result.getItemDTOList())
{
itemDTO.setAtwrt("setAtwrt");
itemDTO.setLgort("setLgort");
itemDTO.setLgobe("setLgobe");
itemDTO.setLgpbe("setLgpbe");
itemDTO.setPotx2("setPotx2");
itemDTO.setZatwrt("setZatwrt");
itemDTO.setZtext("setZtext");
itemDTO.setZxiah("setZxiah");
}
return ApiResult.success(result); return ApiResult.success(result);
} }

View File

@ -5,6 +5,7 @@ import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.qo.*; import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.pojo.vo.RoleSimpleVO; import com.nflg.wms.common.pojo.vo.RoleSimpleVO;
import com.nflg.wms.common.pojo.vo.UserSupplierItemVO;
import com.nflg.wms.common.pojo.vo.UserSupplierVO; import com.nflg.wms.common.pojo.vo.UserSupplierVO;
import com.nflg.wms.repository.entity.DictionaryItem; import com.nflg.wms.repository.entity.DictionaryItem;
import com.nflg.wms.starter.BaseController; import com.nflg.wms.starter.BaseController;
@ -77,7 +78,7 @@ public class SupplierController extends BaseController {
*/ */
@PostMapping("enable") @PostMapping("enable")
public ApiResult<Void> enable(@Valid @RequestBody EnableQO request) { public ApiResult<Void> enable(@Valid @RequestBody EnableQO request) {
userControllerService.enable(request); userControllerService.enableSupplier(request);
return ApiResult.success(); return ApiResult.success();
} }
@ -86,8 +87,8 @@ public class SupplierController extends BaseController {
* @param request 请求参数 * @param request 请求参数
*/ */
@PostMapping("authorizeRole") @PostMapping("authorizeRole")
public ApiResult<Void> authorizeRole(@Valid @RequestBody AuthorizeRoleQO request) { public ApiResult<Void> authorizeRole(@Valid @RequestBody AuthorizeRolesQO request) {
userControllerService.authorizeRole(request); userControllerService.authorizeRoles(request);
return ApiResult.success(); return ApiResult.success();
} }
@ -100,14 +101,14 @@ public class SupplierController extends BaseController {
return ApiResult.success(userControllerService.getAuthorizeRole(userId)); return ApiResult.success(userControllerService.getAuthorizeRole(userId));
} }
/** // /**
* 开通账号 // * 开通账号
*/ // */
@PostMapping("enableLogin") // @PostMapping("enableLogin")
public ApiResult<Void> enableLogin(@Valid @RequestBody SupplierLoginQO request) { // public ApiResult<Void> enableLogin(@Valid @RequestBody SupplierLoginQO request) {
userControllerService.enableSupplierLogin(request); // userControllerService.enableSupplierLogin(request);
return ApiResult.success(); // return ApiResult.success();
} // }
/** /**
* 批量开通账号 * 批量开通账号
@ -127,6 +128,15 @@ public class SupplierController extends BaseController {
return ApiResult.success(userControllerService.searchSupplier(request)); return ApiResult.success(userControllerService.searchSupplier(request));
} }
/**
* 搜索供应商的详情信息
* @param id 供应商ID
*/
@GetMapping("item")
public ApiResult<UserSupplierItemVO> getItem(@Valid @RequestParam Long id) {
return ApiResult.success(userControllerService.getSupplierItem(id));
}
/** /**
* 导入供应商 * 导入供应商
* @param file 文件 * @param file 文件

View File

@ -19,6 +19,7 @@ import com.nflg.wms.common.pojo.dto.SupplierExcelExportDTO;
import com.nflg.wms.common.pojo.dto.UserDTO; import com.nflg.wms.common.pojo.dto.UserDTO;
import com.nflg.wms.common.pojo.qo.*; import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.pojo.vo.RoleSimpleVO; import com.nflg.wms.common.pojo.vo.RoleSimpleVO;
import com.nflg.wms.common.pojo.vo.UserSupplierItemVO;
import com.nflg.wms.common.pojo.vo.UserSupplierVO; import com.nflg.wms.common.pojo.vo.UserSupplierVO;
import com.nflg.wms.common.pojo.vo.UserVO; import com.nflg.wms.common.pojo.vo.UserVO;
import com.nflg.wms.common.util.*; import com.nflg.wms.common.util.*;
@ -36,6 +37,7 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.ttzero.excel.entity.ListSheet; import org.ttzero.excel.entity.ListSheet;
import org.ttzero.excel.entity.Workbook; import org.ttzero.excel.entity.Workbook;
@ -306,105 +308,195 @@ public class UserControllerService {
return request.getNewPassword(); return request.getNewPassword();
} }
@Transactional private Long addUser(String uName, String uPhone, Integer enable, String avatar,
public String addSupplier(@Valid SupplierAddQO request) { String remark, String loginName, String pwd, Boolean mustResetPwd, List<Long> roleIds) {
if (StrUtil.isNotBlank(request.getLoginName())) { Long useId = 0L;
VUtil.trueThrowBusinessError(uService.lambdaQuery().eq(User::getUserCode, request.getLoginName()).exists())
.throwMessage("登录账号已存在");
}
VUtil.trueThrowBusinessError(userSupplierService.lambdaQuery().eq(UserSupplier::getSupplierCode, request.getCode()).exists())
.throwMessage("供应商编码已存在");
User user = new User() User user = new User()
.setUserName(request.getUserName()) .setUserName(uName)
.setPhone(request.getPhone()) .setPhone(uPhone)
.setState(request.getEnable() ? 1 : 2) .setState(enable)
.setAvatar(request.getAvatar()) .setAvatar(avatar)
.setRemark(request.getRemark()) .setRemark(remark)
.setUserCode(loginName)
.setPassword(PASSWORDENCODER.encode(pwd))
.setCreateBy(UserUtil.getUserName()) .setCreateBy(UserUtil.getUserName())
.setMustResetPwd(mustResetPwd)
.setCreateTime(LocalDateTime.now()); .setCreateTime(LocalDateTime.now());
String pwd = null;
if (StrUtil.isNotBlank(request.getLoginName())) {
pwd = RandomUtil.randomString(6);
user.setUserCode(request.getLoginName());
user.setPassword(PASSWORDENCODER.encode(pwd));
}
uService.add(user); uService.add(user);
userSupplierService.add(new UserSupplier() useId = user.getId();
.setUserId(user.getId()) //保存用户角色
.setSupplierCode(request.getCode()) if (CollectionUtil.isNotEmpty(roleIds)) {
.setSupplierName(request.getName()) userRoleMapService.saveBatch(roleIds.stream().map(roleId -> new UserRoleMap()
.setAbbreviation(request.getAbbreviation())
.setAbbreviation1(request.getAbbreviation1())
.setAbbreviation2(request.getAbbreviation2())
.setTypeId(request.getTypeId()));
if (CollectionUtil.isNotEmpty(request.getRoleIds())) {
userRoleMapService.saveBatch(request.getRoleIds().stream().map(roleId -> new UserRoleMap()
.setUserId(user.getId()) .setUserId(user.getId())
.setRoleId(roleId)) .setRoleId(roleId))
.collect(Collectors.toSet())); .collect(Collectors.toSet()));
} }
return useId;
}
private void enableUser(Long userId, Integer state) {
uService.lambdaUpdate().eq(User::getId, userId)
.set(User::getState, state)
.update();
}
@Transactional
public String addSupplier(@Valid SupplierAddQO request) {
// 验证供应商是否存在
VUtil.trueThrowBusinessError(userSupplierService.lambdaQuery().eq(UserSupplier::getSupplierCode, request.getSupplierCode()).exists())
.throwMessage("供应商编码已存在");
String pwd = "";
Long useId = 0L;
//判断是否开通了账户
if (request.getIsOpenAccount()) // 开通账户
{
VUtil.trueThrowBusinessError(uService.lambdaQuery().eq(User::getUserCode, request.getSupplierCode()).exists())
.throwMessage("登录账号已存在");
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request.getRoleIds()))
.throwMessage("必须设置供应商的权限");
pwd = RandomUtil.randomString(6);
useId = addUser(request.getSupplierName(), request.getPciPhone(), request.getEnable() ? 1 : 2,
request.getAvatar(), request.getRemark(), request.getSupplierCode(), pwd, request.getEnableMustResetPwd(),
request.getRoleIds());
}
userSupplierService.add(new UserSupplier()
.setUserId(useId)
.setSupplierCode(request.getSupplierCode())
.setSupplierName(request.getSupplierName())
.setAbbreviation(request.getAbbreviation())
.setAbbreviation1(request.getAbbreviation1())
.setAbbreviation2(request.getAbbreviation2())
.setPciName(request.getPciName())
.setPciPhone(request.getPciPhone())
.setState(request.getEnable() ? 1 : 2)
.setIsOpenAccount(request.getIsOpenAccount())
.setDefaultLanguage(request.getDefaultLanguage())
.setAvatar(request.getAvatar())
.setRemark(request.getRemark())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now())
.setTypeId(request.getTypeId()));
return pwd;
}
@Transactional
public String updateSupplier(@Valid SupplierUpdateQO request) {
VUtil.trueThrowBusinessError(userSupplierService.lambdaQuery()
.eq(UserSupplier::getSupplierCode, request.getSupplierCode())
.ne(UserSupplier::getId, request.getId())
.exists())
.throwMessage("供应商编码已存在");
//首先判断是否是已经开通过
UserSupplier userSupplier = userSupplierService.getById(request.getId());
VUtil.trueThrowBusinessError(Objects.isNull(userSupplier) || StrUtil.isBlank(userSupplier.getSupplierCode()))
.throwMessage("供应商不存在");
String pwd = "";
Long useId = 0L;
useId = userSupplier.getUserId();
//判断是否开通了账户
if (request.getIsOpenAccount()) // 开通账户
{
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request.getRoleIds()))
.throwMessage("必须设置供应商的权限");
//判断之前是否开通过账户
if (useId.equals(0L)) //未开通过
{
VUtil.trueThrowBusinessError(uService.lambdaQuery()
.eq(User::getUserCode, request.getSupplierCode())
.exists())
.throwMessage("登录账号已存在");
pwd = RandomUtil.randomString(6);
useId = addUser(request.getSupplierName(), request.getPciPhone(), request.getEnable() ? 1 : 2,
request.getAvatar(), request.getRemark(), request.getSupplierCode(), pwd, request.getEnableMustResetPwd(),
request.getRoleIds());
} else {
// 删除之前的角色信息
userRoleMapService.remove(new LambdaQueryWrapper<UserRoleMap>().eq(UserRoleMap::getUserId, userSupplier.getUserId()));
//保存用户角色
userRoleMapService.saveBatch(request.getRoleIds().stream().map(roleId -> new UserRoleMap()
.setUserId(userSupplier.getUserId())
.setRoleId(roleId))
.collect(Collectors.toSet()));
//修改下用户的信息
uService.lambdaUpdate().eq(User::getId, request.getId())
.set(User::getState, 1)
.set(User::getUserName, request.getSupplierName())
.set(User::getPhone, request.getPciPhone())
.set(User::getLanguageCode, request.getDefaultLanguage())
.set(User::getAvatar, request.getAvatar())
.set(User::getRemark, request.getRemark())
.update();
}
} else {
//判断之前是否是开通过账号的
if (!useId.equals(0L)) //开通过
{
//将账户状态修改为启用状态
enableUser(request.getId(), 2);
// 删除角色信息
userRoleMapService.remove(new LambdaQueryWrapper<UserRoleMap>().eq(UserRoleMap::getUserId, userSupplier.getUserId()));
}
}
userSupplierService.lambdaUpdate()
.eq(UserSupplier::getId, request.getId())
.set(UserSupplier::getIsOpenAccount, request.getIsOpenAccount())
.set(UserSupplier::getDefaultLanguage, request.getDefaultLanguage())
.set(UserSupplier::getAvatar, request.getAvatar())
.set(UserSupplier::getRemark, request.getRemark())
.set(UserSupplier::getUpdateBy, UserUtil.getUserName())
.set(UserSupplier::getUpdateTime, LocalDateTime.now())
.set(UserSupplier::getTypeId, request.getTypeId())
.set(UserSupplier::getSupplierCode, request.getSupplierCode())
.set(UserSupplier::getState, request.getEnable() ? 1 : 2)
.set(UserSupplier::getPciPhone, request.getPciPhone())
.set(UserSupplier::getPciName, request.getPciName())
.set(UserSupplier::getAbbreviation2, request.getAbbreviation2())
.set(UserSupplier::getAbbreviation1, request.getAbbreviation1())
.set(UserSupplier::getAbbreviation, request.getAbbreviation())
.set(UserSupplier::getSupplierName, request.getSupplierName())
.set(UserSupplier::getUserId, useId)
.update();
return pwd; return pwd;
} }
@Transactional @Transactional
public String updateSupplier(@Valid SupplierUpdateQO request) { public void enableSupplier(@Valid @RequestBody EnableQO request) {
if (StrUtil.isNotBlank(request.getLoginName())) { UserSupplier userSupplier = userSupplierService.getById(request.getId());
VUtil.trueThrowBusinessError(uService.lambdaQuery() VUtil.trueThrowBusinessError(Objects.isNull(userSupplier) || StrUtil.isBlank(userSupplier.getSupplierCode()))
.eq(User::getUserCode, request.getLoginName()) .throwMessage("供应商不存在");
.ne(User::getId, request.getId()) if (request.getEnable()) {
.exists()) if (userSupplier.getIsOpenAccount()) {
.throwMessage("登录账号已存在"); enableUser(request.getId(), 2);
} }
VUtil.trueThrowBusinessError(userSupplierService.lambdaQuery() } else {
.eq(UserSupplier::getSupplierCode, request.getCode()) enableUser(request.getId(), 1);
.ne(UserSupplier::getUserId, request.getId())
.exists())
.throwMessage("供应商编码已存在");
User user=new User()
.setId(request.getId())
.setUserName(request.getUserName())
.setPhone(request.getPhone())
.setState(request.getEnable() ? 1 : 2)
.setAvatar(request.getAvatar())
.setRemark(request.getRemark())
.setUpdateBy(UserUtil.getUserName())
.setUpdateTime(LocalDateTime.now());
String pwd = null;
if (StrUtil.isNotBlank(request.getLoginName())) {
pwd = RandomUtil.randomString(6);
user.setUserCode(request.getLoginName());
user.setPassword(PASSWORDENCODER.encode(pwd));
} }
uService.update(user); userSupplierService.lambdaUpdate().set(UserSupplier::getState, request.getEnable() ? 1 : 2)
userSupplierService.update(new UserSupplier() .set(UserSupplier::getUpdateBy, UserUtil.getUserName())
.setUserId(request.getId()) .set(UserSupplier::getUpdateTime, LocalDateTime.now())
.setSupplierCode(request.getCode()) .eq(UserSupplier::getId, request.getId())
.setSupplierName(request.getName()) .update();
.setAbbreviation(request.getAbbreviation())
.setAbbreviation1(request.getAbbreviation1())
.setAbbreviation2(request.getAbbreviation2())
.setTypeId(request.getTypeId()));
userRoleMapService.remove(new LambdaQueryWrapper<UserRoleMap>().eq(UserRoleMap::getUserId, request.getId()));
if (CollectionUtil.isNotEmpty(request.getRoleIds())) {
userRoleMapService.saveBatch(request.getRoleIds().stream().map(roleId -> new UserRoleMap()
.setUserId(request.getId())
.setRoleId(roleId))
.collect(Collectors.toSet()));
}
return pwd;
} }
@Transactional @Transactional
public void deleteSupplier(@Valid @NotNull Long id) { public void deleteSupplier(@Valid @NotNull Long id) {
uService.delete(id); UserSupplier userSupplier = userSupplierService.getById(id);
userSupplierService.remove(new LambdaQueryWrapper<UserSupplier>().eq(UserSupplier::getUserId, id)); if (!userSupplier.getUserId().equals(0L)) {
userRoleMapService.deleteByUser(id); userRoleMapService.deleteByUser(id);
uService.delete(id);
StpUtil.logout(id); StpUtil.logout(id);
} }
userSupplierService.remove(new LambdaQueryWrapper<UserSupplier>().eq(UserSupplier::getUserId, id));
}
public IPage<UserSupplierVO> searchSupplier(@Valid UserSupplierSearchQO request) { public IPage<UserSupplierVO> searchSupplier(@Valid UserSupplierSearchQO request) {
IPage<UserSupplierVO> pu = userSupplierService.search(request); IPage<UserSupplierVO> pu = userSupplierService.search(request);
pu.getRecords().forEach(userVO -> userVO.setRoleIds(userRoleMapService.getAuthorizeRole(userVO.getId()))); // pu.getRecords().forEach(userVO -> userVO.setRoleIds(userRoleMapService.getAuthorizeRole(userVO.getId())));
return pu; return pu;
} }
@ -438,6 +530,8 @@ public class UserControllerService {
new Workbook() new Workbook()
.addSheet(new ListSheet<>(data)) .addSheet(new ListSheet<>(data))
.writeTo(osOut); .writeTo(osOut);
try (ByteArrayInputStream isIn = new ByteArrayInputStream(osOut.toByteArray())) {
return ApiResult.error(STATE.DataNoCheckPass, "导入文件失败", fileUploadService.upload("temp/" + DateTimeUtil.format(LocalDate.now(), "yyyyMMdd") + "/" + IdUtil.fastUUID() + ".xlsx", isIn));
try(ByteArrayInputStream isIn = new ByteArrayInputStream(osOut.toByteArray())) { try(ByteArrayInputStream isIn = new ByteArrayInputStream(osOut.toByteArray())) {
return ApiResult.error(STATE.DataNoCheckPass, "导入文件失败", fileUploadService.upload("temp/" + DateTimeUtil.format(LocalDate.now(), "yyyyMMdd") + "/" + IdUtil.fastUUID() + ".xlsx", isIn, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")); return ApiResult.error(STATE.DataNoCheckPass, "导入文件失败", fileUploadService.upload("temp/" + DateTimeUtil.format(LocalDate.now(), "yyyyMMdd") + "/" + IdUtil.fastUUID() + ".xlsx", isIn, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"));
} }
@ -455,10 +549,8 @@ public class UserControllerService {
@Transactional @Transactional
public boolean updateCheckAndImport(List<SupplierExcelDTO> data) { public boolean updateCheckAndImport(List<SupplierExcelDTO> data) {
List<DictionaryItem> suppliersCategory = dictionaryItemService.getListByDictionaryCode(Constant.DICTIONARY_SUPPLIERS_CATEGORY); List<DictionaryItem> suppliersCategory = dictionaryItemService.getListByDictionaryCode(Constant.DICTIONARY_SUPPLIERS_CATEGORY);
List<User> users = new ArrayList<>();
List<UserSupplier> userSuppliers = new ArrayList<>(); List<UserSupplier> userSuppliers = new ArrayList<>();
for (SupplierExcelDTO dto : data) { for (SupplierExcelDTO dto : data) {
User user = new User();
UserSupplier userSupplier = new UserSupplier(); UserSupplier userSupplier = new UserSupplier();
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
if (Objects.isNull(dto.getSupplierCode())) { if (Objects.isNull(dto.getSupplierCode())) {
@ -467,19 +559,6 @@ public class UserControllerService {
sb.append("供应商编号重复;"); sb.append("供应商编号重复;");
} else { } else {
userSupplier = userSupplierService.lambdaQuery().eq(UserSupplier::getSupplierCode, dto.getSupplierCode()).one(); userSupplier = userSupplierService.lambdaQuery().eq(UserSupplier::getSupplierCode, dto.getSupplierCode()).one();
if (Objects.isNull(userSupplier)) {
userSupplier = new UserSupplier();
user = new User();
user.setId(IdUtil.getSnowflakeNextId());
user.setCreateBy(UserUtil.getUserName());
user.setCreateTime(LocalDateTime.now());
userSupplier.setUserId(user.getId());
userSupplier.setSupplierCode(dto.getSupplierCode());
} else {
user = uService.getById(userSupplier.getUserId());
user.setUpdateBy(UserUtil.getUserName());
user.setUpdateTime(LocalDateTime.now());
}
} }
if (StrUtil.isBlank(dto.getSupplierName())) { if (StrUtil.isBlank(dto.getSupplierName())) {
sb.append("供应商名称不能为空;"); sb.append("供应商名称不能为空;");
@ -496,27 +575,25 @@ public class UserControllerService {
userSupplier.setTypeId(type.getId()); userSupplier.setTypeId(type.getId());
} }
} }
userSupplier.setUserId(0L);
userSupplier.setAbbreviation(dto.getAbbreviation()); userSupplier.setAbbreviation(dto.getAbbreviation());
userSupplier.setAbbreviation1(StringUtil.toPinYin(dto.getAbbreviation())); userSupplier.setAbbreviation1(StringUtil.toPinYin(dto.getAbbreviation()));
userSupplier.setAbbreviation2(StringUtil.getPinYinFirstLetter(dto.getAbbreviation())); userSupplier.setAbbreviation2(StringUtil.getPinYinFirstLetter(dto.getAbbreviation()));
user.setUserName(dto.getUserName()); userSupplier.setPciName(dto.getUserName());
user.setPhone(dto.getPhone()); userSupplier.setPciPhone(dto.getPhone());
user.setRemark(dto.getRemark()); userSupplier.setDefaultLanguage("");
if (StrUtil.isNotBlank(dto.getUserCode())) { userSupplier.setAvatar("");
if (uService.lambdaQuery().eq(User::getUserCode, dto.getUserCode()) userSupplier.setState(1);
.ne(Objects.nonNull(user.getId()), User::getId, user.getId()) userSupplier.setIsOpenAccount(false);
.exists()) { userSupplier.setRemark(dto.getRemark());
sb.append("登录账号已存在;"); userSupplier.setCreateBy(UserUtil.getUserName());
} else { userSupplier.setCreateTime(LocalDateTime.now());
user.setUserCode(dto.getUserCode()); userSupplier.setUpdateBy(UserUtil.getUserName());
} userSupplier.setUpdateTime(LocalDateTime.now());
}
dto.setResult(sb.toString()); dto.setResult(sb.toString());
users.add(user);
userSuppliers.add(userSupplier); userSuppliers.add(userSupplier);
} }
if (data.stream().noneMatch(it -> StrUtil.isNotBlank(it.getResult()))) { if (data.stream().noneMatch(it -> StrUtil.isNotBlank(it.getResult()))) {
uService.saveOrUpdateBatch(users);
userSupplierService.saveOrUpdateBatch(userSuppliers); userSupplierService.saveOrUpdateBatch(userSuppliers);
return true; return true;
} }
@ -543,9 +620,9 @@ public class UserControllerService {
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("供应商导出.xlsx", StandardCharsets.UTF_8)); response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("供应商导出.xlsx", StandardCharsets.UTF_8));
if (CollectionUtil.isEmpty(datas)) { if (CollectionUtil.isEmpty(datas)) {
datas.add(new SupplierExcelExportDTO() datas.add(new SupplierExcelExportDTO()
.setSupplierCode("(必填)供应商编号") .setSupplierCode("供应商编号")
.setSupplierName("(必填)供应商名称") .setSupplierName("供应商名称")
.setTypeName("(必填)供应商类别") .setTypeName("供应商类别")
.setUserName("负责人姓名") .setUserName("负责人姓名")
.setUserCode("登录账号,不填则不开通账号") .setUserCode("登录账号,不填则不开通账号")
.setPhone("负责人电话") .setPhone("负责人电话")
@ -568,22 +645,85 @@ public class UserControllerService {
@Transactional @Transactional
public void enableSupplierLoginBatch(@Valid SupplierLoginBatchQO request) { public void enableSupplierLoginBatch(@Valid SupplierLoginBatchQO request) {
if (StrUtil.isBlank(request.getPassword())) { // 判断存在是否已开通的账号
request.setPassword(RandomUtil.randomString(6)); List<UserSupplier> userSuppliers = userSupplierService.lambdaQuery()
.in(UserSupplier::getId, request.getIds())
.list();
Long iCount = userSuppliers.stream().filter(it -> it.getIsOpenAccount().equals(true)).count();
VUtil.trueThrowBusinessError(iCount > 0)
.throwMessage("存在已开通的供应商");
Long iCount1 = userSuppliers.stream().filter(it -> it.getState().equals(2)).count();
VUtil.trueThrowBusinessError(iCount1 > 0)
.throwMessage("存在已被禁用的供应商");
List<Long> userIds = userSuppliers.stream()
.filter(it -> it.getUserId() > 0)
.map(UserSupplier::getUserId)
.toList();
//找到已经开通过的账号修改密码
if (CollectionUtil.isNotEmpty(userIds)) {
for (Long userId : userIds) {
UserSupplier userSupplier = userSuppliers.stream()
.filter(it -> it.getUserId().equals(userId))
.findFirst().orElse(null);
if (Objects.isNull(userSupplier)) {
continue;
} }
request.setPassword(PASSWORDENCODER.encode(request.getPassword())); uService.lambdaUpdate().eq(User::getId, userSupplier.getId())
for (Long id : request.getIds()) { .set(User::getState, 1)
UserSupplier userSupplier = userSupplierService.getByUserId(id); .set(User::getUserName, userSupplier.getSupplierName())
User user = uService.getById(id); .set(User::getPhone, userSupplier.getPciPhone())
if (Objects.nonNull(userSupplier) && Objects.nonNull(user)) { .set(User::getLanguageCode, userSupplier.getDefaultLanguage())
user.setUserCode(userSupplier.getSupplierCode()); .set(User::getAvatar, userSupplier.getAvatar())
user.setPassword(request.getPassword()); .set(User::getRemark, userSupplier.getRemark())
user.setMustResetPwd(user.getEnableMustResetPwd()); .update();
user.setUpdateBy(UserUtil.getUserName());
user.setUpdateTime(LocalDateTime.now()); userSupplierService.lambdaUpdate()
uService.updateById(user); .set(UserSupplier::getIsOpenAccount, true)
userRoleMapService.authorize(id, request.getRoleIds()); .eq(UserSupplier::getId, userSupplier.getId())
.update();
}
userRoleMapService.authorizes(userIds, request.getRoleIds());
}
List<Long> ids = userSuppliers.stream()
.filter(it -> it.getUserId().equals(0L))
.map(UserSupplier::getId)
.toList();
for (Long id : ids) {
UserSupplier userSupplier = userSuppliers.stream().filter(it ->
it.getId().equals(id)).findFirst().orElse(null);
if (Objects.isNull(userSupplier)) {
continue;
}
Long userId = addUser(userSupplier.getSupplierName(), userSupplier.getPciPhone(), userSupplier.getState(),
userSupplier.getAvatar(), userSupplier.getRemark(), userSupplier.getSupplierCode(), request.getPassword(),
true,
request.getRoleIds());
userSupplierService.lambdaUpdate()
.set(UserSupplier::getUserId, userId)
.set(UserSupplier::getIsOpenAccount, true)
.eq(UserSupplier::getId, userSupplier.getId())
.update();
} }
} }
public void authorizeRoles(@Valid AuthorizeRolesQO request) {
userRoleMapService.authorizes(request.getUserId(), request.getRoleIds());
}
public UserSupplierItemVO getSupplierItem(@Valid Long id) {
UserSupplierItemVO vo = new UserSupplierItemVO();
vo.setSupplierItem(Convert.convert(UserSupplierVO.class, userSupplierService.getById(id)));
List<RoleSimpleVO> roleSimpleV = userRoleMapService.getAuthorizeRole(vo.getSupplierItem().getUserId());
if (CollectionUtil.isNotEmpty(roleSimpleV)) {
List<Long> ids = roleSimpleV.stream().map(RoleSimpleVO::getId).toList();
vo.setRoleIds(ids);
}
return vo;
} }
} }

View File

@ -43,12 +43,12 @@ public class SupplierExcelDTO {
*/ */
@ExcelColumn("*供应商类别") @ExcelColumn("*供应商类别")
private String typeName; private String typeName;
//
/** // /**
* 登录账号 // * 登录账号
*/ // */
@ExcelColumn("登录账号") // @ExcelColumn("登录账号")
private String userCode; // private String userCode;
/** /**
* 备注 * 备注

View File

@ -0,0 +1,18 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.util.List;
@Data
public class AuthorizeRolesQO {
//用户id
@NotNull
private List<Long> userId;
//角色id列表
private List<Long> roleIds;
}

View File

@ -0,0 +1,41 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
@Data
@Accessors(chain = true)
public class BarcodeLessReceivingQO {
/**
* 送货单项目ID
*/
private Long id;
/**
* 本次收货数量
*/
private BigDecimal receiptQty;
/**
* 批次号
*/
private String batchNumber;
/**
* 序列号
*/
private String serialNumbers;
/**
* 库存地点
*/
private String receivedWarehouse;
/**
* 是否质检
*/
private Boolean isQuality;
}

View File

@ -0,0 +1,13 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class BarcodeLessReceivingSearchQO {
/**
* 送货单Id
*/
private Long id;
}

View File

@ -13,13 +13,13 @@ public class SupplierAddQO {
* 编码 * 编码
*/ */
@NotBlank @NotBlank
private String code; private String supplierCode;
/** /**
* 名称 * 名称
*/ */
@NotBlank @NotBlank
private String name; private String supplierName;
/** /**
* 供应商简称 * 供应商简称
@ -39,12 +39,12 @@ public class SupplierAddQO {
/** /**
* 负责人姓名 * 负责人姓名
*/ */
private String userName; private String pciName;
/** /**
* 负责人电话 * 负责人电话
*/ */
private String phone; private String pciPhone;
/** /**
* 供应商类别 * 供应商类别
@ -68,21 +68,23 @@ public class SupplierAddQO {
@NotNull @NotNull
private Boolean enable; private Boolean enable;
/**
* 登录账号
*/
private String loginName;
/** /**
* 角色ID列表 * 角色ID列表
*/ */
private List<Long> roleIds; private List<Long> roleIds;
/**
* 是否开通账号
*/
@NotNull
private Boolean isOpenAccount;
/** /**
* 默认语言 * 默认语言
*/ */
@NotBlank @NotBlank
private String languageCode; private String defaultLanguage;
/** /**
* 初始化密码后是否强制要求登录后重设密码 * 初始化密码后是否强制要求登录后重设密码

View File

@ -0,0 +1,103 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
@Data
@Accessors(chain = true)
public class BarcodeLessReceivingVO {
/**
* 项ID
*/
private Long id;
/**
* 送货单ID
*/
private String orderId;
/**
* 采购订单号
*/
private String poNum;
/**
* 采购订单行号
*/
private String poLineNumber;
/**
* 送货单行号
*/
private String lineNumber;
/**
* 送货单号
*/
private String noteNum;
/**
* 物料编码
*/
private String itemCode;
/**
* 物料描述
*/
private String itemName;
/**
* 单位
*/
private String uomCode;
/**
* 未收货数量
*/
private BigDecimal unRecieveQty;
/**
* 送货数量
*/
private BigDecimal deliveryQty;
/**
* 本次收货数量
*/
private BigDecimal receiptQty;
/**
* 批次号
*/
private String batchNumber;
/**
* 序列号
*/
private String serialNumbers;
/**
* 工厂
*/
private String iuCode;
/**
* 库存地点
*/
private String receivedWarehouse;
/**
* 制造商
*/
private String supplierNum;
/**
* 是否质检
*/
private Boolean isQuality;
}

View File

@ -3,10 +3,12 @@ package com.nflg.wms.common.pojo.vo;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal; import java.math.BigDecimal;
@Data @Data
@Accessors(chain = true)
public class SRMOrderItemVO { public class SRMOrderItemVO {
private Long id; private Long id;

View File

@ -0,0 +1,17 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Collection;
@Data
@Accessors
public class UserSupplierItemVO {
//所属角色
private Collection<Long> roleIds;
private UserSupplierVO supplierItem;
// private Collection<Long> roleIds;
}

View File

@ -7,13 +7,12 @@ import java.util.Collection;
@Data @Data
public class UserSupplierVO { public class UserSupplierVO {
private Long id; private Long id;
/** /**
* 头像 * 用户id
*/ */
private String avatar; private Long userId;
/** /**
* 供应商编号 * 供应商编号
@ -35,45 +34,50 @@ public class UserSupplierVO {
*/ */
private String abbreviation1; private String abbreviation1;
/**
* 供应商类别字典项id
*/
private Long typeId;
/** /**
* 简称全拼 * 简称全拼
*/ */
private String abbreviation2; private String abbreviation2;
/** /**
* 用户名称 * 是否开通账号
*/ */
private String userName; private Boolean isOpenAccount;
/** /**
* 用户密码BCrypt * 代理商状态 1 启用 2 禁用
*/
private String password;
/**
* 邮箱地址
*/
private String email;
/**
* 手机号码
*/
private String phone;
/**
* 状态1-启用2禁用
*/ */
private Integer state; private Integer state;
/** /**
* 供应商类别id * 负责人姓名
*/ */
private Long typeId; private String pciName;
/** /**
* 供应商类别名称 * 负责人电话
*/ */
private String typeName; private String pciPhone;
/**
* 默认语言
*/
private String defaultLanguage;
/**
* 默认头像
*/
private String avatar;
/**
* 备注
*/
private String remark;
/** /**
* 创建人 * 创建人
@ -95,26 +99,4 @@ public class UserSupplierVO {
*/ */
private LocalDateTime updateTime; private LocalDateTime updateTime;
/**
* 用户工号
*/
private String userCode;
/**
* 备注
*/
private String remark;
/**
* 默认语言
*/
private String languageCode;
/**
* 初始化密码后是否强制要求登录后重设密码
*/
private Boolean enableMustResetPwd;
//所属角色
private Collection<RoleSimpleVO> roleIds;
} }

View File

@ -9,10 +9,11 @@ import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime;
/** /**
* <p> * <p>
* * 供应商
* </p> * </p>
* *
* @author 代码生成器生成 * @author 代码生成器生成
@ -55,13 +56,70 @@ public class UserSupplier implements Serializable {
*/ */
private String abbreviation1; private String abbreviation1;
/**
* 供应商类别字典项id
*/
private Long typeId;
/** /**
* 简称全拼 * 简称全拼
*/ */
private String abbreviation2; private String abbreviation2;
/** /**
* 供应商类别 * 是否开通账号
*/ */
private Long typeId; private Boolean isOpenAccount;
/**
* 代理商状态 1 启用 2 禁用
*/
private Integer state;
/**
* 负责人姓名
*/
private String pciName;
/**
* 负责人电话
*/
private String pciPhone;
/**
* 默认语言
*/
private String defaultLanguage;
/**
* 默认头像
*/
private String avatar;
/**
* 备注
*/
private String remark;
/**
* 创建人
*/
private String createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 最后更新人
*/
private String updateBy;
/**
* 最后更新时间
*/
private LocalDateTime updateTime;
} }

View File

@ -32,4 +32,6 @@ public interface IUserRoleMapService extends IService<UserRoleMap> {
List<RoleSimpleVO> getAuthorizeRole(@Valid @NotNull Long userId); List<RoleSimpleVO> getAuthorizeRole(@Valid @NotNull Long userId);
void authorize(Long userId, List<Long> roleIds); void authorize(Long userId, List<Long> roleIds);
void authorizes(List<Long> userIds, List<Long> roleIds);
} }

View File

@ -15,6 +15,7 @@ import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -81,4 +82,20 @@ public class UserRoleMapServiceImpl extends ServiceImpl<UserRoleMapMapper, UserR
saveBatch(datas); saveBatch(datas);
} }
} }
@Override
@Transactional
public void authorizes(List<Long> userIds, List<Long> roleIds) {
remove(new LambdaQueryWrapper<UserRoleMap>().in(UserRoleMap::getUserId, userIds));
List<UserRoleMap> batchs = new ArrayList<>();
if (CollectionUtil.isNotEmpty(roleIds)) {
for (Long userId : userIds) {
List<UserRoleMap> datas = roleIds.stream().map(roleId -> new UserRoleMap()
.setUserId(userId)
.setRoleId(roleId)).collect(Collectors.toList());
batchs.addAll(datas);
}
saveBatch(batchs);
}
}
} }

View File

@ -3,8 +3,11 @@
<mapper namespace="com.nflg.wms.repository.mapper.UserSupplierMapper"> <mapper namespace="com.nflg.wms.repository.mapper.UserSupplierMapper">
<select id="search" resultType="com.nflg.wms.common.pojo.vo.UserSupplierVO"> <select id="search" resultType="com.nflg.wms.common.pojo.vo.UserSupplierVO">
select * select a.id,user_id,supplier_code,supplier_name,abbreviation,abbreviation1,type_id,abbreviation2,
from v_user_supplier is_open_account,"state",pci_name,pci_phone,default_language,avatar,remark,
di.name AS type_name,a.create_by,a.create_time,a.update_by,a.update_time
from user_supplier a
LEFT JOIN dictionary_item di ON a.type_id = di.id
<where> <where>
<if test="request.name!=null and request.name!=''"> <if test="request.name!=null and request.name!=''">
and (supplier_name like concat('%', #{request.name}, '%') and (supplier_name like concat('%', #{request.name}, '%')
@ -16,10 +19,10 @@
and supplier_code like concat('%', #{request.code}, '%') and supplier_code like concat('%', #{request.code}, '%')
</if> </if>
<if test="request.startDate != null"> <if test="request.startDate != null">
and create_time >= #{request.startDate} and a.create_time >= #{request.startDate}
</if> </if>
<if test="request.endDate != null"> <if test="request.endDate != null">
and create_time &lt;= #{request.endDate} and a.create_time &lt;= #{request.endDate}
</if> </if>
</where> </where>
</select> </select>

View File

@ -33,7 +33,7 @@ public class CodeGeneratorTest {
) )
.strategyConfig(builder -> { .strategyConfig(builder -> {
builder builder
.addInclude("wms_component_outbound") //只生成指定表 .addInclude("user_supplier") //只生成指定表
.entityBuilder().idType(IdType.ASSIGN_ID) .entityBuilder().idType(IdType.ASSIGN_ID)
.enableLombok() .enableLombok()
.enableChainModel() .enableChainModel()

View File

@ -49,6 +49,7 @@
</properties> </properties>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId> <artifactId>spring-cloud-dependencies</artifactId>