diff --git a/admin/src/main/java/com/linln/admin/orders/repository/PetRepository.java b/admin/src/main/java/com/linln/admin/orders/repository/PetRepository.java index fc0144d..852de7f 100644 --- a/admin/src/main/java/com/linln/admin/orders/repository/PetRepository.java +++ b/admin/src/main/java/com/linln/admin/orders/repository/PetRepository.java @@ -13,4 +13,5 @@ public interface PetRepository extends BaseRepository { List findAllByUid(long uid); + Pet findFirstById(Long id); } \ No newline at end of file diff --git a/admin/src/main/java/com/linln/admin/orders/service/impl/OrderMainServiceImpl.java b/admin/src/main/java/com/linln/admin/orders/service/impl/OrderMainServiceImpl.java index d41d3c7..01c3793 100644 --- a/admin/src/main/java/com/linln/admin/orders/service/impl/OrderMainServiceImpl.java +++ b/admin/src/main/java/com/linln/admin/orders/service/impl/OrderMainServiceImpl.java @@ -13,6 +13,7 @@ import com.linln.admin.users.service.UsersAmountRecordsService; import com.linln.admin.users.service.UsersService; import com.linln.common.data.PageSort; import com.linln.common.enums.StatusEnum; +import com.linln.component.thymeleaf.utility.DictUtil; import org.apache.shiro.config.Ini; import org.springframework.data.domain.Example; import org.springframework.data.domain.Page; @@ -136,6 +137,9 @@ public class OrderMainServiceImpl implements OrderMainService { orderMain.setCoupons(coupons); } } + Pet pet = petRepository.findFirstById(orderSub.getPetId()); + String petInfo = "宠物名称:" + pet.getNickName() + "
品种:" + InitLoadDataService.PET_BASE_INFO_MAP.get(pet.getPetId()).getAssortment() + "
体重:" + (InitLoadDataService.PET_BASE_INFO_MAP.get(pet.getPetId()).getPetType() == 1 ? DictUtil.petCatWeight(Byte.valueOf(pet.getWeight().toString())) : DictUtil.petDogWeight(Byte.valueOf(pet.getWeight().toString()))) + "
服务项目:" + orderSub.getGoods(); + orderSub.setPetInfo(petInfo); String str = ""; if (orderSubs.size() > 1) { str = "

