diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 6b2558c..910d8e9 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -6,7 +6,11 @@ "Bash(mvn compile:*)", "Bash(xargs cat:*)", "Bash(cd:*)", - "Bash(grep:*)" + "Bash(grep:*)", + "Bash(copy:*)", + "Bash(cmd /c \"copy /Y \"\"D:\\\\git\\\\bomaos-shop\\\\src\\\\main\\\\resources\\\\templates\\\\system\\\\supplier.html\"\" \"\"D:\\\\git\\\\bomaos-shop\\\\target\\\\classes\\\\templates\\\\system\\\\supplier.html\"\"\")", + "Bash(cmd /c \"copy /Y \"\"D:\\\\git\\\\bomaos-shop\\\\src\\\\main\\\\resources\\\\templates\\\\system\\\\user.html\"\" \"\"D:\\\\git\\\\bomaos-shop\\\\target\\\\classes\\\\templates\\\\system\\\\user.html\"\"\")", + "Bash(javap:*)" ] } } diff --git a/src/main/java/com/bomaos/common/system/controller/SupplierController.java b/src/main/java/com/bomaos/common/system/controller/SupplierController.java index dac0531..dc05f15 100644 --- a/src/main/java/com/bomaos/common/system/controller/SupplierController.java +++ b/src/main/java/com/bomaos/common/system/controller/SupplierController.java @@ -1,19 +1,25 @@ package com.bomaos.common.system.controller; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.bomaos.common.core.annotation.OperLog; import com.bomaos.common.core.web.*; import com.bomaos.common.system.entity.Supplier; +import com.bomaos.common.system.entity.User; import com.bomaos.common.system.service.SupplierService; +import com.bomaos.common.system.service.UserService; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; +import java.util.Collections; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; /** * 供应商管理 @@ -22,9 +28,15 @@ import java.util.List; @RequestMapping("/sys/supplier") public class SupplierController extends BaseController { + /** 供应商角色ID */ + private static final Integer SUPPLIER_ROLE_ID = 4; + @Autowired private SupplierService supplierService; + @Autowired + private UserService userService; + @RequiresPermissions("sys:supplier:view") @RequestMapping() public String view() { @@ -69,44 +81,85 @@ public class SupplierController extends BaseController { } /** - * 添加供应商 + * 添加供应商(同时创建登录账号) */ + @Transactional @RequiresPermissions("sys:supplier:save") @OperLog(value = "供应商管理", desc = "添加", param = false, result = true) @ResponseBody @RequestMapping("/save") public JsonResult save(Supplier supplier) { + if (supplier.getUsername() == null || supplier.getUsername().trim().isEmpty()) { + return JsonResult.error("登录账号不能为空"); + } + if (supplier.getPassword() == null || supplier.getPassword().trim().isEmpty()) { + return JsonResult.error("登录密码不能为空"); + } + // 检查账号是否已存在 + User existUser = userService.getByUsername(supplier.getUsername().trim()); + if (existUser != null) { + return JsonResult.error("登录账号已存在"); + } + // 创建供应商 supplier.setCreateTime(new Date()); supplier.setUpdateTime(new Date()); - if (supplierService.save(supplier)) { - return JsonResult.ok("添加成功"); + if (!supplierService.save(supplier)) { + return JsonResult.error("添加失败"); } - return JsonResult.error("添加失败"); + // 创建关联的登录账号 + User user = new User(); + user.setUsername(supplier.getUsername().trim()); + user.setPassword(userService.encodePsw(supplier.getPassword())); + user.setNickName(supplier.getNickName() != null && !supplier.getNickName().trim().isEmpty() + ? supplier.getNickName().trim() : supplier.getName()); + user.setSupplierId(supplier.getId()); + user.setState(0); + user.setRoleIds(Collections.singletonList(SUPPLIER_ROLE_ID)); + if (!userService.saveUser(user)) { + return JsonResult.error("创建登录账号失败"); + } + return JsonResult.ok("添加成功"); } /** - * 修改供应商 + * 修改供应商(同步更新关联用户昵称) */ + @Transactional @RequiresPermissions("sys:supplier:update") @OperLog(value = "供应商管理", desc = "修改", param = false, result = true) @ResponseBody @RequestMapping("/update") public JsonResult update(Supplier supplier) { supplier.setUpdateTime(new Date()); - if (supplierService.updateById(supplier)) { - return JsonResult.ok("修改成功"); + if (!supplierService.updateById(supplier)) { + return JsonResult.error("修改失败"); } - return JsonResult.error("修改失败"); + // 同步更新关联用户的昵称 + if (supplier.getNickName() != null && !supplier.getNickName().trim().isEmpty()) { + User linkedUser = userService.getOne( + new QueryWrapper().eq("supplier_id", supplier.getId())); + if (linkedUser != null) { + User updateUser = new User(); + updateUser.setUserId(linkedUser.getUserId()); + updateUser.setNickName(supplier.getNickName().trim()); + userService.updateById(updateUser); + } + } + return JsonResult.ok("修改成功"); } /** - * 删除供应商 + * 删除供应商(同时删除关联用户) */ + @Transactional @RequiresPermissions("sys:supplier:remove") @OperLog(value = "供应商管理", desc = "删除", result = true) @ResponseBody @RequestMapping("/remove") public JsonResult remove(Integer id) { + // 删除关联用户 + userService.remove(new QueryWrapper().eq("supplier_id", id)); + // 删除供应商 if (supplierService.removeById(id)) { return JsonResult.ok("删除成功"); } @@ -114,17 +167,46 @@ public class SupplierController extends BaseController { } /** - * 批量删除供应商 + * 批量删除供应商(同时删除关联用户) */ + @Transactional @RequiresPermissions("sys:supplier:remove") @OperLog(value = "供应商管理", desc = "批量删除", result = true) @ResponseBody @RequestMapping("/removeBatch") public JsonResult removeBatch(@RequestBody List ids) { + // 批量删除关联用户 + userService.remove(new QueryWrapper().in("supplier_id", ids)); + // 批量删除供应商 if (supplierService.removeByIds(ids)) { return JsonResult.ok("删除成功"); } return JsonResult.error("删除失败"); } + /** + * 重置供应商账号密码 + */ + @RequiresPermissions("sys:supplier:update") + @OperLog(value = "供应商管理", desc = "重置密码", param = false, result = true) + @ResponseBody + @RequestMapping("/psw/reset") + public JsonResult resetPsw(Integer id, String password) { + if (password == null || password.trim().isEmpty()) { + return JsonResult.error("密码不能为空"); + } + User linkedUser = userService.getOne( + new QueryWrapper().eq("supplier_id", id)); + if (linkedUser == null) { + return JsonResult.error("该供应商没有关联的登录账号"); + } + User updateUser = new User(); + updateUser.setUserId(linkedUser.getUserId()); + updateUser.setPassword(userService.encodePsw(password)); + if (userService.updateById(updateUser)) { + return JsonResult.ok("重置成功"); + } + return JsonResult.error("重置失败"); + } + } diff --git a/src/main/java/com/bomaos/common/system/controller/UserController.java b/src/main/java/com/bomaos/common/system/controller/UserController.java index 58f392e..728671c 100644 --- a/src/main/java/com/bomaos/common/system/controller/UserController.java +++ b/src/main/java/com/bomaos/common/system/controller/UserController.java @@ -12,7 +12,6 @@ import com.bomaos.common.system.entity.DictionaryData; import com.bomaos.common.system.entity.Organization; import com.bomaos.common.system.entity.Role; import com.bomaos.common.system.entity.User; -import com.bomaos.common.system.entity.Supplier; import com.bomaos.common.system.service.*; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; @@ -45,8 +44,6 @@ public class UserController extends BaseController { private RoleService roleService; @Autowired private OrganizationService organizationService; - @Autowired - private SupplierService supplierService; @RequiresPermissions("sys:user:view") @RequestMapping() @@ -54,7 +51,6 @@ public class UserController extends BaseController { model.addAttribute("sexList", dictionaryDataService.listByDictCode("sex")); model.addAttribute("organizationTypeList", dictionaryDataService.listByDictCode("organization_type")); model.addAttribute("rolesJson", JSON.toJSONString(roleService.list())); - model.addAttribute("supplierListJson", JSON.toJSONString(supplierService.list())); return "system/user.html"; } diff --git a/src/main/java/com/bomaos/common/system/entity/Supplier.java b/src/main/java/com/bomaos/common/system/entity/Supplier.java index c4dab90..6f2f7ef 100644 --- a/src/main/java/com/bomaos/common/system/entity/Supplier.java +++ b/src/main/java/com/bomaos/common/system/entity/Supplier.java @@ -1,6 +1,7 @@ package com.bomaos.common.system.entity; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -49,4 +50,28 @@ public class Supplier implements Serializable { * 更新时间 */ private Date updateTime; + + /** + * 关联用户ID + */ + @TableField(exist = false) + private Integer userId; + + /** + * 登录账号 + */ + @TableField(exist = false) + private String username; + + /** + * 登录密码(仅创建时使用) + */ + @TableField(exist = false) + private String password; + + /** + * 用户昵称 + */ + @TableField(exist = false) + private String nickName; } diff --git a/src/main/java/com/bomaos/common/system/mapper/xml/SupplierMapper.xml b/src/main/java/com/bomaos/common/system/mapper/xml/SupplierMapper.xml index d68fbe2..155196e 100644 --- a/src/main/java/com/bomaos/common/system/mapper/xml/SupplierMapper.xml +++ b/src/main/java/com/bomaos/common/system/mapper/xml/SupplierMapper.xml @@ -4,8 +4,12 @@ - SELECT a.* + SELECT a.*, + u.user_id as userId, + u.username as username, + u.nick_name as nickName FROM sys_supplier a + LEFT JOIN sys_user u ON u.supplier_id = a.id AND u.deleted = 0 diff --git a/src/main/java/com/bomaos/orders/controller/OrdersController.java b/src/main/java/com/bomaos/orders/controller/OrdersController.java index b0c3282..7be0917 100644 --- a/src/main/java/com/bomaos/orders/controller/OrdersController.java +++ b/src/main/java/com/bomaos/orders/controller/OrdersController.java @@ -9,7 +9,9 @@ import com.bomaos.common.core.utils.DateUtil; import com.bomaos.common.core.utils.FormCheckUtil; import com.bomaos.common.core.utils.RequestParamsUtil; import com.bomaos.common.core.web.*; +import com.bomaos.common.system.entity.Supplier; import com.bomaos.common.system.service.EmailService; +import com.bomaos.common.system.service.SupplierService; import com.bomaos.orders.entity.Orders; import com.bomaos.orders.service.OrdersService; import com.bomaos.orders.vo.OrdersVo; @@ -67,6 +69,9 @@ public class OrdersController extends BaseController { @Autowired private ShopSettingsService shopSettingsService; + @Autowired + private SupplierService supplierService; + @RequiresPermissions("orders:orders:view") @RequestMapping() public String view() { @@ -409,6 +414,17 @@ public class OrdersController extends BaseController { if (ordersService.updateById(orders1)) { cardsService.save(cards); + // 手动发货完成后,将订单金额累加到供应商余额 + if (orders.getSupplierId() != null && orders.getSupplierId() > 0) { + Supplier supplier = supplierService.getById(orders.getSupplierId()); + if (supplier != null) { + Supplier updateSupplier = new Supplier(); + updateSupplier.setId(supplier.getId()); + updateSupplier.setBalance(supplier.getBalance().add(orders.getMoney())); + updateSupplier.setUpdateTime(new Date()); + supplierService.updateById(updateSupplier); + } + } /** * 邮件通知 * 后台开启邮件通知, @@ -652,6 +668,19 @@ public class OrdersController extends BaseController { } } } + + // 补单完成后,将订单金额累加到供应商余额 + if (member.getSupplierId() != null && member.getSupplierId() > 0) { + Supplier supplier = supplierService.getById(member.getSupplierId()); + if (supplier != null) { + Supplier updateSupplier = new Supplier(); + updateSupplier.setId(supplier.getId()); + updateSupplier.setBalance(supplier.getBalance().add(member.getMoney())); + updateSupplier.setUpdateTime(new Date()); + supplierService.updateById(updateSupplier); + } + } + return JsonResult.ok("补单成功!!"); } diff --git a/src/main/java/com/bomaos/reception/controller/NotifyController.java b/src/main/java/com/bomaos/reception/controller/NotifyController.java index 1b7b552..47b698f 100644 --- a/src/main/java/com/bomaos/reception/controller/NotifyController.java +++ b/src/main/java/com/bomaos/reception/controller/NotifyController.java @@ -20,7 +20,9 @@ import com.bomaos.common.core.utils.FormCheckUtil; import com.bomaos.common.core.utils.RequestParamsUtil; import com.bomaos.common.core.utils.StringUtil; import com.bomaos.common.core.web.JsonResult; +import com.bomaos.common.system.entity.Supplier; import com.bomaos.common.system.service.EmailService; +import com.bomaos.common.system.service.SupplierService; import com.bomaos.orders.entity.Orders; import com.bomaos.orders.service.OrdersService; import com.bomaos.products.entity.Products; @@ -90,6 +92,9 @@ public class NotifyController { @Autowired private ShopSettingsService shopSettingsService; + @Autowired + private SupplierService supplierService; + @Autowired private SynchronizedByKeyService synchronizedByKeyService; @@ -1089,6 +1094,20 @@ public class NotifyController { } } } + + // 订单完成后,将订单金额累加到供应商余额 + if (member.getSupplierId() != null && member.getSupplierId() > 0) { + Supplier supplier = supplierService.getById(member.getSupplierId()); + if (supplier != null) { + Supplier updateSupplier = new Supplier(); + updateSupplier.setId(supplier.getId()); + BigDecimal orderMoney = new BigDecimal(money); + updateSupplier.setBalance(supplier.getBalance().add(orderMoney)); + updateSupplier.setUpdateTime(new Date()); + supplierService.updateById(updateSupplier); + } + } + return success; } diff --git a/src/main/resources/templates/system/supplier.html b/src/main/resources/templates/system/supplier.html index 6f67830..a7078e6 100644 --- a/src/main/resources/templates/system/supplier.html +++ b/src/main/resources/templates/system/supplier.html @@ -38,6 +38,7 @@