From 4e63bbd12bc0f3b76ca85d3beb68519bed0b14e5 Mon Sep 17 00:00:00 2001 From: hjc <459774188@qq.com> Date: Wed, 11 Dec 2019 22:22:35 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=91=E7=9B=AE=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BssClassItemController.java | 128 ++++++++++++++++++ .../{ => api}/BssApiBizController.java | 2 +- .../business/validator/BssClassItemValid.java | 20 +++ .../controller/api/ApiLoginController.java} | 4 +- admin/src/main/resources/application.yml | 2 + .../templates/business/classItem/add.html | 35 +++++ .../templates/business/classItem/detail.html | 39 ++++++ .../templates/business/classItem/index.html | 84 ++++++++++++ .../common/enums/AccountStandardEnum.java | 34 +++++ .../cwhelp/common/filter/ApiLoginFilter.java | 53 ++++++++ .../actionLog/action/UserAction.java | 13 ++ .../modules/business/domain/BssClassItem.java | 54 ++++++++ .../repository/BssClassItemRepository.java | 11 ++ .../business/service/BssClassItemService.java | 41 ++++++ .../service/impl/BssClassItemServiceImpl.java | 66 +++++++++ sdoc/cwhelp.sql | 24 ++++ 16 files changed, 607 insertions(+), 3 deletions(-) create mode 100644 admin/src/main/java/com/cwhelp/admin/business/controller/BssClassItemController.java rename admin/src/main/java/com/cwhelp/admin/business/controller/{ => api}/BssApiBizController.java (98%) create mode 100644 admin/src/main/java/com/cwhelp/admin/business/validator/BssClassItemValid.java rename admin/src/main/java/com/cwhelp/admin/{business/controller/BssApiLoginController.java => system/controller/api/ApiLoginController.java} (97%) create mode 100644 admin/src/main/resources/templates/business/classItem/add.html create mode 100644 admin/src/main/resources/templates/business/classItem/detail.html create mode 100644 admin/src/main/resources/templates/business/classItem/index.html create mode 100644 common/src/main/java/com/cwhelp/common/enums/AccountStandardEnum.java create mode 100644 common/src/main/java/com/cwhelp/common/filter/ApiLoginFilter.java create mode 100644 modules/system/src/main/java/com/cwhelp/modules/business/domain/BssClassItem.java create mode 100644 modules/system/src/main/java/com/cwhelp/modules/business/repository/BssClassItemRepository.java create mode 100644 modules/system/src/main/java/com/cwhelp/modules/business/service/BssClassItemService.java create mode 100644 modules/system/src/main/java/com/cwhelp/modules/business/service/impl/BssClassItemServiceImpl.java diff --git a/admin/src/main/java/com/cwhelp/admin/business/controller/BssClassItemController.java b/admin/src/main/java/com/cwhelp/admin/business/controller/BssClassItemController.java new file mode 100644 index 0000000..9808e23 --- /dev/null +++ b/admin/src/main/java/com/cwhelp/admin/business/controller/BssClassItemController.java @@ -0,0 +1,128 @@ +package com.cwhelp.admin.business.controller; + +import com.cwhelp.admin.business.validator.BssClassItemValid; +import com.cwhelp.common.enums.AccountStandardEnum; +import com.cwhelp.common.enums.StatusEnum; +import com.cwhelp.common.utils.EntityBeanUtil; +import com.cwhelp.common.utils.ResultVoUtil; +import com.cwhelp.common.utils.StatusUtil; +import com.cwhelp.common.vo.ResultVo; +import com.cwhelp.modules.business.domain.BssClassItem; +import com.cwhelp.modules.business.service.BssClassItemService; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +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; + +/** + * @author huang.jc + * @date 2019/12/11 + */ +@Controller +@RequestMapping("/bss/classItem") +public class BssClassItemController { + + @Autowired + private BssClassItemService bssClassItemService; + + /** + * 列表页面 + */ + @GetMapping("/index") + @RequiresPermissions("bss:classItem:index") + public String index(Model model, BssClassItem classItem) { + + // 创建匹配器,进行动态查询匹配 + ExampleMatcher matcher = ExampleMatcher.matching() + .withMatcher("itemName", match -> match.contains()); + + // 获取数据列表 + Example example = Example.of(classItem, matcher); + Page list = bssClassItemService.getPageList(example); + List items = list.getContent(); + items.stream().forEach(bssClassItem -> { + bssClassItem.setItemTypeName(AccountStandardEnum.getNameById(bssClassItem.getItemType())); + }); + + // 封装数据 + model.addAttribute("list", items); + model.addAttribute("page", list); + return "/business/classItem/index"; + } + + /** + * 跳转到添加页面 + */ + @GetMapping("/add") + @RequiresPermissions("bss:classItem:add") + public String toAdd() { + return "/business/classItem/add"; + } + + /** + * 跳转到编辑页面 + */ + @GetMapping("/edit/{id}") + @RequiresPermissions("bss:classItem:edit") + public String toEdit(@PathVariable("id") BssClassItem classItem, Model model) { + model.addAttribute("classItem", classItem); + return "/business/classItem/add"; + } + + /** + * 保存添加/修改的数据 + * @param valid 验证对象 + */ + @PostMapping({"/add","/edit"}) + @RequiresPermissions({"bss:classItem:add","bss:classItem:edit"}) + @ResponseBody + public ResultVo save(@Validated BssClassItemValid valid, BssClassItem classItem) { + + + + // 复制保留无需修改的数据 + if (classItem.getId() != null) { + BssClassItem beClassItem = bssClassItemService.getById(classItem.getId()); + EntityBeanUtil.copyProperties(beClassItem, classItem); + } + + // 保存数据 + bssClassItemService.save(classItem); + return ResultVoUtil.SAVE_SUCCESS; + } + + /** + * 跳转到详细页面 + */ + @GetMapping("/detail/{id}") + @RequiresPermissions("bss:classItem:detail") + public String toDetail(@PathVariable("id") BssClassItem classItem, Model model) { + model.addAttribute("classItem",classItem); + return "/business/classItem/detail"; + } + + /** + * 设置一条或者多条数据的状态 + */ + @RequestMapping("/status/{param}") + @RequiresPermissions("bss:classItem:status") + @ResponseBody + public ResultVo status( + @PathVariable("param") String param, + @RequestParam(value = "ids", required = false) List ids) { + // 更新状态 + StatusEnum statusEnum = StatusUtil.getStatusEnum(param); + if (bssClassItemService.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/cwhelp/admin/business/controller/BssApiBizController.java b/admin/src/main/java/com/cwhelp/admin/business/controller/api/BssApiBizController.java similarity index 98% rename from admin/src/main/java/com/cwhelp/admin/business/controller/BssApiBizController.java rename to admin/src/main/java/com/cwhelp/admin/business/controller/api/BssApiBizController.java index 980ad79..4fad657 100644 --- a/admin/src/main/java/com/cwhelp/admin/business/controller/BssApiBizController.java +++ b/admin/src/main/java/com/cwhelp/admin/business/controller/api/BssApiBizController.java @@ -1,4 +1,4 @@ -package com.cwhelp.admin.business.controller; +package com.cwhelp.admin.business.controller.api; import com.cwhelp.common.api.baidu.BaiduAipOCR; import com.cwhelp.common.api.baidu.entity.vatinvoice.*; diff --git a/admin/src/main/java/com/cwhelp/admin/business/validator/BssClassItemValid.java b/admin/src/main/java/com/cwhelp/admin/business/validator/BssClassItemValid.java new file mode 100644 index 0000000..27107b4 --- /dev/null +++ b/admin/src/main/java/com/cwhelp/admin/business/validator/BssClassItemValid.java @@ -0,0 +1,20 @@ +package com.cwhelp.admin.business.validator; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * @author huang.jc + * @date 2019/12/11 + */ +@Data +public class BssClassItemValid implements Serializable { + @NotEmpty(message = "科目名称不能为空") + private String itemName; + + @NotNull(message = "科目类型不能为空") + private Short itemType; +} \ No newline at end of file diff --git a/admin/src/main/java/com/cwhelp/admin/business/controller/BssApiLoginController.java b/admin/src/main/java/com/cwhelp/admin/system/controller/api/ApiLoginController.java similarity index 97% rename from admin/src/main/java/com/cwhelp/admin/business/controller/BssApiLoginController.java rename to admin/src/main/java/com/cwhelp/admin/system/controller/api/ApiLoginController.java index 72ccd91..ed49c85 100644 --- a/admin/src/main/java/com/cwhelp/admin/business/controller/BssApiLoginController.java +++ b/admin/src/main/java/com/cwhelp/admin/system/controller/api/ApiLoginController.java @@ -1,4 +1,4 @@ -package com.cwhelp.admin.business.controller; +package com.cwhelp.admin.system.controller.api; import com.cwhelp.common.constant.ApiConst; import com.cwhelp.common.utils.ResultVoUtil; @@ -22,7 +22,7 @@ import java.util.UUID; */ @RestController @RequestMapping("/api") -public class BssApiLoginController { +public class ApiLoginController { @Autowired private ApiUserService apiUserService; diff --git a/admin/src/main/resources/application.yml b/admin/src/main/resources/application.yml index 4505587..fa43a99 100644 --- a/admin/src/main/resources/application.yml +++ b/admin/src/main/resources/application.yml @@ -13,6 +13,8 @@ project: ### spring配置 spring: + main: + allow-bean-definition-overriding: true ## 数据库配置 datasource: driver-class-name: com.mysql.jdbc.Driver diff --git a/admin/src/main/resources/templates/business/classItem/add.html b/admin/src/main/resources/templates/business/classItem/add.html new file mode 100644 index 0000000..01b9d9e --- /dev/null +++ b/admin/src/main/resources/templates/business/classItem/add.html @@ -0,0 +1,35 @@ + + + + + +
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ + +
+
+
+ + + \ No newline at end of file diff --git a/admin/src/main/resources/templates/business/classItem/detail.html b/admin/src/main/resources/templates/business/classItem/detail.html new file mode 100644 index 0000000..74ce7b4 --- /dev/null +++ b/admin/src/main/resources/templates/business/classItem/detail.html @@ -0,0 +1,39 @@ + + + + + +
+
基本信息
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
主键ID科目名称
科目类型创建者
创建时间
备注
+
+ + + \ No newline at end of file diff --git a/admin/src/main/resources/templates/business/classItem/index.html b/admin/src/main/resources/templates/business/classItem/index.html new file mode 100644 index 0000000..6d79320 --- /dev/null +++ b/admin/src/main/resources/templates/business/classItem/index.html @@ -0,0 +1,84 @@ + + + + + +
+
+ 科目信息管理 + +
+
+
+ +
+ +
+ +
+
启用
+
冻结
+
删除
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + 主键ID科目名称科目类型数据状态创建时间操作
主键ID科目名称科目类型数据状态创建时间 + 编辑 + 详细 + 删除 +
+
+
+
+
+ + + \ No newline at end of file diff --git a/common/src/main/java/com/cwhelp/common/enums/AccountStandardEnum.java b/common/src/main/java/com/cwhelp/common/enums/AccountStandardEnum.java new file mode 100644 index 0000000..12534f9 --- /dev/null +++ b/common/src/main/java/com/cwhelp/common/enums/AccountStandardEnum.java @@ -0,0 +1,34 @@ +package com.cwhelp.common.enums; + +import lombok.Getter; + +/** + * Created by huangjc on 2019/12/11 0011. + * 会计准则 + */ +@Getter +public enum AccountStandardEnum { + + SMALL_ENTERPRISES(1, "小企业会计准则"), + ENTERPRISES(2, "小企业会计准则"), + NON_PROFIT_ORGANIZATIONS(3, "民间非营利组织会计制度"); + + AccountStandardEnum(int id, String name){ + this.id = id; + this.name = name; + } + + private int id; + + private String name; + + public static String getNameById(int id){ + for (AccountStandardEnum accountStandardEnum : AccountStandardEnum.values()) { + if(accountStandardEnum.getId() == id){ + return accountStandardEnum.getName(); + } + } + return ""; + } + +} diff --git a/common/src/main/java/com/cwhelp/common/filter/ApiLoginFilter.java b/common/src/main/java/com/cwhelp/common/filter/ApiLoginFilter.java new file mode 100644 index 0000000..b2501d8 --- /dev/null +++ b/common/src/main/java/com/cwhelp/common/filter/ApiLoginFilter.java @@ -0,0 +1,53 @@ +package com.cwhelp.common.filter; + +import com.alibaba.fastjson.JSONObject; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.stereotype.Component; + +import javax.servlet.*; +import javax.servlet.annotation.WebFilter; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.io.PrintWriter; + +/** + * Created by huangjc on 2019/12/10 0010. + */ +@Component +@ServletComponentScan +@WebFilter(filterName = "apiLoginFilter", urlPatterns = {"/api_biz/*"}) +public class ApiLoginFilter implements Filter { + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + HttpServletRequest request = (HttpServletRequest)servletRequest; + HttpServletResponse response = (HttpServletResponse)servletResponse; + String token = request.getHeader("token"); + HttpSession session = request.getSession(); + if(session.getAttribute(token) == null){ + response.setStatus(401); + response.setContentType("text/html;charset=utf-8"); + PrintWriter writer = response.getWriter(); + JSONObject json = new JSONObject(); + json.put("code","401"); + json.put("msg","请先登录!"); + writer.print(json); + return; + }else{ + filterChain.doFilter(request, response); + } + + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + System.out.println("ApiLoginFilter initing..." + filterConfig.getFilterName()); + } + + @Override + public void destroy() { + + } +} diff --git a/component/actionLog/src/main/java/com/cwhelp/component/actionLog/action/UserAction.java b/component/actionLog/src/main/java/com/cwhelp/component/actionLog/action/UserAction.java index 5300cbf..18d3935 100644 --- a/component/actionLog/src/main/java/com/cwhelp/component/actionLog/action/UserAction.java +++ b/component/actionLog/src/main/java/com/cwhelp/component/actionLog/action/UserAction.java @@ -55,6 +55,19 @@ public class UserAction extends ActionMap { } } + // api用户登录行为方法 + public void apiUserLogin(ResetLog resetLog){ + ActionLog actionLog = resetLog.getActionLog(); + if (resetLog.isSuccess()){ + actionLog.setMessage("api后台登录成功"); + }else { + String username = (String) resetLog.getParam("username"); + ResultVo resultVo = (ResultVo) resetLog.getRetValue(); + actionLog.setOperName(username); + actionLog.setMessage(String.format("api后台登录失败:[%s]%s", username, resultVo.getMsg())); + } + } + // 保存用户行为方法 public void userSave(ResetLog resetLog){ resetLog.getActionLog().setMessage("用户成功:${username}"); diff --git a/modules/system/src/main/java/com/cwhelp/modules/business/domain/BssClassItem.java b/modules/system/src/main/java/com/cwhelp/modules/business/domain/BssClassItem.java new file mode 100644 index 0000000..4010c2d --- /dev/null +++ b/modules/system/src/main/java/com/cwhelp/modules/business/domain/BssClassItem.java @@ -0,0 +1,54 @@ +package com.cwhelp.modules.business.domain; + +import com.cwhelp.common.enums.StatusEnum; +import com.cwhelp.common.utils.StatusUtil; +import com.cwhelp.modules.system.domain.User; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; +import org.hibernate.annotations.NotFound; +import org.hibernate.annotations.NotFoundAction; +import org.hibernate.annotations.Where; +import org.springframework.data.annotation.CreatedBy; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * @author huang.jc + * @date 2019/12/11 + */ +@Data +@Entity +@Table(name="sys_class_item") +@EntityListeners(AuditingEntityListener.class) +@Where(clause = StatusUtil.notDelete) +public class BssClassItem implements Serializable { + // 主键ID + @Id + @GeneratedValue(strategy=GenerationType.IDENTITY) + private Long id; + // 科目名称 + private String itemName; + // 科目类型 + private Short itemType; + // 数据状态 + private Byte status = StatusEnum.OK.getCode(); + // 备注 + private String remark; + // 创建者 + @CreatedBy + @ManyToOne(fetch=FetchType.LAZY) + @NotFound(action=NotFoundAction.IGNORE) + @JoinColumn(name="create_by") + @JsonIgnore + private User createBy; + // 创建时间 + @CreatedDate + private Date createDate; + + @Transient + private String itemTypeName; +} \ No newline at end of file diff --git a/modules/system/src/main/java/com/cwhelp/modules/business/repository/BssClassItemRepository.java b/modules/system/src/main/java/com/cwhelp/modules/business/repository/BssClassItemRepository.java new file mode 100644 index 0000000..04fb882 --- /dev/null +++ b/modules/system/src/main/java/com/cwhelp/modules/business/repository/BssClassItemRepository.java @@ -0,0 +1,11 @@ +package com.cwhelp.modules.business.repository; + +import com.cwhelp.modules.business.domain.BssClassItem; +import com.cwhelp.modules.system.repository.BaseRepository; + +/** + * @author huang.jc + * @date 2019/12/11 + */ +public interface BssClassItemRepository extends BaseRepository { +} \ No newline at end of file diff --git a/modules/system/src/main/java/com/cwhelp/modules/business/service/BssClassItemService.java b/modules/system/src/main/java/com/cwhelp/modules/business/service/BssClassItemService.java new file mode 100644 index 0000000..c7f7466 --- /dev/null +++ b/modules/system/src/main/java/com/cwhelp/modules/business/service/BssClassItemService.java @@ -0,0 +1,41 @@ +package com.cwhelp.modules.business.service; + +import com.cwhelp.common.enums.StatusEnum; +import com.cwhelp.modules.business.domain.BssClassItem; +import org.springframework.data.domain.Example; +import org.springframework.data.domain.Page; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @author huang.jc + * @date 2019/12/11 + */ +public interface BssClassItemService { + + /** + * 获取分页列表数据 + * @param example 查询实例 + * @return 返回分页数据 + */ + Page getPageList(Example example); + + /** + * 根据ID查询数据 + * @param id 主键ID + */ + BssClassItem getById(Long id); + + /** + * 保存数据 + * @param classItem 实体对象 + */ + BssClassItem save(BssClassItem classItem); + + /** + * 状态(启用,冻结,删除)/批量状态处理 + */ + @Transactional + Boolean updateStatus(StatusEnum statusEnum, List idList); +} \ No newline at end of file diff --git a/modules/system/src/main/java/com/cwhelp/modules/business/service/impl/BssClassItemServiceImpl.java b/modules/system/src/main/java/com/cwhelp/modules/business/service/impl/BssClassItemServiceImpl.java new file mode 100644 index 0000000..ee70487 --- /dev/null +++ b/modules/system/src/main/java/com/cwhelp/modules/business/service/impl/BssClassItemServiceImpl.java @@ -0,0 +1,66 @@ +package com.cwhelp.modules.business.service.impl; + +import com.cwhelp.common.data.PageSort; +import com.cwhelp.common.enums.StatusEnum; +import com.cwhelp.modules.business.domain.BssClassItem; +import com.cwhelp.modules.business.repository.BssClassItemRepository; +import com.cwhelp.modules.business.service.BssClassItemService; +import org.springframework.beans.factory.annotation.Autowired; +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; + +/** + * @author huang.jc + * @date 2019/12/11 + */ +@Service +public class BssClassItemServiceImpl implements BssClassItemService { + + @Autowired + private BssClassItemRepository bssClassItemRepository; + + /** + * 根据ID查询数据 + * @param id 主键ID + */ + @Override + @Transactional + public BssClassItem getById(Long id) { + return bssClassItemRepository.findById(id).orElse(null); + } + + /** + * 获取分页列表数据 + * @param example 查询实例 + * @return 返回分页数据 + */ + @Override + public Page getPageList(Example example) { + // 创建分页对象 + PageRequest page = PageSort.pageRequest(); + return bssClassItemRepository.findAll(example, page); + } + + /** + * 保存数据 + * @param classItem 实体对象 + */ + @Override + public BssClassItem save(BssClassItem classItem) { + return bssClassItemRepository.save(classItem); + } + + /** + * 状态(启用,冻结,删除)/批量状态处理 + */ + @Override + @Transactional + public Boolean updateStatus(StatusEnum statusEnum, List idList) { + return bssClassItemRepository.updateStatus(statusEnum.getCode(), idList) > 0; + } +} \ No newline at end of file diff --git a/sdoc/cwhelp.sql b/sdoc/cwhelp.sql index 3a67ecd..c0fd74c 100644 --- a/sdoc/cwhelp.sql +++ b/sdoc/cwhelp.sql @@ -626,3 +626,27 @@ INSERT INTO `sys_user_role` VALUES ('12', '17'); INSERT INTO `sys_user_role` VALUES ('8', '18'); INSERT INTO `sys_user_role` VALUES ('10', '18'); INSERT INTO `sys_user_role` VALUES ('12', '18'); + + +-- ---------------------------- +-- Table structure for sys_class_item +-- ---------------------------- +CREATE TABLE `sys_class_item` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `create_date` datetime DEFAULT NULL, + `item_name` varchar(255) DEFAULT NULL, + `item_type` smallint(6) DEFAULT NULL, + `remark` varchar(255) DEFAULT NULL, + `status` tinyint(4) DEFAULT NULL, + `create_by` bigint(20) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `FKscjv9528cflikft0lwnwcujv0` (`create_by`), + CONSTRAINT `FKscjv9528cflikft0lwnwcujv0` FOREIGN KEY (`create_by`) REFERENCES `sys_user` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; + + +-- ---------------------------- +-- Records of sys_class_item +-- ---------------------------- +INSERT INTO `sys_user_role` VALUES (1, '2019-12-11 21:12:20','食品支出',1,'',1,1); +INSERT INTO `sys_user_role` VALUES (2, '2019-12-11 21:12:20','食品收入',1,'',1,1); \ No newline at end of file