"; diff --git a/admin/src/main/java/com/linln/admin/users/controller/ConfigsController.java b/admin/src/main/java/com/linln/admin/users/controller/ConfigsController.java new file mode 100644 index 0000000..d6d7bbf --- /dev/null +++ b/admin/src/main/java/com/linln/admin/users/controller/ConfigsController.java @@ -0,0 +1,119 @@ +package com.linln.admin.users.controller; + +import com.linln.admin.users.domain.Configs; +import com.linln.admin.users.service.ConfigsService; +import com.linln.admin.users.validator.ConfigsValid; +import com.linln.common.enums.StatusEnum; +import com.linln.common.utils.EntityBeanUtil; +import com.linln.common.utils.ResultVoUtil; +import com.linln.common.utils.StatusUtil; +import com.linln.common.vo.ResultVo; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.data.domain.Example; +import org.springframework.data.domain.ExampleMatcher; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import javax.annotation.Resource; + +/** + * @author gion + * @date 2024/12/17 + */ +@Controller +@RequestMapping("/users/configs") +public class ConfigsController { + + @Resource + private ConfigsService configsService; + + /** + * 列表页面 + */ + @GetMapping("/index") + @RequiresPermissions("users:configs:index") + public String index(Model model, Configs configs) { + + // 创建匹配器,进行动态查询匹配 + ExampleMatcher matcher = ExampleMatcher.matching(); + + // 获取数据列表 + Example example = Example.of(configs, matcher); + Page list = configsService.getPageList(example); + + // 封装数据 + model.addAttribute("list", list.getContent()); + model.addAttribute("page", list); + return "/users/configs/index"; + } + + /** + * 跳转到添加页面 + */ + @GetMapping("/add") + @RequiresPermissions("users:configs:add") + public String toAdd() { + return "/users/configs/add"; + } + + /** + * 跳转到编辑页面 + */ + @GetMapping("/edit/{id}") + @RequiresPermissions("users:configs:edit") + public String toEdit(@PathVariable("id") Configs configs, Model model) { + model.addAttribute("configs", configs); + return "/users/configs/add"; + } + + /** + * 保存添加/修改的数据 + * @param valid 验证对象 + */ + @PostMapping("/save") + @RequiresPermissions({"users:configs:add", "users:configs:edit"}) + @ResponseBody + public ResultVo save(@Validated ConfigsValid valid, Configs configs) { + // 复制保留无需修改的数据 + if (configs.getId() != null) { + Configs beConfigs = configsService.getById(configs.getId()); + EntityBeanUtil.copyProperties(beConfigs, configs); + } + + // 保存数据 + configsService.save(configs); + return ResultVoUtil.SAVE_SUCCESS; + } + + /** + * 跳转到详细页面 + */ + @GetMapping("/detail/{id}") + @RequiresPermissions("users:configs:detail") + public String toDetail(@PathVariable("id") Configs configs, Model model) { + model.addAttribute("configs",configs); + return "/users/configs/detail"; + } + + /** + * 设置一条或者多条数据的状态 + */ + @RequestMapping("/status/{param}") + @RequiresPermissions("users:configs:status") + @ResponseBody + public ResultVo status( + @PathVariable("param") String param, + @RequestParam(value = "ids", required = false) List ids) { + // 更新状态 + StatusEnum statusEnum = StatusUtil.getStatusEnum(param); + if (configsService.updateStatus(statusEnum, ids)) { + return ResultVoUtil.success(statusEnum.getMessage() + "成功"); + } else { + return ResultVoUtil.error(statusEnum.getMessage() + "失败,请重新操作"); + } + } +} \ No newline at end of file diff --git a/admin/src/main/java/com/linln/admin/users/domain/Configs.java b/admin/src/main/java/com/linln/admin/users/domain/Configs.java new file mode 100644 index 0000000..f312dc8 --- /dev/null +++ b/admin/src/main/java/com/linln/admin/users/domain/Configs.java @@ -0,0 +1,70 @@ +package com.linln.admin.users.domain; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.linln.common.enums.StatusEnum; +import com.linln.common.utils.StatusUtil; +import com.linln.modules.system.domain.User; +import lombok.Data; +import org.hibernate.annotations.NotFound; +import org.hibernate.annotations.NotFoundAction; +import org.hibernate.annotations.Where; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.io.Serializable; +import java.util.Date; +import javax.persistence.Entity; +import javax.persistence.EntityListeners; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +/** + * @author gion + * @date 2024/12/17 + */ +@Data +@Entity +@Table(name="system_configs") +@EntityListeners(AuditingEntityListener.class) +@Where(clause = StatusUtil.NOT_DELETE) +public class Configs implements Serializable { + // 主键ID + @Id + @GeneratedValue(strategy=GenerationType.IDENTITY) + private Long id; + private String name; + // 配置类型 + private String configType; + // 内容 + private String content; + // 排序 + private Integer sort; + // 内容类型 + private Integer contentType; + // 更新者 + @LastModifiedBy + @ManyToOne(fetch=FetchType.LAZY) + @NotFound(action=NotFoundAction.IGNORE) + @JoinColumn(name="update_by") + @JsonIgnore + private User updateBy; + // 数据状态 + private Byte status = StatusEnum.OK.getCode(); + // 跳转类型 + private Integer jumpType; + // 跳转URL + private String jumpUrl; + // 创建时间 + @CreatedDate + private Date createDate; + // 更新时间 + @LastModifiedDate + private Date updateDate; +} \ No newline at end of file diff --git a/admin/src/main/java/com/linln/admin/users/repository/ConfigsRepository.java b/admin/src/main/java/com/linln/admin/users/repository/ConfigsRepository.java new file mode 100644 index 0000000..eb46c5b --- /dev/null +++ b/admin/src/main/java/com/linln/admin/users/repository/ConfigsRepository.java @@ -0,0 +1,11 @@ +package com.linln.admin.users.repository; + +import com.linln.admin.users.domain.Configs; +import com.linln.modules.system.repository.BaseRepository; + +/** + * @author gion + * @date 2024/12/17 + */ +public interface ConfigsRepository extends BaseRepository { +} \ No newline at end of file diff --git a/admin/src/main/java/com/linln/admin/users/service/ConfigsService.java b/admin/src/main/java/com/linln/admin/users/service/ConfigsService.java new file mode 100644 index 0000000..ed360f3 --- /dev/null +++ b/admin/src/main/java/com/linln/admin/users/service/ConfigsService.java @@ -0,0 +1,41 @@ +package com.linln.admin.users.service; + +import com.linln.admin.users.domain.Configs; +import com.linln.common.enums.StatusEnum; +import org.springframework.data.domain.Example; +import org.springframework.data.domain.Page; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @author gion + * @date 2024/12/17 + */ +public interface ConfigsService { + + /** + * 获取分页列表数据 + * @param example 查询实例 + * @return 返回分页数据 + */ + Page getPageList(Example example); + + /** + * 根据ID查询数据 + * @param id 主键ID + */ + Configs getById(Long id); + + /** + * 保存数据 + * @param configs 实体对象 + */ + Configs save(Configs configs); + + /** + * 状态(启用,冻结,删除)/批量状态处理 + */ + @Transactional(rollbackFor = Exception.class) + Boolean updateStatus(StatusEnum statusEnum, List idList); +} \ No newline at end of file diff --git a/admin/src/main/java/com/linln/admin/users/service/impl/ConfigsServiceImpl.java b/admin/src/main/java/com/linln/admin/users/service/impl/ConfigsServiceImpl.java new file mode 100644 index 0000000..80271da --- /dev/null +++ b/admin/src/main/java/com/linln/admin/users/service/impl/ConfigsServiceImpl.java @@ -0,0 +1,65 @@ +package com.linln.admin.users.service.impl; + +import com.linln.admin.users.domain.Configs; +import com.linln.admin.users.repository.ConfigsRepository; +import com.linln.admin.users.service.ConfigsService; +import com.linln.common.data.PageSort; +import com.linln.common.enums.StatusEnum; +import org.springframework.data.domain.Example; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import javax.annotation.Resource; + +/** + * @author gion + * @date 2024/12/17 + */ +@Service +public class ConfigsServiceImpl implements ConfigsService { + + @Resource + private ConfigsRepository configsRepository; + + /** + * 根据ID查询数据 + * @param id 主键ID + */ + @Override + public Configs getById(Long id) { + return configsRepository.findById(id).orElse(null); + } + + /** + * 获取分页列表数据 + * @param example 查询实例 + * @return 返回分页数据 + */ + @Override + public Page getPageList(Example example) { + // 创建分页对象 + PageRequest page = PageSort.pageRequest(); + return configsRepository.findAll(example, page); + } + + /** + * 保存数据 + * @param configs 实体对象 + */ + @Override + public Configs save(Configs configs) { + return configsRepository.save(configs); + } + + /** + * 状态(启用,冻结,删除)/批量状态处理 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateStatus(StatusEnum statusEnum, List idList) { + return configsRepository.updateStatus(statusEnum.getCode(), idList) > 0; + } +} \ No newline at end of file diff --git a/admin/src/main/java/com/linln/admin/users/validator/ConfigsValid.java b/admin/src/main/java/com/linln/admin/users/validator/ConfigsValid.java new file mode 100644 index 0000000..e784ab6 --- /dev/null +++ b/admin/src/main/java/com/linln/admin/users/validator/ConfigsValid.java @@ -0,0 +1,18 @@ +package com.linln.admin.users.validator; + +import lombok.Data; + +import java.io.Serializable; +import javax.validation.constraints.NotEmpty; + +/** + * @author gion + * @date 2024/12/17 + */ +@Data +public class ConfigsValid implements Serializable { + @NotEmpty(message = "配置名称不能为空") + private String name; + @NotEmpty(message = "配置类型不能为空") + private String configType; +} \ No newline at end of file diff --git a/admin/src/main/resources/templates/users/configs/add.html b/admin/src/main/resources/templates/users/configs/add.html new file mode 100644 index 0000000..2af9238 --- /dev/null +++ b/admin/src/main/resources/templates/users/configs/add.html @@ -0,0 +1,59 @@ + + + + + +
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ + +
+
+
+ + + \ No newline at end of file diff --git a/admin/src/main/resources/templates/users/configs/detail.html b/admin/src/main/resources/templates/users/configs/detail.html new file mode 100644 index 0000000..9698470 --- /dev/null +++ b/admin/src/main/resources/templates/users/configs/detail.html @@ -0,0 +1,49 @@ + + + + + +
+
基本信息
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
主键ID配置名称
配置类型内容
排序内容类型
跳转类型跳转URL
创建时间更新时间
+
+ + + \ No newline at end of file diff --git a/admin/src/main/resources/templates/users/configs/index.html b/admin/src/main/resources/templates/users/configs/index.html new file mode 100644 index 0000000..c296726 --- /dev/null +++ b/admin/src/main/resources/templates/users/configs/index.html @@ -0,0 +1,91 @@ + + + + + +
+
+ systemConfig管理 + +
+
+
+ +
+ +
+ +
+
启用
+
冻结
+
删除
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 主键ID配置名称配置类型内容排序内容类型跳转类型跳转URL操作
主键ID配置名称配置类型内容排序内容类型跳转类型跳转URL + 编辑 + 详细 + 删除 +
+
+
+
+
+ + + \ No newline at end of file