diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java index 79d5ee5..86e073a 100644 --- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java @@ -9,7 +9,7 @@ import net.lab1024.sa.base.constant.CacheKeyConst; * @Date 2022-01-07 18:59:22 * @Wechat zhuoda1024 * @Email lab1024@163.com - * @Copyright 1024创新实验室 + * @Copyright 1024创新实验室 */ public class AdminCacheConst extends CacheKeyConst { @@ -62,6 +62,7 @@ public class AdminCacheConst extends CacheKeyConst { public static final String LOCATION_ENTITY = "location_cache"; public static final String ITEM_ENTITY = "item_cache"; public static final String STOCK_ENTITY = "stock_cache"; + public static final String ADDRESS_ENTITY = "address_cache"; } } diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/controller/AddressController.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/controller/AddressController.java new file mode 100644 index 0000000..3d19214 --- /dev/null +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/controller/AddressController.java @@ -0,0 +1,109 @@ +package net.lab1024.sa.admin.module.business.base.address.controller; + +import jakarta.servlet.http.HttpServletResponse; +import net.lab1024.sa.admin.module.business.base.address.domain.entity.AddressEntity; +import net.lab1024.sa.admin.module.business.base.address.domain.form.AddressAddForm; +import net.lab1024.sa.admin.module.business.base.address.domain.form.AddressQueryForm; +import net.lab1024.sa.admin.module.business.base.address.domain.form.AddressSelect; +import net.lab1024.sa.admin.module.business.base.address.domain.form.AddressUpdateForm; +import net.lab1024.sa.admin.module.business.base.address.domain.vo.AddressExcelVO; +import net.lab1024.sa.admin.module.business.base.address.domain.vo.AddressVO; +import net.lab1024.sa.admin.module.business.base.address.service.AddressQueryService; +import net.lab1024.sa.admin.module.business.base.address.service.AddressService; +import net.lab1024.sa.admin.module.business.base.item.domain.entity.ItemEntity; +import net.lab1024.sa.admin.module.business.base.item.domain.form.ItemSelect; +import net.lab1024.sa.admin.module.business.base.item.domain.vo.ItemsExcelVO; +import net.lab1024.sa.base.common.domain.RequestUser; +import net.lab1024.sa.base.common.domain.ValidateList; +import net.lab1024.sa.base.common.util.SmartExcelUtil; +import net.lab1024.sa.base.common.util.SmartRequestUtil; +import org.springframework.web.bind.annotation.*; +import net.lab1024.sa.base.common.domain.ResponseDTO; +import net.lab1024.sa.base.common.domain.PageResult; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.List; + +/** + * 收货地址 Controller + * + * @author hj + * @since 2024-12-26 15:35:23 + * copyright 友仓 + */ + +@RestController +@Tag(name = "收货地址") +public class AddressController { + + @Resource + private AddressService addressService; + + @Resource + private AddressQueryService addressQueryService; + + @Operation(summary = "分页查询 @author hj") + @PostMapping("/address/queryPage") + @SaCheckPermission("address:query") + public ResponseDTO> queryPage(@RequestBody @Valid AddressQueryForm queryForm) { + return ResponseDTO.ok(addressQueryService.queryPage(queryForm)); + } + + @Operation(summary = "添加 @author hj") + @PostMapping("/address/add") + @SaCheckPermission("address:add") + public ResponseDTO add(@RequestBody @Valid AddressAddForm addForm) { + RequestUser requestUser = SmartRequestUtil.getRequestUser(); + addForm.setCreateUserId(requestUser.getUserId()); + addForm.setCreateUserName(requestUser.getUserName()); + return addressService.add(addForm); + } + + @Operation(summary = "更新 @author hj") + @PostMapping("/address/update") + @SaCheckPermission("address:update") + public ResponseDTO update(@RequestBody @Valid AddressUpdateForm updateForm) { + return addressService.update(updateForm); + } + + @Operation(summary = "批量删除 @author hj") + @PostMapping("/address/batchDelete") + @SaCheckPermission("address:batchDelete") + public ResponseDTO batchDelete(@RequestBody ValidateList idList) { + return addressService.batchDelete(idList); + } + + @Operation(summary = "单个删除 @author hj") + @GetMapping("/address/delete") + @SaCheckPermission("address:delete") + public ResponseDTO delete(@RequestParam Long addressId) { + return addressService.delete(addressId); + } + + @Operation(summary = "地址下拉查询") + @PostMapping("/address/queryAddress") + public ResponseDTO> queryAddress(@RequestBody AddressSelect addressSelect) { + return ResponseDTO.ok(addressQueryService.queryAddress(addressSelect)); + } + + @Operation(summary = "导入 霍锦") + @PostMapping("/address/importAddress") + @SaCheckPermission("address:importAddress") + public ResponseDTO importAddress(@RequestParam MultipartFile file) { + return addressService.importAddress(file); + } + + @Operation(summary = "导出 霍锦") + @GetMapping("/address/exportAddress") + @SaCheckPermission("address:exportAddress") + public void exportAddress(HttpServletResponse response) throws IOException { + List addressList = addressQueryService.getAddressExcelVOList(); + SmartExcelUtil.exportExcel(response, "收货地址信息.xlsx", "收货地址", AddressExcelVO.class, addressList); + } +} diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/dao/AddressDao.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/dao/AddressDao.java new file mode 100644 index 0000000..3ce927a --- /dev/null +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/dao/AddressDao.java @@ -0,0 +1,34 @@ +package net.lab1024.sa.admin.module.business.base.address.dao; + +import java.util.List; +import net.lab1024.sa.admin.module.business.base.address.domain.entity.AddressEntity; +import net.lab1024.sa.admin.module.business.base.address.domain.form.AddressQueryForm; +import net.lab1024.sa.admin.module.business.base.address.domain.vo.AddressVO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +/** + * 收货地址 Dao + * + * @Author hj + * @Date 2024-12-26 15:35:23 + * @Copyright 友仓 + */ + +@Mapper +@Component +public interface AddressDao extends BaseMapper { + + /** + * 分页 查询 + * + * @param page + * @param queryForm + * @return + */ + List queryPage(Page page, @Param("queryForm") AddressQueryForm queryForm); + +} diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/entity/AddressEntity.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/entity/AddressEntity.java new file mode 100644 index 0000000..b1c0e51 --- /dev/null +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/entity/AddressEntity.java @@ -0,0 +1,78 @@ +package net.lab1024.sa.admin.module.business.base.address.domain.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +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 java.time.LocalDateTime; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 收货地址 实体类 + * + * @author hj + * @since 2024-12-26 15:35:23 + * copyright 友仓 + */ + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName("t_address") +public class AddressEntity { + + /** + * 收货地址id + */ + @TableId(type = IdType.AUTO) + private Long addressId; + + /** + * 名称/单位 + */ + private String name; + + /** + * 联系人 + */ + private String person; + + /** + * 电话 + */ + private String telephone; + + /** + * 地址 + */ + private String address; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 创建人ID + */ + private Long createUserId; + + /** + * 创建人 + */ + private String createUserName; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + +} diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/form/AddressAddForm.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/form/AddressAddForm.java new file mode 100644 index 0000000..d2f0e58 --- /dev/null +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/form/AddressAddForm.java @@ -0,0 +1,35 @@ +package net.lab1024.sa.admin.module.business.base.address.domain.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 收货地址 新建表单 + * + * @author hj + * @since 2024-12-26 15:35:23 + * copyright 友仓 + */ + +@Data +public class AddressAddForm { + + @Schema(description = "名称/单位") + private String name; + + @Schema(description = "联系人") + private String person; + + @Schema(description = "电话") + private String telephone; + + @Schema(description = "地址") + private String address; + + @Schema(hidden = true) + private Long createUserId; + + @Schema(hidden = true) + private String createUserName; + +} \ No newline at end of file diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/form/AddressImportForm.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/form/AddressImportForm.java new file mode 100644 index 0000000..4c3aef9 --- /dev/null +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/form/AddressImportForm.java @@ -0,0 +1,19 @@ +package net.lab1024.sa.admin.module.business.base.address.domain.form; + +import cn.idev.excel.annotation.ExcelProperty; +import lombok.Data; + +@Data +public class AddressImportForm { + @ExcelProperty("收货单位") + private String name; + + @ExcelProperty("联系人") + private String person; + + @ExcelProperty("电话") + private String telephone; + + @ExcelProperty("地址") + private String address; +} diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/form/AddressQueryForm.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/form/AddressQueryForm.java new file mode 100644 index 0000000..c55bcb4 --- /dev/null +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/form/AddressQueryForm.java @@ -0,0 +1,23 @@ +package net.lab1024.sa.admin.module.business.base.address.domain.form; + +import net.lab1024.sa.base.common.domain.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 收货地址 分页查询表单 + * + * @author hj + * @since 2024-12-26 15:35:23 + * copyright 友仓 + */ + +@Data +@EqualsAndHashCode(callSuper = false) +public class AddressQueryForm extends PageParam { + + @Schema(description = "收货单位") + private Long addressId; + +} diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/form/AddressSelect.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/form/AddressSelect.java new file mode 100644 index 0000000..3936382 --- /dev/null +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/form/AddressSelect.java @@ -0,0 +1,12 @@ +package net.lab1024.sa.admin.module.business.base.address.domain.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class AddressSelect { + + +} diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/form/AddressUpdateForm.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/form/AddressUpdateForm.java new file mode 100644 index 0000000..cbc3e4c --- /dev/null +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/form/AddressUpdateForm.java @@ -0,0 +1,22 @@ +package net.lab1024.sa.admin.module.business.base.address.domain.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * 收货地址 更新表单 + * + * @Author hj + * @Date 2024-12-26 15:35:23 + * @Copyright 友仓 + */ + +@Data +public class AddressUpdateForm extends AddressAddForm{ + + @Schema(description = "收货地址id", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "收货地址id 不能为空") + private Long addressId; + +} \ No newline at end of file diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/vo/AddressExcelVO.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/vo/AddressExcelVO.java new file mode 100644 index 0000000..b437231 --- /dev/null +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/vo/AddressExcelVO.java @@ -0,0 +1,29 @@ +package net.lab1024.sa.admin.module.business.base.address.domain.vo; + +import cn.idev.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class AddressExcelVO { + @ExcelProperty("收货单位") + private String name; + + @ExcelProperty("联系人") + private String person; + + @ExcelProperty("电话") + private String telephone; + + @ExcelProperty("地址") + private String address; + +} diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/vo/AddressVO.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/vo/AddressVO.java new file mode 100644 index 0000000..a1f08a1 --- /dev/null +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/domain/vo/AddressVO.java @@ -0,0 +1,37 @@ +package net.lab1024.sa.admin.module.business.base.address.domain.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDateTime; +import lombok.Data; + +/** + * 收货地址 列表VO + * + * @Author hj + * @Date 2024-12-26 15:35:23 + * @Copyright 友仓 + */ + +@Data +public class AddressVO { + + + @Schema(description = "收货地址id") + private Long addressId; + + @Schema(description = "名称/单位") + private String name; + + @Schema(description = "联系人") + private String person; + + @Schema(description = "电话") + private String telephone; + + @Schema(description = "地址") + private String address; + + @Schema(description = "创建时间") + private LocalDateTime createTime; + +} diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/manager/AddressManager.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/manager/AddressManager.java new file mode 100644 index 0000000..da29427 --- /dev/null +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/manager/AddressManager.java @@ -0,0 +1,43 @@ +package net.lab1024.sa.admin.module.business.base.address.manager; + +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.admin.constant.AdminCacheConst; +import net.lab1024.sa.admin.module.business.base.address.domain.entity.AddressEntity; +import net.lab1024.sa.admin.module.business.base.address.dao.AddressDao; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +/** + * 收货地址 Manager + * + * @author hj + * @since 2024-12-26 15:35:23 + * copyright 友仓 + */ +@Service +@Slf4j +public class AddressManager extends ServiceImpl { + + @Resource + private AddressDao addressDao; + + /** + * 根据类目id 移除缓存 + */ + @CacheEvict(value = {AdminCacheConst.Base.ADDRESS_ENTITY}, allEntries = true) + public void removeCache() { + log.info("clear ADDRESS_ENTITY"); + } + + /** + * 查詢类目 + */ + @Cacheable(AdminCacheConst.Base.ADDRESS_ENTITY) + public AddressEntity queryAddress(Long addressId) { + return addressDao.selectById(addressId); + } +} diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/service/AddressQueryService.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/service/AddressQueryService.java new file mode 100644 index 0000000..a033300 --- /dev/null +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/service/AddressQueryService.java @@ -0,0 +1,130 @@ +package net.lab1024.sa.admin.module.business.base.address.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.collect.Maps; +import jakarta.annotation.Resource; +import net.lab1024.sa.admin.module.business.base.address.dao.AddressDao; +import net.lab1024.sa.admin.module.business.base.address.domain.entity.AddressEntity; +import net.lab1024.sa.admin.module.business.base.address.domain.form.AddressQueryForm; +import net.lab1024.sa.admin.module.business.base.address.domain.form.AddressSelect; +import net.lab1024.sa.admin.module.business.base.address.domain.vo.AddressExcelVO; +import net.lab1024.sa.admin.module.business.base.address.domain.vo.AddressVO; +import net.lab1024.sa.admin.module.business.base.address.manager.AddressManager; +import net.lab1024.sa.admin.module.business.base.item.domain.entity.ItemEntity; +import net.lab1024.sa.admin.module.business.base.item.domain.vo.ItemsExcelVO; +import net.lab1024.sa.base.common.domain.PageResult; +import net.lab1024.sa.base.common.util.SmartPageUtil; +import net.lab1024.sa.base.module.support.dict.constant.DictConst; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class AddressQueryService { + + @Resource + private AddressDao addressDao; + + @Resource + private AddressManager addressManager; + + /** + * 分页查询 + * + * @param queryForm 查询参数 + * @return PageResult + */ + public PageResult queryPage(AddressQueryForm queryForm) { + Page page = SmartPageUtil.convert2PageQuery(queryForm); + List list = addressDao.queryPage(page, queryForm); + return SmartPageUtil.convert2PageResult(page, list); + } + + /** + * 地址下拉查询 + * + * @param addressSelect 入参 + * @return List + */ + public List queryAddress(AddressSelect addressSelect) { + return addressDao.selectList(null); + } + + /** + * 根据地址id集合查询地址信息 + * + * @param addressIdList 地址id集合 + * @return Map + */ + public Map queryAddressList(List addressIdList) { + if (CollectionUtils.isEmpty(addressIdList)) { + return Collections.emptyMap(); + } + addressIdList = addressIdList.stream().distinct().collect(Collectors.toList()); + Map addressMap = Maps.newHashMap(); + for (Long addressId : addressIdList) { + AddressEntity address = addressManager.queryAddress(addressId); + if (address != null) { + addressMap.put(addressId, address); + } + } + return addressMap; + } + + /** + * 根据地址name集合查询地址信息 + * + * @param addressNameList 地址name集合 + * @return Map + */ + public Map queryAddressByNameList(List addressNameList) { + if (CollectionUtils.isEmpty(addressNameList)) { + return Collections.emptyMap(); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(AddressEntity::getName, addressNameList); + + List addressList = addressDao.selectList(queryWrapper); + if (CollectionUtils.isEmpty(addressList)) { + return Collections.emptyMap(); + } + return addressList.stream() + .collect(Collectors.toMap(AddressEntity::getName, address -> address, (existing, replacement) -> existing)); + } + + /** + * 根据地址名称查询地址信息 + * + * @param addressName 地址名称 + * @return AddressEntity + */ + public AddressEntity queryByAddressName(String addressName) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(AddressEntity::getName, addressName); + return addressDao.selectOne(queryWrapper); + } + + /** + * 地址导出 + * + * @return List + */ + public List getAddressExcelVOList() { + List addressList = addressDao.selectList(null); + return addressList.stream() + .map(address -> + AddressExcelVO.builder() + .name(address.getName()) + .person(address.getPerson()) + .telephone(address.getTelephone()) + .address(address.getAddress()) + .build() + ) + .collect(Collectors.toList()); + } +} diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/service/AddressService.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/service/AddressService.java new file mode 100644 index 0000000..b2578b2 --- /dev/null +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/service/AddressService.java @@ -0,0 +1,183 @@ +package net.lab1024.sa.admin.module.business.base.address.service; + +import java.io.IOException; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import cn.idev.excel.FastExcel; +import net.lab1024.sa.admin.module.business.base.address.dao.AddressDao; +import net.lab1024.sa.admin.module.business.base.address.domain.entity.AddressEntity; +import net.lab1024.sa.admin.module.business.base.address.domain.form.AddressAddForm; +import net.lab1024.sa.admin.module.business.base.address.domain.form.AddressImportForm; +import net.lab1024.sa.admin.module.business.base.address.domain.form.AddressUpdateForm; +import net.lab1024.sa.admin.module.business.base.address.manager.AddressManager; +import net.lab1024.sa.admin.module.business.base.item.domain.entity.ItemEntity; +import net.lab1024.sa.admin.module.business.base.item.domain.form.ItemsImportForm; +import net.lab1024.sa.admin.util.JoinerResult; +import net.lab1024.sa.admin.util.ResponseDTOUtils; +import net.lab1024.sa.base.common.exception.BusinessException; +import net.lab1024.sa.base.common.util.SmartBeanUtil; +import net.lab1024.sa.base.common.domain.ResponseDTO; +import net.lab1024.sa.base.common.util.SmartRequestUtil; +import net.lab1024.sa.base.module.support.dict.constant.DictConst; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +/** + * 收货地址 Service + * + * @author hj + * @since 2024-12-26 15:35:23 + * copyright 友仓 + */ + +@Service +public class AddressService { + + @Resource + private AddressDao addressDao; + + @Resource + private AddressManager addressManager; + + @Resource + private AddressQueryService addressQueryService; + + /** + * 添加 + * + * @param addForm 添加参数 + * @return ResponseDTO + */ + public ResponseDTO add(AddressAddForm addForm) { + AddressEntity addressEntity = SmartBeanUtil.copy(addForm, AddressEntity.class); + addressDao.insert(addressEntity); + + //更新缓存 + addressManager.removeCache(); + return ResponseDTO.ok(); + } + + /** + * 更新 + * + * @param updateForm 更新参数 + * @return ResponseDTO + */ + public ResponseDTO update(AddressUpdateForm updateForm) { + AddressEntity addressEntity = SmartBeanUtil.copy(updateForm, AddressEntity.class); + addressDao.updateById(addressEntity); + + //更新缓存 + addressManager.removeCache(); + return ResponseDTO.ok(); + } + + /** + * 批量删除 + * + * @param idList 集合 + * @return ResponseDTO + */ + public ResponseDTO batchDelete(List idList) { + if (CollectionUtils.isEmpty(idList)) { + return ResponseDTO.ok(); + } + + addressManager.removeBatchByIds(idList); + + //更新缓存 + addressManager.removeCache(); + return ResponseDTO.ok(); + } + + /** + * 单个删除 + * + * @param addressId id + * @return ResponseDTO + */ + public ResponseDTO delete(Long addressId) { + if (null == addressId) { + return ResponseDTO.ok(); + } + + addressDao.deleteById(addressId); + //更新缓存 + addressManager.removeCache(); + return ResponseDTO.ok(); + } + + /** + * 收货地址导入 + * + * @param file 上传文件 + * @return ResponseDTO + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO importAddress(MultipartFile file) { + List dataList; + try { + dataList = FastExcel.read(file.getInputStream()).head(AddressImportForm.class) + .sheet() + .doReadSync(); + } catch (IOException e) { + throw new BusinessException("数据格式存在问题,无法读取"); + } + if (CollectionUtils.isEmpty(dataList)) { + return ResponseDTO.userErrorParam("数据为空"); + } + + //获取所有去重后的收货单位 + List addressName = dataList.stream().map(AddressImportForm::getName).distinct().collect(Collectors.toList()); + + //查询数据库存在的物料 + Map exitAddressMap = addressQueryService.queryAddressByNameList(addressName); + + List insertToAddress = new ArrayList<>(); + List updateToAddress = new ArrayList<>(); + for (AddressImportForm addressImportForm : dataList) { + + + //物料 + AddressEntity address = exitAddressMap.get(addressImportForm.getName()); + + //物料为空则新增,否则更新 + if (address == null) { + insertToAddress.add(createAddress(addressImportForm.getName(), addressImportForm.getPerson(), addressImportForm.getTelephone(), addressImportForm.getAddress())); + } else { + updateToAddress.add(createAddress(addressImportForm.getName(), addressImportForm.getPerson(), addressImportForm.getTelephone(), addressImportForm.getAddress())); + } + } + + JoinerResult resultMsg = JoinerResult.createJoiner(); + return ResponseDTOUtils.buildResponseSussDTO(insertToAddress, updateToAddress, addressManager::saveBatch, addressManager::updateBatchById, resultMsg); + } + + /** + * 创建收货地址 + * + * @param name 收货单位 + * @param person 联系人 + * @param telephone 电话 + * @param address 地址 + * @return AddressEntity + */ + public AddressEntity createAddress(String name, String person, String telephone, String address) { + return AddressEntity.builder() + .name(name) + .person(person) + .telephone(telephone) + .address(address) + .createUserId(SmartRequestUtil.getRequestUser().getUserId()) + .createUserName(SmartRequestUtil.getRequestUser().getUserName()) + .build(); + } +} diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/sql/AddressMenu.sql b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/sql/AddressMenu.sql new file mode 100644 index 0000000..1e4e2b0 --- /dev/null +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/address/sql/AddressMenu.sql @@ -0,0 +1,22 @@ +# 默认是按前端工程文件的 /views/business 文件夹的路径作为前端组件路径,如果你没把生成的 .vue 前端代码放在 /views/business 下, +# 那就根据自己实际情况修改下面 SQL 的 path,component 字段值,避免执行 SQL 后菜单无法访问。 +# 如果你一切都是按照默认,那么下面的 SQL 基本不用改 + +INSERT INTO t_menu ( menu_name, menu_type, parent_id, path, component, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, create_user_id ) +VALUES ( '收货地址', 2, 0, '/address/list', '/business/address/address-list.vue', false, false, true, false, 1, 1 ); + +# 按菜单名称查询该菜单的 menu_id 作为按钮权限的 父菜单ID 与 功能点关联菜单ID +SET @parent_id = NULL; +SELECT t_menu.menu_id INTO @parent_id FROM t_menu WHERE t_menu.menu_name = '收货地址'; + +INSERT INTO t_menu ( menu_name, menu_type, parent_id, frame_flag, cache_flag, visible_flag, disabled_flag, api_perms, perms_type, context_menu_id, create_user_id ) +VALUES ( '查询', 3, @parent_id, false, false, true, false, 'address:query', 1, @parent_id, 1 ); + +INSERT INTO t_menu ( menu_name, menu_type, parent_id, frame_flag, cache_flag, visible_flag, disabled_flag, api_perms, perms_type, context_menu_id, create_user_id ) +VALUES ( '添加', 3, @parent_id, false, false, true, false, 'address:add', 1, @parent_id, 1 ); + +INSERT INTO t_menu ( menu_name, menu_type, parent_id, frame_flag, cache_flag, visible_flag, disabled_flag, api_perms, perms_type, context_menu_id, create_user_id ) +VALUES ( '更新', 3, @parent_id, false, false, true, false, 'address:update', 1, @parent_id, 1 ); + +INSERT INTO t_menu ( menu_name, menu_type, parent_id, frame_flag, cache_flag, visible_flag, disabled_flag, api_perms, perms_type, context_menu_id, create_user_id ) +VALUES ( '删除', 3, @parent_id, false, false, true, false, 'address:delete', 1, @parent_id, 1 ); diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/area/manager/AreaManager.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/area/manager/AreaManager.java index 047528b..22c9edb 100644 --- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/area/manager/AreaManager.java +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/area/manager/AreaManager.java @@ -7,8 +7,6 @@ import net.lab1024.sa.admin.module.business.base.area.domain.entity.AreaEntity; import net.lab1024.sa.admin.module.business.base.area.dao.AreaDao; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import net.lab1024.sa.admin.module.business.base.area.service.AreaQueryService; -import net.lab1024.sa.admin.module.business.category.domain.entity.CategoryEntity; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/location/service/LocationQueryService.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/location/service/LocationQueryService.java index 9037055..2701756 100644 --- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/location/service/LocationQueryService.java +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/base/location/service/LocationQueryService.java @@ -214,7 +214,7 @@ public class LocationQueryService { public List getLocationsExcelVOList() { List locationsList = locationDao.selectList(null); //库区 - List areaIds = locationsList.stream().map(LocationEntity::getAreaId).distinct().collect(Collectors.toList()); + List areaIds = locationsList.stream().map(LocationEntity::getAreaId).distinct().collect(Collectors.toList()); Map areaMap = areaQueryService.queryAreaList(areaIds); return locationsList.stream() .map(location -> diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/resources/mapper/business/base/address/AddressMapper.xml b/smart-admin-api-java17-springboot3/sa-admin/src/main/resources/mapper/business/base/address/AddressMapper.xml new file mode 100644 index 0000000..d3a94b8 --- /dev/null +++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/resources/mapper/business/base/address/AddressMapper.xml @@ -0,0 +1,33 @@ + + + + + + + t_address.address_id, + t_address.name, + t_address.person, + t_address.telephone, + t_address.address, + t_address.create_time, + t_address.create_user_id, + t_address.create_user_name, + t_address.update_time + + + + + + +