ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -1,5 +1,6 @@ package com.ruoyi; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; @@ -9,7 +10,8 @@ * * @author ruoyi */ @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class },scanBasePackages = {"com.gkhy","com.ruoyi"}) @MapperScan("com.gkhy.sign.mapper") public class RuoYiApplication { public static void main(String[] args) ruoyi-admin/src/main/resources/application-dev.yml
@@ -24,9 +24,9 @@ druid: # 主库数据源 master: url: jdbc:mysql://localhost:3306/signature?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 url: jdbc:mysql://192.168.2.3:7006/signature?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: password password: 2farwL3yPXfbH2AP # 从库数据源 slave: # 从数据源开关/默认关闭 @@ -80,7 +80,7 @@ # redis 配置 redis: # 地址 host: 192.168.2.6 host: 192.168.2.3 # 端口,默认为6379 port: 6379 # 数据库索引 ruoyi-admin/src/main/resources/application-pro.yml
@@ -24,7 +24,7 @@ druid: # 主库数据源 master: url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 url: jdbc:mysql://localhost:3306/signature?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: password # 从库数据源 ruoyi-admin/src/main/resources/application.yml
@@ -109,7 +109,7 @@ # 是否开启swagger enabled: true # 请求前缀 pathMapping: /dev-api pathMapping: / # 防止XSS攻击 xss: ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java
@@ -4,6 +4,9 @@ import java.util.Date; import java.util.HashMap; import java.util.Map; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; @@ -19,6 +22,7 @@ /** 搜索值 */ @JsonIgnore @TableField(exist = false) private String searchValue; /** 创建者 */ @@ -36,10 +40,12 @@ private Date updateTime; /** 备注 */ @TableField(exist = false) private String remark; /** 请求参数 */ @JsonInclude(JsonInclude.Include.NON_EMPTY) @TableField(exist = false) private Map<String, Object> params; public String getSearchValue() ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -101,7 +101,7 @@ .csrf(csrf -> csrf.disable()) // 禁用HTTP响应标头 .headers((headersCustomizer) -> { headersCustomizer.cacheControl(cache -> cache.disable()).frameOptions(options -> options.sameOrigin()); headersCustomizer.cacheControl(cache -> cache.disable()).frameOptions(options -> options.disable()); }) // 认证失败处理类 .exceptionHandling(exception -> exception.authenticationEntryPoint(unauthorizedHandler)) @@ -111,7 +111,7 @@ .authorizeHttpRequests((requests) -> { permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll()); // 对于登录login 注册register 验证码captchaImage 允许匿名访问 requests.antMatchers("/login", "/register", "/captchaImage").permitAll() requests.antMatchers("/login", "/register", "/captchaImage","/app/login").permitAll() // 静态资源,可匿名访问 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll() ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -1,6 +1,10 @@ package com.ruoyi.framework.web.service; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.common.utils.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.BadCredentialsException; @@ -51,6 +55,9 @@ @Autowired private ISysConfigService configService; @Autowired private HttpServletRequest request; /** * 登录验证 @@ -157,12 +164,12 @@ throw new UserPasswordNotMatchException(); } // IP黑名单校验 String blackStr = configService.selectConfigByKey("sys.login.blackIPList"); if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) { AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("login.blocked"))); throw new BlackListException(); } // String blackStr = configService.selectConfigByKey("sys.login.blackIPList"); // if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) // { // AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("login.blocked"))); // throw new BlackListException(); // } } /** @@ -178,4 +185,48 @@ sysUser.setLoginDate(DateUtils.getNowDate()); userService.updateUserProfile(sysUser); } public String appLogin(String username, String password) { // 验证码校验 // validateCaptcha(username, code, uuid); // 登录前置校验 loginPreCheck(username, password); // 用户验证 Authentication authentication = null; try { UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); AuthenticationContextHolder.setContext(authenticationToken); // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername authentication = authenticationManager.authenticate(authenticationToken); } catch (Exception e) { if (e instanceof BadCredentialsException) { AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); throw new UserPasswordNotMatchException(); } else { AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); throw new ServiceException(e.getMessage()); } } finally { AuthenticationContextHolder.clearContext(); } AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); LoginUser loginUser = (LoginUser) authentication.getPrincipal(); recordLoginInfo(loginUser.getUserId()); // 生成token return tokenService.createToken(loginUser); } public void logout() { LoginUser loginUser = SecurityUtils.getLoginUser(); tokenService.delLoginUser(loginUser.getToken()); } } ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -66,6 +66,9 @@ <if test="userName != null and userName != ''"> AND u.user_name like concat('%', #{userName}, '%') </if> <if test="nickName != null and nickName != ''"> and u.nick_name like concat('%',#{nickName},'%') </if> <if test="status != null and status != ''"> AND u.status = #{status} </if> signature/src/main/java/com/gkhy/sign/controller/app/AppLoginController.java
对比新文件 @@ -0,0 +1,39 @@ package com.gkhy.sign.controller.app; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.framework.web.service.SysLoginService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @Api(tags = "APP用户登录前端控制器") @RestController @RequestMapping("/app") public class AppLoginController { @Autowired private SysLoginService sysLoginService; @ApiOperation(value = "用户登录") @PostMapping("/login") public AjaxResult login(@RequestBody LoginBody loginBody){ AjaxResult ajax = AjaxResult.success(); // 生成令牌 String token = sysLoginService.appLogin(loginBody.getUsername(), loginBody.getPassword()); ajax.put(Constants.TOKEN, token); return ajax; } @ApiOperation(value = "用户退出") @PostMapping("/logout") public AjaxResult logout(){ sysLoginService.logout(); return AjaxResult.success(); } } signature/src/main/java/com/gkhy/sign/controller/app/AppSignatureFlowController.java
对比新文件 @@ -0,0 +1,35 @@ package com.gkhy.sign.controller.app; import com.gkhy.sign.dto.req.SignatureFlowSignReq; import com.gkhy.sign.service.SignatureFlowService; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @Api(tags = "app端签名管理") @RestController @RequestMapping("/app/sign") public class AppSignatureFlowController extends BaseController { @Autowired private SignatureFlowService signatureFlowService; /** * 保存签名 */ @PostMapping("/save/sign") public AjaxResult save(@RequestBody SignatureFlowSignReq signatureFlowReq){ return toAjax(signatureFlowService.saveSignatureFlow(signatureFlowReq)); } } signature/src/main/java/com/gkhy/sign/controller/app/AppSignatureItemController.java
对比新文件 @@ -0,0 +1,32 @@ package com.gkhy.sign.controller.app; import com.gkhy.sign.dto.req.SignatureItemReq; import com.gkhy.sign.service.SignatureItemService; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.page.TableDataInfo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @Api(tags = "app端签署项目管理") @RestController @RequestMapping("/app/item") public class AppSignatureItemController extends BaseController { @Autowired private SignatureItemService signatureItemService; /** * 查询签署项目列表 */ @GetMapping("/list") @ApiOperation(value = "查询签署项目列表") public TableDataInfo list(SignatureItemReq signatureItem) { startPage(); return getDataTable(signatureItemService.selectItemList(signatureItem)); } } signature/src/main/java/com/gkhy/sign/controller/web/SignatureFlowController.java
文件名从 signature/src/main/java/com/gkhy/sign/controller/SignatureFlowController.java 修改 @@ -1,5 +1,7 @@ package com.gkhy.sign.controller; package com.gkhy.sign.controller.web; import com.gkhy.sign.dto.req.SignatureFlowAddReq; import com.gkhy.sign.dto.req.SignatureFlowSignReq; import com.gkhy.sign.dto.req.SignatureItemReq; import com.gkhy.sign.entity.SignatureFlow; import com.gkhy.sign.entity.SignatureItem; @@ -15,7 +17,7 @@ import org.springframework.web.bind.annotation.*; @RestController @Api(value = "签名流转管理") @Api(tags = "签名流转管理") @RequestMapping("/flow") public class SignatureFlowController extends BaseController { @@ -43,5 +45,22 @@ return toAjax(signatureFlowService.insertSignatureFlow(signatureFlow)); } // /** // * 保存签名 // */ // @PostMapping("/save/sign") // public AjaxResult save(@RequestBody SignatureFlowSignReq signatureFlowReq){ // return toAjax(signatureFlowService.saveSignatureFlow(signatureFlowReq)); // } /** * 归档 * @param signatureFlow * @return */ @PostMapping("/returnFile") public AjaxResult returnFile(@RequestBody SignatureFlow signatureFlow){ return toAjax(signatureFlowService.returnFile(signatureFlow)); } } signature/src/main/java/com/gkhy/sign/controller/web/SignatureItemController.java
文件名从 signature/src/main/java/com/gkhy/sign/controller/SignatureItemController.java 修改 @@ -1,4 +1,4 @@ package com.gkhy.sign.controller; package com.gkhy.sign.controller.web; import com.gkhy.sign.dto.req.SignatureItemReq; import com.gkhy.sign.entity.SignatureItem; @@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.*; @RestController @Api(value = "签署项目管理") @Api(tags = "签署项目管理") @RequestMapping("/item") public class SignatureItemController extends BaseController { @@ -53,10 +53,10 @@ /** * 删除签署项目 */ @PostMapping("/delete") @PostMapping("/delete/{id}") @ApiOperation(value = "删除签署项目") public AjaxResult remove(@RequestBody Long[] ids) { return toAjax(signatureItemService.deleteItem(ids)); public AjaxResult remove(@PathVariable("id") Integer id) { return toAjax(signatureItemService.deleteItem(id)); } signature/src/main/java/com/gkhy/sign/controller/web/SignatureTemplateController.java
文件名从 signature/src/main/java/com/gkhy/sign/controller/SignatureTemplateController.java 修改 @@ -1,4 +1,4 @@ package com.gkhy.sign.controller; package com.gkhy.sign.controller.web; import com.gkhy.sign.entity.SignatureTemplate; import com.gkhy.sign.entity.SignatureType; @@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.*; @RestController @Api(value = "签署模版管理") @Api(tags = "签署模版管理") @RequestMapping("/template") public class SignatureTemplateController extends BaseController { @@ -52,10 +52,10 @@ /** * 删除签署模版 */ @PostMapping("/delete") @PostMapping("/delete/{id}") @ApiOperation(value = "删除签署模版") public AjaxResult remove(@RequestBody Long[] ids) { return toAjax(signatureTemplateService.deleteTemplate(ids)); public AjaxResult remove(@PathVariable("id") Long id) { return toAjax(signatureTemplateService.deleteTemplate(id)); } signature/src/main/java/com/gkhy/sign/controller/web/SignatureTypeController.java
文件名从 signature/src/main/java/com/gkhy/sign/controller/SignatureTypeController.java 修改 @@ -1,7 +1,8 @@ package com.gkhy.sign.controller; package com.gkhy.sign.controller.web; import com.gkhy.sign.entity.SignatureType; import com.gkhy.sign.service.SignatureTypeService; import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; @@ -13,7 +14,7 @@ @RestController @Api(value = "签署类型管理") @Api(tags = "签署类型管理") @RequestMapping("/type") public class SignatureTypeController extends BaseController { @@ -24,7 +25,8 @@ * 查询签署类别列表 */ @GetMapping("/list") @ApiOperation(value = "查询签署类别列表") @ApiOperation("查询签署类别列表") @Anonymous public AjaxResult list(SignatureType signatureType) { return success(signatureTypeService.selectTypeList(signatureType)); } @@ -33,7 +35,7 @@ * 新增签署类别 */ @PostMapping("/insert") @ApiOperation(value = "新增签署类别") @ApiOperation("新增签署类别") public AjaxResult add(@Validated @RequestBody SignatureType signatureType) { return toAjax(signatureTypeService.insertSignatureType(signatureType)); } @@ -42,7 +44,7 @@ * 修改签署类别 */ @PostMapping("/update") @ApiOperation(value = "修改签署类别") @ApiOperation("修改签署类别") public AjaxResult edit(@RequestBody SignatureType signatureType) { return toAjax(signatureTypeService.updateSignatureType(signatureType)); } @@ -50,10 +52,10 @@ /** * 删除签署类别 */ @PostMapping("/delete") @ApiOperation(value = "删除签署类别") public AjaxResult remove(@RequestBody Long[] ids) { return toAjax(signatureTypeService.deleteType(ids)); @PostMapping("/delete/{id}") @ApiOperation("删除签署类别") public AjaxResult remove(@PathVariable("id") Integer id) { return toAjax(signatureTypeService.deleteType(id)); } signature/src/main/java/com/gkhy/sign/dto/rep/SignatureFlowRep.java
@@ -15,6 +15,7 @@ private String userName; private Integer deptId; private String deptName; private Integer signUserId; @@ -25,6 +26,7 @@ private String signFile; private Integer signStatus; private Integer sort; public Integer getItemId() { return itemId; @@ -56,6 +58,14 @@ public void setDeptId(Integer deptId) { this.deptId = deptId; } public String getDeptName() { return deptName; } public void setDeptName(String deptName) { this.deptName = deptName; } public Integer getSignUserId() { @@ -105,4 +115,12 @@ public void setSignStatus(Integer signStatus) { this.signStatus = signStatus; } public Integer getSort() { return sort; } public void setSort(Integer sort) { this.sort = sort; } } signature/src/main/java/com/gkhy/sign/dto/rep/SignatureItemRep.java
@@ -2,16 +2,19 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; import com.gkhy.sign.entity.SignatureFlow; import com.ruoyi.common.core.domain.BaseEntity; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import javax.validation.constraints.NotNull; import java.io.Serializable; import java.util.Date; import java.util.List; public class SignatureItemRep extends BaseEntity { public class SignatureItemRep implements Serializable { private Long id ; private String itemName; @@ -19,6 +22,8 @@ private String templateName; private Integer deptId; private String deptName; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date originateTime; private Integer initiaiUserId; private String initiaiUserName; signature/src/main/java/com/gkhy/sign/dto/rep/SignatureTemplateRep.java
@@ -17,6 +17,7 @@ private String deptName; private String filePath; private String fileName; private Integer delFlag; public Long getId() { @@ -75,6 +76,14 @@ this.filePath = filePath; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public Integer getDelFlag() { return delFlag; } signature/src/main/java/com/gkhy/sign/dto/req/SignatureFlowAddReq.java
对比新文件 @@ -0,0 +1,132 @@ package com.gkhy.sign.dto.req; public class SignatureFlowAddReq { private Long itemId; private Long userId; private String userName; private Long deptId; private String deptName; private Long[] signUserId; private String signUserName; private Long signDeptId; private String signDeptName; private String filePath; private Integer status; private Integer sort; private Integer delFlag; public Long getItemId() { return itemId; } public void setItemId(Long itemId) { this.itemId = itemId; } public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Long getDeptId() { return deptId; } public void setDeptId(Long deptId) { this.deptId = deptId; } public String getDeptName() { return deptName; } public void setDeptName(String deptName) { this.deptName = deptName; } public Long[] getSignUserId() { return signUserId; } public void setSignUserId(Long[] signUserId) { this.signUserId = signUserId; } public String getSignUserName() { return signUserName; } public void setSignUserName(String signUserName) { this.signUserName = signUserName; } public Long getSignDeptId() { return signDeptId; } public void setSignDeptId(Long signDeptId) { this.signDeptId = signDeptId; } public String getSignDeptName() { return signDeptName; } public void setSignDeptName(String signDeptName) { this.signDeptName = signDeptName; } public String getFilePath() { return filePath; } public void setFilePath(String filePath) { this.filePath = filePath; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public Integer getSort() { return sort; } public void setSort(Integer sort) { this.sort = sort; } public Integer getDelFlag() { return delFlag; } public void setDelFlag(Integer delFlag) { this.delFlag = delFlag; } } signature/src/main/java/com/gkhy/sign/dto/req/SignatureFlowSignReq.java
对比新文件 @@ -0,0 +1,43 @@ package com.gkhy.sign.dto.req; public class SignatureFlowSignReq { private Integer itemId; private Long userId; private String filePath; private Integer status; public Integer getItemId() { return itemId; } public void setItemId(Integer itemId) { this.itemId = itemId; } public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } public String getFilePath() { return filePath; } public void setFilePath(String filePath) { this.filePath = filePath; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } } signature/src/main/java/com/gkhy/sign/entity/SignatureFlow.java
@@ -17,32 +17,30 @@ private Integer id; @NotNull(message = "项目id不能为空") @ApiModelProperty(value = "项目id") private Integer itemId; private Long itemId; @NotNull(message = "操作人id不能为空") @ApiModelProperty(value = "操作人id") private Long userId; @NotNull(message = "操作人姓名不能为空") @ApiModelProperty(value = "操作人姓名") private String userName; @NotNull(message = "操作人部门不能为空") @ApiModelProperty(value = "操作人部门") private Long deptId; @ApiModelProperty(value = "操作人部门") private String deptName; @NotNull(message = "流向人id不能为空") @ApiModelProperty(value = "流向人id") private Long signUserId; @NotNull(message = "流向人姓名不能为空") @ApiModelProperty(value = "流向人姓名") private String signUserName; @NotNull(message = "流向人部门不能为空") @ApiModelProperty(value = "流向人部门") private Long signDeptId; @ApiModelProperty(value = "流向人部门名称") private String signDeptName; private String file_path; private String filePath; private Integer status; private Integer sort; private Integer delFlag; public Integer getId() { @@ -53,11 +51,11 @@ this.id = id; } public Integer getItemId() { public Long getItemId() { return itemId; } public void setItemId(Integer itemId) { public void setItemId(Long itemId) { this.itemId = itemId; } @@ -133,12 +131,21 @@ this.deptName = deptName; } public String getFile_path() { return file_path; public String getFilePath() { return filePath; } public void setFile_path(String file_path) { this.file_path = file_path; public void setFilePath(String file_path) { this.filePath = filePath; } public Integer getSort() { return sort; } public void setSort(Integer sort) { this.sort = sort; } public Integer getStatus() { signature/src/main/java/com/gkhy/sign/entity/SignatureTemplate.java
@@ -14,6 +14,7 @@ @ApiModel(value = "签署模版对象" , description = "签署模版对象") public class SignatureTemplate extends BaseEntity { private static final long serialVersionUID = 1L; @TableId(type = IdType.AUTO) private Long id; signature/src/main/java/com/gkhy/sign/entity/SignatureType.java
@@ -7,6 +7,7 @@ import com.ruoyi.common.core.domain.BaseEntity; import io.swagger.annotations.ApiModel; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @@ -14,11 +15,12 @@ @ApiModel(value = "签署类型",description = "签署类型对象") public class SignatureType extends BaseEntity { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; @NotNull(message = "类型名成不能为空") @NotBlank(message = "类型名成不能为空") private String typeName; private Integer delFlag; signature/src/main/java/com/gkhy/sign/mapper/SignatureFlowMapper.java
@@ -2,10 +2,18 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.gkhy.sign.dto.rep.SignatureFlowRep; import com.gkhy.sign.dto.req.SignatureFlowSignReq; import com.gkhy.sign.entity.SignatureFlow; import java.util.List; public interface SignatureFlowMapper extends BaseMapper<SignatureFlow> { List<SignatureFlowRep> selectbyItemId(Long id); int updateByFlowItemId(SignatureFlowSignReq signatureFlowReq); SignatureFlow selectByItemIdAndUserId(SignatureFlow signatureFlow); int updateByFlow(SignatureFlow signatureFlow); } signature/src/main/java/com/gkhy/sign/mapper/SignatureItemMapper.java
@@ -10,7 +10,10 @@ public interface SignatureItemMapper extends BaseMapper<SignatureItem> { List<SignatureItemRep> getItemList(SignatureItemReq signatureItem); int deleteItemByIds(Long[] ids); int deleteItemByIds(Integer ids); int insertSignatureItem(SignatureItem signatureItem); void updateByItemId(SignatureItem signatureItem); } signature/src/main/java/com/gkhy/sign/mapper/SignatureTemplateMapper.java
@@ -1,12 +1,13 @@ package com.gkhy.sign.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.gkhy.sign.dto.rep.SignatureTemplateRep; import com.gkhy.sign.entity.SignatureTemplate; import java.util.List; public interface SignatureTemplateMapper extends BaseMapper<SignatureTemplate> { List<SignatureTemplate> selectTemplateList(SignatureTemplate signatureTemplate); List<SignatureTemplateRep> selectTemplateList(SignatureTemplate signatureTemplate); int deleteTemplateByIds(Long[] ids); int deleteTemplateByIds(Long ids); } signature/src/main/java/com/gkhy/sign/mapper/SignatureTypeMapper.java
@@ -2,11 +2,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.gkhy.sign.entity.SignatureType; import org.apache.ibatis.annotations.Param; import java.util.List; public interface SignatureTypeMapper extends BaseMapper<SignatureType> { List<SignatureType> selectTypeList(SignatureType signatureType); int deleteTypeIds(Long[] ids); int deleteTypeIds(Integer ids); SignatureType selectByTypeName( String typeName); } signature/src/main/java/com/gkhy/sign/service/SignatureFlowService.java
@@ -2,6 +2,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.gkhy.sign.dto.rep.SignatureFlowRep; import com.gkhy.sign.dto.req.SignatureFlowAddReq; import com.gkhy.sign.dto.req.SignatureFlowSignReq; import com.gkhy.sign.entity.SignatureFlow; import java.util.List; @@ -11,5 +13,8 @@ int insertSignatureFlow(SignatureFlow signatureFlow); int saveSignatureFlow(SignatureFlowSignReq signatureFlowReq); int returnFile(SignatureFlow signatureFlow); } signature/src/main/java/com/gkhy/sign/service/SignatureItemService.java
@@ -14,5 +14,5 @@ int updateSignatureIteme(SignatureItem signatureItem); int deleteItem(Long[] ids); int deleteItem(Integer ids); } signature/src/main/java/com/gkhy/sign/service/SignatureTemplateService.java
@@ -1,16 +1,17 @@ package com.gkhy.sign.service; import com.baomidou.mybatisplus.extension.service.IService; import com.gkhy.sign.dto.rep.SignatureTemplateRep; import com.gkhy.sign.entity.SignatureTemplate; import java.util.List; public interface SignatureTemplateService extends IService<SignatureTemplate> { List<SignatureTemplate> selectTemplate(SignatureTemplate signatureTemplate); List<SignatureTemplateRep> selectTemplate(SignatureTemplate signatureTemplate); int insertSignatureTemplate(SignatureTemplate signatureTemplate); int updateSignatureTemplate(SignatureTemplate signatureTemplate); int deleteTemplate(Long[] ids); int deleteTemplate(Long ids); } signature/src/main/java/com/gkhy/sign/service/SignatureTypeService.java
@@ -12,5 +12,5 @@ int updateSignatureType(SignatureType signatureType); int deleteType(Long[] ids); int deleteType(Integer ids); } signature/src/main/java/com/gkhy/sign/service/impl/SignatureFlowServiceImpl.java
@@ -2,12 +2,24 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.sign.dto.rep.SignatureFlowRep; import com.gkhy.sign.dto.req.SignatureFlowAddReq; import com.gkhy.sign.dto.req.SignatureFlowSignReq; import com.gkhy.sign.entity.SignatureFlow; import com.gkhy.sign.entity.SignatureItem; import com.gkhy.sign.mapper.SignatureFlowMapper; import com.gkhy.sign.mapper.SignatureItemMapper; import com.gkhy.sign.service.SignatureFlowService; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.system.mapper.SysDeptMapper; import com.ruoyi.system.mapper.SysUserMapper; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; @Service @@ -15,6 +27,12 @@ @Autowired private SignatureFlowMapper signatureFlowMapper; @Autowired private SignatureItemMapper signatureItemMapper; @Autowired private SysUserMapper sysUserMapper; @Autowired private SysDeptMapper sysDeptMapper; @@ -25,6 +43,56 @@ @Override public int insertSignatureFlow(SignatureFlow signatureFlow) { // SignatureFlow signatureFlow1 = signatureFlowMapper.selectByItemIdAndUserId(signatureFlow); // if (signatureFlow1.getStatus() == 0 ){ // throw new RuntimeException("尚未签名,不能流转"); // } List<SignatureFlowRep> signatureFlowReps = signatureFlowMapper.selectbyItemId(signatureFlow.getItemId()); signatureFlow.setSort(signatureFlowReps.size()+1); SysUser sysUser = sysUserMapper.selectUserById(signatureFlow.getUserId()); SysDept sysDept = sysDeptMapper.selectDeptById(signatureFlow.getDeptId()); signatureFlow.setUserName(sysUser.getNickName()); signatureFlow.setDeptName(sysDept.getDeptName()); SysUser sysUserSign = sysUserMapper.selectUserById(signatureFlow.getSignUserId()); SysDept sysDeptSign = sysDeptMapper.selectDeptById(signatureFlow.getSignDeptId()); signatureFlow.setSignUserName(sysUserSign.getNickName()); signatureFlow.setSignDeptName(sysDeptSign.getDeptName()); return signatureFlowMapper.insert(signatureFlow); } @Override public int saveSignatureFlow(SignatureFlowSignReq signatureFlowReq) { return signatureFlowMapper.updateByFlowItemId(signatureFlowReq); } @Override public int returnFile(SignatureFlow signatureFlow) { LoginUser loginUser = SecurityUtils.getLoginUser(); signatureFlow.setStatus(3); SysUser sysUser = sysUserMapper.selectUserById(loginUser.getUserId()); SysDept sysDept = sysDeptMapper.selectDeptById(loginUser.getDeptId()); signatureFlow.setUserId(loginUser.getUserId()); signatureFlow.setUserName(sysUser.getNickName()); signatureFlow.setDeptId(loginUser.getDeptId()); signatureFlow.setDeptName(sysDept.getDeptName()); signatureFlow.setSignDeptId(sysDept.getDeptId()); signatureFlow.setSignDeptName(sysDept.getDeptName()); signatureFlow.setSignUserId(sysUser.getUserId()); signatureFlow.setSignUserName(sysUser.getNickName()); List<SignatureFlowRep> signatureFlowReps = signatureFlowMapper.selectbyItemId(signatureFlow.getItemId()); signatureFlow.setSort(signatureFlowReps.size()+1); int i = signatureFlowMapper.insert(signatureFlow); SignatureItem signatureItem = new SignatureItem(); if (i>0){ signatureItem.setId(Long.valueOf(signatureFlow.getItemId())); signatureItem.setFilePath(signatureFlow.getFilePath()); signatureItem.setStatus(2); signatureItem.setUpdateBy(SecurityUtils.getUsername()); signatureItem.setUpdateTime(new Date()); signatureItemMapper.updateByItemId(signatureItem); } return i; } } signature/src/main/java/com/gkhy/sign/service/impl/SignatureItemServiceImpl.java
@@ -1,6 +1,8 @@ package com.gkhy.sign.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.PageInfo; import com.gkhy.sign.dto.rep.SignatureFlowRep; import com.gkhy.sign.dto.rep.SignatureItemRep; import com.gkhy.sign.dto.req.SignatureItemReq; import com.gkhy.sign.entity.SignatureFlow; @@ -9,7 +11,9 @@ import com.gkhy.sign.mapper.SignatureItemMapper; import com.gkhy.sign.service.SignatureItemService; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.system.mapper.SysDeptMapper; import com.ruoyi.system.mapper.SysUserMapper; @@ -35,9 +39,15 @@ @Override public List<SignatureItemRep> selectItemList(SignatureItemReq signatureItem) { SysUser user = SecurityUtils.getLoginUser().getUser(); signatureItem.setUserId(user.getUserId()); return signatureItemMapper.getItemList(signatureItem); if (!SysUser.isAdmin(SecurityUtils.getUserId())) { signatureItem.setUserId(SecurityUtils.getUserId()); } List<SignatureItemRep> itemList = signatureItemMapper.getItemList(signatureItem); for (SignatureItemRep signatureItemRep : itemList) { List<SignatureFlowRep> signatureFlowReps = signatureFlowMapper.selectbyItemId(signatureItemRep.getId()); signatureItemRep.setSignatureFlows(signatureFlowReps); } return itemList; } @Override @@ -48,20 +58,23 @@ signatureItem.setOriginateTime(new Date()); int insert = signatureItemMapper.insertSignatureItem(signatureItem); List<SignatureFlowRep> signatureFlowReps = signatureFlowMapper.selectbyItemId(signatureItem.getId()); SignatureFlow signatureFlow = new SignatureFlow(); signatureFlow.setItemId(insert); signatureFlow.setItemId(signatureItem.getId()); signatureFlow.setUserId(SecurityUtils.getUserId()); signatureFlow.setUserName(SecurityUtils.getUsername()); SysUser sysUser2 = sysUser.selectUserById(SecurityUtils.getUserId()); signatureFlow.setUserName(sysUser2.getNickName()); signatureFlow.setDeptId(SecurityUtils.getDeptId()); SysDept sysDept = sysDeptMapper.selectDeptById(SecurityUtils.getDeptId()); signatureFlow.setDeptName(sysDept.getDeptName()); signatureFlow.setSignUserId(signatureItem.getInitiaiUserId()); SysUser sysUser1 = sysUser.selectUserById(signatureItem.getInitiaiUserId()); SysDept sysDept1 = sysDeptMapper.selectDeptById(sysUser1.getDeptId()); signatureFlow.setSignUserName(sysUser1.getUserName()); signatureFlow.setSignUserName(sysUser1.getNickName()); signatureFlow.setSignDeptId(sysDept1.getDeptId()); signatureFlow.setSignDeptName(sysDept1.getDeptName()); signatureFlow.setStatus(0); signatureFlow.setSort(signatureFlowReps.size()+1); signatureFlowMapper.insert(signatureFlow); return insert; @@ -76,7 +89,7 @@ } @Override public int deleteItem(Long[] ids) { public int deleteItem(Integer ids) { return signatureItemMapper.deleteItemByIds(ids); } } signature/src/main/java/com/gkhy/sign/service/impl/SignatureTemplateServiceImpl.java
@@ -1,11 +1,15 @@ package com.gkhy.sign.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.sign.dto.rep.SignatureTemplateRep; import com.gkhy.sign.entity.SignatureTemplate; import com.gkhy.sign.mapper.SignatureTemplateMapper; import com.gkhy.sign.service.SignatureTemplateService; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.file.FileUploadUtils; import com.ruoyi.common.utils.file.FileUtils; import org.apache.tomcat.util.http.fileupload.FileUpload; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -19,12 +23,17 @@ private SignatureTemplateMapper signatureTemplateMapper; @Override public List<SignatureTemplate> selectTemplate(SignatureTemplate signatureTemplate) { public List<SignatureTemplateRep> selectTemplate(SignatureTemplate signatureTemplate) { if (!SysUser.isAdmin(SecurityUtils.getUserId())){ signatureTemplate.setDeptId(SecurityUtils.getDeptId()); } return signatureTemplateMapper.selectTemplateList(signatureTemplate); List<SignatureTemplateRep> signatureTemplateReps = signatureTemplateMapper.selectTemplateList(signatureTemplate); for (SignatureTemplateRep signatureTemplateRep : signatureTemplateReps) { String name = FileUtils.getName(signatureTemplateRep.getFilePath()); signatureTemplateRep.setFileName(name); } return signatureTemplateReps; } @Override @@ -42,7 +51,7 @@ } @Override public int deleteTemplate(Long[] ids) { public int deleteTemplate(Long ids) { return signatureTemplateMapper.deleteTemplateByIds(ids); } } signature/src/main/java/com/gkhy/sign/service/impl/SignatureTypeServiceImpl.java
@@ -9,8 +9,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -30,6 +28,10 @@ SysUser user = SecurityUtils.getLoginUser().getUser(); signatureType.setCreateBy(user.getUserName()); signatureType.setCreateTime(new Date()); SignatureType signatureType1 = signatureTypeMapper.selectByTypeName(signatureType.getTypeName()); if (signatureType1!=null){ throw new RuntimeException("类型名称不可重复"); } return signatureTypeMapper.insert(signatureType); } @@ -42,7 +44,7 @@ } @Override public int deleteType(Long[] ids) { public int deleteType(Integer ids) { return signatureTypeMapper.deleteTypeIds(ids); } } signature/src/main/resources/mapper/sign/SignatureFlowMapper.xml
@@ -3,20 +3,39 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.gkhy.sign.mapper.SignatureFlowMapper"> <update id="updateByFlowItemId"> UPDATE signature_flow SET file_path = #{filePath}, `status` = #{status} WHERE item_id = #{itemId} AND sign_user_id = #{userId} </update> <update id="updateByFlow"> update signature_flow set status=#{status} where item_id = #{itemId} and sign_user_id = #{userId} </update> <select id="selectbyItemId" resultType="com.gkhy.sign.dto.rep.SignatureFlowRep"> select sf.item_id, sf.user_id, sf.user_name, sf.dept_id, sf.dept_name, sf.after_user_id, sf.after_user_name, sf.after_dept_id, sf.after_dept_name, siu.status as sing_status select item_id, user_id, user_name, dept_id, dept_name, sign_user_id, sign_user_name, sign_dept_id, sign_dept_name, file_path as sign_file, status as sign_status, sort from signature_flow where item_id = #{id} </select> <select id="selectByItemIdAndUserId" resultType="com.gkhy.sign.entity.SignatureFlow"> select * from signature_flow where item_id = #{itemId} and sign_user_id = #{signUserId} </select> </mapper> signature/src/main/resources/mapper/sign/SignatureItemMapper.xml
@@ -13,24 +13,26 @@ <result property="deptName" column="item_dept_name"/> <result property="originateTime" column="originate_time"/> <result property="initiaiUserId" column="initiai_user_id"/> <result property="initiaiUserName" column="initiaiUserid"/> <result property="initiaiUserName" column="initiai_user_name"/> <result property="itemFile" column="item_file"/> <result property="itemStatus" column="item_status"/> <result property="delFlag" column="del_flag"/> <collection property="signatureFlows" javaType="java.util.List" resultMap="signatureItemRep"/> <!-- <collection property="signatureFlows" javaType="java.util.List" resultMap="signatureItemRep"/>--> </resultMap> <resultMap id="signatureItemRep" type="com.gkhy.sign.dto.rep.SignatureFlowRep"> <result property="itemId" column="item_id"/> <result property="userId" column="user_id"/> <result property="userName" column="userName"/> <result property="userName" column="user_name"/> <result property="deptId" column="dept_id"/> <result property="deptName" column="dept_name"/> <result property="signUserId" column="sign_user_id"/> <result property="signUserName" column="sign_user_name"/> <result property="signDeptId" column="sign_dept_id"/> <result property="signDeptName" column="sign_dept_name"/> <result property="signFile" column="sign_file"/> <result property="signStatus" column="sign_status"/> <result property="sort" column="sort"/> </resultMap> <insert id="insertSignatureItem" parameterType="SignatureItem" useGeneratedKeys="true" keyProperty="id"> INSERT INTO `signature`.`signature_item` @@ -40,7 +42,7 @@ <if test="templateId != null">template_id,</if> <if test="deptId != null">dept_id,</if> <if test="originateTime != null">originate_time,</if> <if test="initialUserId != null">initiai_user_id,</if> <if test="initiaiUserId != null">initiai_user_id,</if> <if test="filePath != null and filePath != ''">file_path,</if> <if test="status != null">status,</if> <if test="delFlag != null">del_flag,</if> @@ -55,7 +57,7 @@ <if test="templateId != null">#{templateId},</if> <if test="deptId != null">#{deptId},</if> <if test="originateTime != null">#{originateTime},</if> <if test="initialUserId != null">#{initialUserId},</if> <if test="initiaiUserId != null">#{initiaiUserId},</if> <if test="filePath != null and filePath != ''">#{filePath},</if> <if test="status != null">#{status},</if> <if test="delFlag != null">#{delFlag},</if> @@ -65,15 +67,33 @@ <if test="updateTime != null">#{updateTime},</if> </trim> </insert> <update id="updateByItemId"> update signature_item <trim prefix="SET" suffixOverrides=","> <if test="itemName != null and itemName != ''">item_name = #{itemName},</if> <if test="templateId != null">template_id = #{templateId},</if> <if test="deptId != null">dept_id = #{deptId},</if> <if test="originateTime != null">originate_time = #{originateTime},</if> <if test="initiaiUserId != null">initiai_user_id = #{initiaiUserId},</if> <if test="filePath != null and filePath != ''">file_path = #{filePath},</if> <if test="status != null"> status = #{status},</if> <if test="delFlag != null">del_flag = #{delFlag},</if> <if test="createBy != null and createBy != ''"> create_by = #{createBy},</if> <if test="createTime != null">create_time = #{createTime},</if> <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> <if test="updateTime != null">update_time = #{updateTime},</if> </trim> where id = #{id} </update> <delete id="deleteItemByIds"> update signature_item set del_flag = 2 where id in <foreach item="id" collection="array" open="(" separator="," close=")"> #{id} </foreach> update signature_item set del_flag = 2 where id = #{ids} </delete> <select id="getItemList" resultMap="signatureItemRep"> <!-- LEFT JOIN signature_flow sf ON si.id = sf.item_id--> <select id="getItemList" resultMap="itemVo"> SELECT si.id, si.item_name, @@ -82,37 +102,31 @@ si.dept_id as itme_dept_id, sd.dept_name as item_dept_name, si.originate_time, su.user_name AS initiai_user_name, su.nick_name AS initiai_user_name, si.initiai_user_id, st.file_path as item_file, si.`status` as item_status, si.del_flag, sf.item_id, sf.user_id, sf.user_name, sf.dept_id, sf.dept_name, sf.sign_user_id, sf.sign_user_name, sf.sign_dept_id, sf.sign_dept_name, sf.file_path as sign_file, sf.status as sign_status si.del_flag FROM signature_item si LEFT JOIN signature_template st ON si.template_id = st.id LEFT JOIN signature_type sty ON st.type_id = sty.id LEFT JOIN sys_dept sd ON si.dept_id = sd.dept_id LEFT JOIN sys_user su ON si.initiai_user_id = su.user_id LEFT JOIN signature_flow sf ON si.id = sf.item_id <where> si.del_flag = 0 <if test="userId != null"> AND si.id IN ( SELECT DISTINCT si.id FROM signature_item si LEFT JOIN signature_flow sf ON si.id = sf.item_id WHERE sf.sign_user_id = #{userId} ) </if> <if test="status != null"> and si.status = #{status} </if> <if test="userId != null"> and sf.user_id = #{userId} </if> </where> ORDER BY si.id ORDER BY si.create_time desc </select> </mapper> signature/src/main/resources/mapper/sign/SignatureTemplateMapper.xml
@@ -16,14 +16,11 @@ <result property="delFlag" column="del_flag"/> </resultMap> <delete id="deleteTemplateByIds"> update signature_template set del_flag = 2 where id in <foreach item="id" collection="array" open="(" separator="," close=")"> #{id} </foreach> update signature_template set del_flag = 2 where id = #{ids} </delete> <select id="selectTemplateList" resultType="com.gkhy.sign.entity.SignatureTemplate"> <select id="selectTemplateList" resultType="com.gkhy.sign.dto.rep.SignatureTemplateRep"> SELECT st.id, st.template_name, @@ -38,9 +35,11 @@ LEFT JOIN sys_dept sd ON st.dept_id = sd.dept_id LEFT JOIN signature_type sty on st.type_id = sty.id <where> and st.del_flag = 0 <if test="deptId != null"> and st.dept_id = #{deptId} </if> </where> order by st.create_time desc </select> </mapper> signature/src/main/resources/mapper/sign/SignatureTypeMapper.xml
@@ -18,10 +18,7 @@ </sql> <delete id="deleteTypeIds"> update signature_type set del_flag = 2 where id in <foreach item="id" collection="array" open="(" separator="," close=")"> #{id} </foreach> update signature_type set del_flag = 2 where id= #{ids} </delete> @@ -34,4 +31,9 @@ </if> </where> </select> <select id="selectByTypeName" resultType="com.gkhy.sign.entity.SignatureType"> <include refid="selectType"/> where type_name =#{typeName} and del_flag = 0 </select> </mapper>