From d73fe1007352653694fa7866939930f3c2cd7549 Mon Sep 17 00:00:00 2001 From: syruan <1555146157@163.com> Date: Sun, 17 Dec 2023 18:01:20 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=86=E6=96=99=E5=87=BA=E5=BA=93=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/api/domain/LeaseApplyDetails.java | 14 +- .../sgzb/base/api/domain/LeaseApplyInfo.java | 27 ++- .../sgzb/base/api/domain/LeaseOutDetails.java | 79 +++++++++ .../bonus/sgzb/base/api/domain/TmTask.java | 14 +- .../sgzb/auth/service/SysLoginService.java | 33 +++- .../controller/LeaseOutDetailsController.java | 44 +++++ .../sgzb/app/controller/TmTaskController.java | 109 +++++++++++- .../app/mapper/LeaseOutDetailsMapper.java | 49 ++++++ .../bonus/sgzb/app/mapper/TmTaskMapper.java | 26 ++- .../app/service/LeaseOutDetailsService.java | 20 +++ .../bonus/sgzb/app/service/TmTaskService.java | 8 +- .../impl/LeaseOutDetailsServiceImpl.java | 80 +++++++++ .../app/service/impl/TmTaskServiceImpl.java | 83 ++++++++- .../mapper/app/LeaseOutDetailsMapper.xml | 166 ++++++++++++++++++ .../resources/mapper/app/TmTaskMapper.xml | 74 ++++++++ .../system/controller/SysUserController.java | 59 ++++--- 16 files changed, 832 insertions(+), 53 deletions(-) create mode 100644 sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/base/api/domain/LeaseOutDetails.java create mode 100644 sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/controller/LeaseOutDetailsController.java create mode 100644 sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/mapper/LeaseOutDetailsMapper.java create mode 100644 sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/service/LeaseOutDetailsService.java create mode 100644 sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/service/impl/LeaseOutDetailsServiceImpl.java create mode 100644 sgzb-modules/sgzb-base/src/main/resources/mapper/app/LeaseOutDetailsMapper.xml diff --git a/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/base/api/domain/LeaseApplyDetails.java b/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/base/api/domain/LeaseApplyDetails.java index 2ee0457f..e133a595 100644 --- a/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/base/api/domain/LeaseApplyDetails.java +++ b/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/base/api/domain/LeaseApplyDetails.java @@ -2,9 +2,10 @@ package com.bonus.sgzb.base.api.domain; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + import java.io.Serializable; import java.util.Date; -import lombok.Data; /** * Description: @@ -20,6 +21,8 @@ import lombok.Data; @Data public class LeaseApplyDetails implements Serializable { + private static final long serialVersionUID = 2227217051604273598L; + @ApiModelProperty(value = "") private Integer id; @@ -47,10 +50,14 @@ public class LeaseApplyDetails implements Serializable { @ApiModelProperty(value = "已领数量") private Double alNum; + /** 审批数量 */ + @ApiModelProperty(value = "审批数量") + private Double auditNum; + /** * 状态(待审批,进行中,已出库) */ - @ApiModelProperty(value = "状态(待审批,进行中,已出库)") + @ApiModelProperty(value = "状态(0待审批,1进行中,2已出库)") private String status; /** @@ -84,10 +91,9 @@ public class LeaseApplyDetails implements Serializable { private String remark; /** - * 数据所属组织 + * 设备所属类型 */ @ApiModelProperty(value = "数据所属组织") private Integer companyId; - private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/base/api/domain/LeaseApplyInfo.java b/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/base/api/domain/LeaseApplyInfo.java index 83871aeb..a3823db3 100644 --- a/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/base/api/domain/LeaseApplyInfo.java +++ b/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/base/api/domain/LeaseApplyInfo.java @@ -2,9 +2,11 @@ package com.bonus.sgzb.base.api.domain; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + import java.io.Serializable; import java.util.Date; -import lombok.Data; +import java.util.List; /** * Description: @@ -20,6 +22,8 @@ import lombok.Data; @Data public class LeaseApplyInfo implements Serializable { + private static final long serialVersionUID = 4429196890466663037L; + @ApiModelProperty(value = "id") private Integer id; @@ -53,6 +57,10 @@ public class LeaseApplyInfo implements Serializable { @ApiModelProperty(value = "1:1级审批,2:2级审批") private String type; + /** 机具规格详情列表 */ + @ApiModelProperty(value = "机具规格详情列表") + private List leaseApplyDetails; + /** * 公司审批人 */ @@ -89,6 +97,18 @@ public class LeaseApplyInfo implements Serializable { @ApiModelProperty(value = "分管审批备注") private String deptAuditRemark; + /** + * 机具分公司审批人 + */ + @ApiModelProperty(value = "机具分公司审批人") + private String directAuditBy; + + /** + * 机具分公司审批时间 + */ + @ApiModelProperty(value = "机具分公司审批时间") + private String directAuditTime; + /** * 创建者 */ @@ -120,10 +140,9 @@ public class LeaseApplyInfo implements Serializable { private String remark; /** - * 数据所属组织 + * 设备数据所属组织【类型】 */ - @ApiModelProperty(value = "数据所属组织") + @ApiModelProperty(value = "设备数据所属组织类型") private Integer companyId; - private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/base/api/domain/LeaseOutDetails.java b/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/base/api/domain/LeaseOutDetails.java new file mode 100644 index 00000000..f4630c01 --- /dev/null +++ b/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/base/api/domain/LeaseOutDetails.java @@ -0,0 +1,79 @@ +package com.bonus.sgzb.base.api.domain; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 领料出库详情表 + * @TableName lease_out_details + * @Version 1.0 + * @Author 阮世耀 + * @Since 2023-12-17 + */ + +@ApiModel(description = "领料出库详情表", value = "LeaseOutDetails") +@Data +public class LeaseOutDetails implements Serializable { + + private static final long serialVersionUID = 2040328845027085291L; + + @ApiModelProperty(value = "id") + private Integer id; + + /** 任务ID */ + @ApiModelProperty(value = "任务ID") + private Integer parentId; + + /** 规格ID */ + @ApiModelProperty(value = "规格ID") + private Integer typeId; + + /** 规格名称 */ + @ApiModelProperty(value = "规格名称") + private String typeName; + + /** maId */ + @ApiModelProperty(value = "maId") + private Integer maId; + + /** 协议ID */ + @ApiModelProperty(value = "协议ID") + private String agreementId; + + /** 预领料数 */ + @ApiModelProperty(value = "预领料数") + private Double outNum; + + /** 出库类型 */ + @ApiModelProperty(value = "出库类型") + private String outType; + + /** 创建者 */ + @ApiModelProperty(value = "创建者") + private String createBy; + + /** 创建时间 */ + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** 更新者 */ + @ApiModelProperty(value = "更新者") + private String updateBy; + + /** 更新时间 */ + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + /** 备注 */ + @ApiModelProperty(value = "备注") + private String remark; + + /** 数据所属组织 */ + @ApiModelProperty(value = "数据所属组织") + private Integer companyId; + +} \ No newline at end of file diff --git a/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/base/api/domain/TmTask.java b/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/base/api/domain/TmTask.java index 5e7f90f7..fbfa6959 100644 --- a/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/base/api/domain/TmTask.java +++ b/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/base/api/domain/TmTask.java @@ -2,12 +2,12 @@ package com.bonus.sgzb.base.api.domain; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + import java.io.Serializable; import java.util.Date; import java.util.List; -import lombok.Data; - /** * Description: 任务表tm_task * @Author 阮世耀 @@ -32,13 +32,13 @@ public class TmTask implements Serializable { /** * 任务类型(定义数据字典) */ - @ApiModelProperty(value="任务类型(定义数据字典)") + @ApiModelProperty(value="任务类型(数据字典)") private Integer taskType; /** * 任务状态(定义数据字典) */ - @ApiModelProperty(value="任务状态(定义数据字典)") + @ApiModelProperty(value="任务状态(数据字典)") private Integer taskStatus; /** @@ -89,6 +89,12 @@ public class TmTask implements Serializable { @ApiModelProperty(value="领料任务实体") private LeaseApplyInfo leaseApplyInfo; + /** + * 领料任务实体集合 + */ + @ApiModelProperty(value="领料任务实体集合") + private List leaseApplyInfoList; + /** * 领料任务详情集合 */ diff --git a/sgzb-auth/src/main/java/com/bonus/sgzb/auth/service/SysLoginService.java b/sgzb-auth/src/main/java/com/bonus/sgzb/auth/service/SysLoginService.java index 555a343b..79e8fba0 100644 --- a/sgzb-auth/src/main/java/com/bonus/sgzb/auth/service/SysLoginService.java +++ b/sgzb-auth/src/main/java/com/bonus/sgzb/auth/service/SysLoginService.java @@ -1,7 +1,5 @@ package com.bonus.sgzb.auth.service; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import com.bonus.sgzb.common.core.constant.CacheConstants; import com.bonus.sgzb.common.core.constant.Constants; import com.bonus.sgzb.common.core.constant.SecurityConstants; @@ -17,6 +15,8 @@ import com.bonus.sgzb.common.security.utils.SecurityUtils; import com.bonus.sgzb.system.api.RemoteUserService; import com.bonus.sgzb.system.api.domain.SysUser; import com.bonus.sgzb.system.api.model.LoginUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -159,6 +159,35 @@ public class SysLoginService } } + /** + * 根据手机号码重置密码,判断Redis中是否有验证码,如果有则通过验证,并删除key + * @param phone 手机号码 + * @param password 密码 + * @param code 验证码 + */ + private void resetPassword(String phone, String code, Long userId, String password) { + if (password.length() < UserConstants.PASSWORD_MIN_LENGTH || password.length() > UserConstants.PASSWORD_MAX_LENGTH) { + throw new ServiceException("密码长度必须在6到19个字符之间"); + } + if (code.length() != UserConstants.CODE_MIN_LENGTH_LOGIN) { + throw new ServiceException("验证码长度需为6位"); + } + if (phone.length() != UserConstants.PHONE_DEFAULT_LENGTH_LOGIN) { + throw new ServiceException("手机号码长度不在指定范围"); + } + if (remoteUserService.checkCode(phone, code).getCode() != Constants.SUCCESS) { + throw new ServiceException("对不起,您输入的验证码:" + code + " 不存在,请输入有效的验证码"); + } else { + // 已验证过的验证码需要清除 + redisService.deleteObject("code_" + phone); + + // 执行重置密码操作 + SysUser user = new SysUser(); + user.setUserId(userId); + user.setPassword(SecurityUtils.encryptPassword(password)); + } + } + private void isBlackIp(String phone) { String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST)); if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) diff --git a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/controller/LeaseOutDetailsController.java b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/controller/LeaseOutDetailsController.java new file mode 100644 index 00000000..c49242bd --- /dev/null +++ b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/controller/LeaseOutDetailsController.java @@ -0,0 +1,44 @@ +package com.bonus.sgzb.app.controller; + +import com.bonus.sgzb.app.service.LeaseOutDetailsService; +import com.bonus.sgzb.base.api.domain.LeaseOutDetails; +import com.bonus.sgzb.common.core.web.controller.BaseController; +import com.bonus.sgzb.common.core.web.domain.AjaxResult; +import com.bonus.sgzb.common.core.web.page.TableDataInfo; +import com.bonus.sgzb.common.log.annotation.Log; +import com.bonus.sgzb.common.log.enums.BusinessType; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * Description: 任务领料出库详情表控制器 + * + * @Author 阮世耀 + * @Create 2023/12/17 15:48 + * @Version 1.0 + */ +@RestController +@RequestMapping("/leaseOutDetails") +public class LeaseOutDetailsController extends BaseController { + + @Resource + private LeaseOutDetailsService leaseOutDetailsService; + + @Log(title = "获取领料出库详情表", businessType = BusinessType.QUERY) + @GetMapping("/getLeaseList") + public TableDataInfo getLeaseList(@RequestParam(value ="taskId", required = false, defaultValue = "") String taskId){ + return getDataTable(leaseOutDetailsService.selectListByParentId(taskId)); + } + + /** + * 领料出库,对库存处理 + * @param record 出库内容 + */ + @Log(title = "领料出库", businessType = BusinessType.UPDATE) + @PostMapping("/submitOut") + public AjaxResult submitOut(@RequestBody LeaseOutDetails record){ + return leaseOutDetailsService.submitOut(record); + } + +} diff --git a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/controller/TmTaskController.java b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/controller/TmTaskController.java index 3715542d..dba1d0a9 100644 --- a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/controller/TmTaskController.java +++ b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/controller/TmTaskController.java @@ -1,12 +1,14 @@ package com.bonus.sgzb.app.controller; + import cn.hutool.core.collection.CollUtil; -import com.bonus.sgzb.base.api.domain.LeaseApplyDetails; -import com.bonus.sgzb.base.api.domain.LeaseApplyInfo; -import com.bonus.sgzb.base.api.domain.TmTask; import com.bonus.sgzb.app.service.LeaseApplyDetailsService; import com.bonus.sgzb.app.service.LeaseApplyInfoService; import com.bonus.sgzb.app.service.TmTaskService; +import com.bonus.sgzb.base.api.domain.LeaseApplyDetails; +import com.bonus.sgzb.base.api.domain.LeaseApplyInfo; +import com.bonus.sgzb.base.api.domain.TmTask; import com.bonus.sgzb.common.core.utils.StringUtils; +import com.bonus.sgzb.common.core.web.controller.BaseController; import com.bonus.sgzb.common.core.web.domain.AjaxResult; import com.bonus.sgzb.common.log.annotation.Log; import com.bonus.sgzb.common.log.enums.BusinessType; @@ -22,7 +24,7 @@ import java.util.List; */ @RestController @RequestMapping("/tm_task") -public class TmTaskController { +public class TmTaskController extends BaseController { /** * 服务对象 @@ -36,12 +38,25 @@ public class TmTaskController { @Resource private LeaseApplyDetailsService leaseApplyDetailsService; // 领料申请明细表Service + + /** + * 领料审核,分公司,分管,机具分公司统一接口 + * @param task 审核信息 + * @return 结果 + */ + @Log(title = "领料审核", businessType = BusinessType.UPDATE) + @PostMapping("auditLeaseByCompany") + public AjaxResult auditLeaseByCompany(@RequestBody TmTask task) { + return toAjax(tmTaskService.updateLeaseTaskAuditInfo(task)); + } + + /** * 往来单位提交工程领用机具信息 * * @return 结果 */ - @Log(title = "任务表", businessType = BusinessType.INSERT) + @Log(title = "往来单位提交领料申请", businessType = BusinessType.INSERT) @PostMapping("submitLeaseApply") public AjaxResult submitLeaseApply(@RequestBody TmTask task) { if (StringUtils.isNull(task)) { @@ -105,6 +120,90 @@ public class TmTaskController { } + /** + * 机具分公司直接创建领料申请 + * @param task 任务信息 + * @return 结果 + */ + @Log(title = "机具分公司创建领料申请", businessType = BusinessType.INSERT) + @PostMapping("directLeaseApply") + public AjaxResult directLeaseApply(@RequestBody TmTask task) { + if (StringUtils.isNull(task)) { + return AjaxResult.error("参数错误"); + } + try { + // 创建任务 + boolean addTaskResult = tmTaskService.insertSelective(task) > 0; + if (addTaskResult && task.getLeaseApplyInfo() != null) { + if (CollUtil.isNotEmpty(task.getLeaseApplyDetails())) { + return AjaxResult.error("领料设备明细为空,请重新选择后上传!"); + } + if (StringUtils.isNull(task.getLeaseApplyInfo())) { + return AjaxResult.error("领料任务信息为空,请重新选择后上传!"); + } + + // 获取任务编号 + String taskId = task.getId(); + // 根据设备所属分公司拆分集合 + List> deviceByCompanyList = CollUtil.group(task.getLeaseApplyDetails(), LeaseApplyDetails::getCompanyId); + + // 对拆分后的集合进行遍历 + for (List leaseApplyDetailsList : deviceByCompanyList) { + // 判断拆分后的集合内是否有数据 + if (CollUtil.isNotEmpty(leaseApplyDetailsList)) { + // 对领料任务表的对象做数据处理 + LeaseApplyInfo leaseApplyInfo = task.getLeaseApplyInfo(); + leaseApplyInfo.setCode(tmTaskService.genderLeaseCode()); // 创建领料单号 + leaseApplyInfo.setTaskId(Integer.valueOf(taskId)); // 设置任务ID + leaseApplyInfo.setCompanyId(leaseApplyDetailsList.get(0).getCompanyId()); // 设置设备所属分公司,用于交给哪家审核 + leaseApplyInfo.setType("1"); // 设置审批层级,先固定2层,后期根据接口传入Type区分来源设定 + + // 创建领料任务,返回领料任务编号 + boolean addLeaseTaskResult = leaseApplyInfoService.genderLeaseCode(leaseApplyInfo) > 0; + // 领料任务创建完成,进行领料任务明细插入 + if (addLeaseTaskResult) { + // 领料任务编号 + Integer leaseTaskId = leaseApplyInfo.getId(); + if (StringUtils.isNotNull(leaseTaskId)) { + // 插入领料任务明细 + boolean addLeaseTaskDetailsResult = leaseApplyDetailsService.batchInsert(leaseApplyDetailsList) > 0; + if (addLeaseTaskDetailsResult) { + System.out.println("领料任务创建成功"); + } else { + System.out.println("领料任务创建成功,但领料任务明细插入失败"); + } + } + } else { + return AjaxResult.error("创建领料任务失败,或领料明细为空"); + } + } + } + if (StringUtils.isEmpty(taskId)) { return AjaxResult.error("任务编号为空,创建失败"); } + } else { + return AjaxResult.error("创建任务失败"); + } + return AjaxResult.success("任务创建成功,已完成"); + } catch (Exception e) { + return AjaxResult.error("创建任务失败," + e.getMessage()); + } + } + + + /** + * 查询机具领料审核列表 + * @param task 筛选条件 + * @return 列表 + */ + @Log(title = "查询机具领料审核列表", businessType = BusinessType.QUERY) + @GetMapping(value = "getLeaseAuditList") + public AjaxResult getLeaseAuditList(TmTask task) { + if (StringUtils.isNull(task)) { + return AjaxResult.error("参数错误"); + } + List leaseAuditList = tmTaskService.getLeaseAuditList(task); + return AjaxResult.success(getDataTable(leaseAuditList)); + } + /** * 通过主键查询单条数据 * diff --git a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/mapper/LeaseOutDetailsMapper.java b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/mapper/LeaseOutDetailsMapper.java new file mode 100644 index 00000000..4275c650 --- /dev/null +++ b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/mapper/LeaseOutDetailsMapper.java @@ -0,0 +1,49 @@ +package com.bonus.sgzb.app.mapper; + +import com.bonus.sgzb.base.api.domain.LeaseOutDetails; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * Description: + * + * @Author 阮世耀 + * @Create 2023/12/17 15:10 + * @Version 1.0 + */ + +@Mapper +public interface LeaseOutDetailsMapper { + + /** 查询出库详情 */ + List selectListByParentId(String parentId); + + /** + * 修改 (lease_apply_details 领料任务详细表)的已领数量 + */ + int updateLeaseApplyDetailsOutNum(@Param("record") LeaseOutDetails leaseOutDetails); + + /** 插入领料出库详细表 */ + int insert(LeaseOutDetails record); + + /** 插入领料出库详情表 -- 根据字段选择注入 */ + int insertSelective(LeaseOutDetails record); + + /** + * 减少 (ma_type 设备规格表)的库存数量 + */ + int updateMaTypeStockNum(@Param("record") LeaseOutDetails leaseOutDetails); + + /** + * 修改机具设备(ma_machine表)的状态为:在用 + */ + int updateMaMachineStatus(@Param("record") LeaseOutDetails leaseOutDetails); + + /** + * 插入(tm_task_agreement 任务协议表)协议信息 + */ + int insertAgreementInfo(@Param("record") LeaseOutDetails leaseOutDetails); + +} diff --git a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/mapper/TmTaskMapper.java b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/mapper/TmTaskMapper.java index 09e8aac3..bb32373d 100644 --- a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/mapper/TmTaskMapper.java +++ b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/mapper/TmTaskMapper.java @@ -1,10 +1,13 @@ package com.bonus.sgzb.app.mapper; +import com.bonus.sgzb.base.api.domain.LeaseApplyDetails; +import com.bonus.sgzb.base.api.domain.LeaseApplyInfo; import com.bonus.sgzb.base.api.domain.TmTask; -import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** * Description: * @Author 阮世耀 @@ -14,6 +17,27 @@ import org.apache.ibatis.annotations.Param; @Mapper public interface TmTaskMapper { + + /** + * 获取领料审核列表 by TmTask + * @param record 筛选条件 + * @return TmTask列表 + */ + List getAuditListByLeaseTmTask(TmTask record); + + List getAuditListByLeaseInfo(@Param("record") TmTask record); + + List getLeaseApplyDetails(@Param("record") LeaseApplyInfo record); + + /** 更新TmTask审批状态 */ + int updateTmTaskAuditStatus(@Param("record") TmTask record); + + /** 更新LeaseApplyInfo审批信息 */ + int updateLeaseApplyInfoAuditInfo(@Param("record") LeaseApplyInfo record); + + /** 更新leaseApplyDetails审批信息 */ + int updateLeaseApplyDetailsAuditInfo(@Param("record") LeaseApplyDetails record); + int deleteByPrimaryKey(Long taskId); int insert(TmTask record); diff --git a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/service/LeaseOutDetailsService.java b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/service/LeaseOutDetailsService.java new file mode 100644 index 00000000..c081a9d1 --- /dev/null +++ b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/service/LeaseOutDetailsService.java @@ -0,0 +1,20 @@ +package com.bonus.sgzb.app.service; + +import com.bonus.sgzb.base.api.domain.LeaseOutDetails; +import com.bonus.sgzb.common.core.web.domain.AjaxResult; + +import java.util.List; + +/** + * Description: 领料出库详情表Service接口 + * + * @Author 阮世耀 + * @Create 2023/12/17 15:06 + * @Version 1.0 + */ +public interface LeaseOutDetailsService { + + List selectListByParentId(String parentId); + + AjaxResult submitOut(LeaseOutDetails record); +} diff --git a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/service/TmTaskService.java b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/service/TmTaskService.java index 415d7ec1..4395c513 100644 --- a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/service/TmTaskService.java +++ b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/service/TmTaskService.java @@ -1,8 +1,9 @@ package com.bonus.sgzb.app.service; -import java.util.List; import com.bonus.sgzb.base.api.domain.TmTask; +import java.util.List; + /** * Description: 任务表Task * @Author 阮世耀 @@ -12,6 +13,11 @@ import com.bonus.sgzb.base.api.domain.TmTask; public interface TmTaskService{ + List getLeaseAuditList(TmTask record); + + /** 领料任务审核状态 */ + int updateLeaseTaskAuditInfo(TmTask record); + String genderLeaseCode(); int deleteByPrimaryKey(Long taskId); diff --git a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/service/impl/LeaseOutDetailsServiceImpl.java b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/service/impl/LeaseOutDetailsServiceImpl.java new file mode 100644 index 00000000..f67c8c61 --- /dev/null +++ b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/service/impl/LeaseOutDetailsServiceImpl.java @@ -0,0 +1,80 @@ +package com.bonus.sgzb.app.service.impl; + +import com.bonus.sgzb.app.mapper.LeaseOutDetailsMapper; +import com.bonus.sgzb.app.service.LeaseOutDetailsService; +import com.bonus.sgzb.base.api.domain.LeaseOutDetails; +import com.bonus.sgzb.common.core.utils.StringUtils; +import com.bonus.sgzb.common.core.web.domain.AjaxResult; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * Description: 领料出库详情接口实现类 + * + * @Author 阮世耀 + * @Create 2023/12/17 15:06 + * @Version 1.0 + */ + +@Service(value = "LeaseOutDetailsService") +public class LeaseOutDetailsServiceImpl implements LeaseOutDetailsService { + + @Resource + private LeaseOutDetailsMapper leaseOutDetailsMapper; + + /** + * 根据任务id查询出库数据 + * @param parentId 任务id + * @return 出库数据集合 + */ + @Override + public List selectListByParentId(String parentId) { + return leaseOutDetailsMapper.selectListByParentId(parentId); + } + + /** + * 领料出库处理 + * @param record 出库对象 + * @return 结果 + */ + @Override + public AjaxResult submitOut(LeaseOutDetails record) { + if (StringUtils.isNull(record)) { + return AjaxResult.error("领料出库失败,请检查参数是否填写完整!"); + } + // 首先更新领料任务详情表的领料数及状态 + int updateLeaseApplyDetailsOutNum = leaseOutDetailsMapper.updateLeaseApplyDetailsOutNum(record); + // 插入领料出库明细表 + int insertSelectiveNum = leaseOutDetailsMapper.insertSelective(record); + // 减少 (ma_type 设备规格表)的库存数量 + int updateMaTypeStockNum = leaseOutDetailsMapper.updateMaTypeStockNum(record); + // 更新 (ma_machine 设备表)的状态 + int updateMaMachineStatus = leaseOutDetailsMapper.updateMaMachineStatus(record); + // 插入(tm_task_agreement 任务协议表)协议信息 + int insertAgreementInfo = leaseOutDetailsMapper.insertAgreementInfo(record); + + // 进行状态判断 + if (updateLeaseApplyDetailsOutNum > 0) { + if (insertSelectiveNum > 0) { + if (updateMaTypeStockNum > 0) { + if (updateMaMachineStatus > 0) { + if (insertAgreementInfo > 0) { + return AjaxResult.success("领料出库成功!"); + } + return AjaxResult.error("领料出库失败,插入任务协议信息错误!"); + } + return AjaxResult.error("领料出库失败,最后更新设备状态错误!"); + } + return AjaxResult.error("出库失败,更新设备规格库存数量时出错!"); + } + return AjaxResult.error("出库失败,插入领料出库明细错误!"); + } + return AjaxResult.error("出库操作失败,更新领料数量及状态时出错!"); + } + + + + +} diff --git a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/service/impl/TmTaskServiceImpl.java b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/service/impl/TmTaskServiceImpl.java index c01228bf..513f2384 100644 --- a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/service/impl/TmTaskServiceImpl.java +++ b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/app/service/impl/TmTaskServiceImpl.java @@ -1,12 +1,18 @@ package com.bonus.sgzb.app.service.impl; -import com.bonus.sgzb.common.core.utils.DateUtils; -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import java.util.List; -import com.bonus.sgzb.base.api.domain.TmTask; +import cn.hutool.core.collection.CollUtil; import com.bonus.sgzb.app.mapper.TmTaskMapper; import com.bonus.sgzb.app.service.TmTaskService; +import com.bonus.sgzb.base.api.domain.LeaseApplyDetails; +import com.bonus.sgzb.base.api.domain.LeaseApplyInfo; +import com.bonus.sgzb.base.api.domain.TmTask; +import com.bonus.sgzb.common.core.utils.DateUtils; +import com.bonus.sgzb.common.core.utils.StringUtils; +import org.apache.commons.lang3.RandomStringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; /** * Description: * @Author 阮世耀 @@ -20,9 +26,74 @@ public class TmTaskServiceImpl implements TmTaskService{ @Resource private TmTaskMapper tmTaskMapper; + /** + * 获取审核列表 + */ + @Override + public List getLeaseAuditList(TmTask record) { + List tmTaskList = tmTaskMapper.getAuditListByLeaseTmTask(record); + for (TmTask tmTask : tmTaskList) { + if (tmTask != null) { + // 去查询任务分单表 + List auditListByLeaseInfo = tmTaskMapper.getAuditListByLeaseInfo(tmTask); + if (auditListByLeaseInfo != null && !auditListByLeaseInfo.isEmpty()) { + // 对领料任务集合查询具体详情 + for (LeaseApplyInfo leaseApplyInfo : auditListByLeaseInfo) { + if (leaseApplyInfo != null) { + // 去查询领料任务详情表 + List leaseApplyDetails = tmTaskMapper.getLeaseApplyDetails(leaseApplyInfo); + if (leaseApplyDetails != null && !leaseApplyDetails.isEmpty()) { + // 塞入领料任务详情集合 + leaseApplyInfo.setLeaseApplyDetails(leaseApplyDetails); + } + } + } + // 存入领料任务实体集合 + tmTask.setLeaseApplyInfoList(auditListByLeaseInfo); + } + } + } + return tmTaskList; + } + + /** + * 领料任务审核状态 + * + * @param record 审核数据及信息 + */ + @Override + public int updateLeaseTaskAuditInfo(TmTask record) { + int result = 0; + if (StringUtils.isNotNull(record)) { + // 先审核任务表 + result += tmTaskMapper.updateTmTaskAuditStatus(record); + // 再审核领料任务信息表 + if (CollUtil.isNotEmpty(record.getLeaseApplyInfoList())) { + for (LeaseApplyInfo leaseApplyInfo : record.getLeaseApplyInfoList()) { + if (leaseApplyInfo != null) { + result += tmTaskMapper.updateLeaseApplyInfoAuditInfo(leaseApplyInfo); + // 再审核领料任务详情表 + if (CollUtil.isNotEmpty(leaseApplyInfo.getLeaseApplyDetails())) { + for (LeaseApplyDetails leaseApplyDetails : leaseApplyInfo.getLeaseApplyDetails()) { + if (StringUtils.isNotNull(leaseApplyDetails)) { + result += tmTaskMapper.updateLeaseApplyDetailsAuditInfo(leaseApplyDetails); + } + } + } + } + } + } + } else { + return 0; + } + return result; + } + @Override public String genderLeaseCode() { - String code = "001"; + //String code = "0001"; + // 先生成随机4位字符,后期根据数据库当月最大CODE值+1 + String code = RandomStringUtils.randomAlphanumeric(4); return "L" + DateUtils.getDate() + "-" + code; } diff --git a/sgzb-modules/sgzb-base/src/main/resources/mapper/app/LeaseOutDetailsMapper.xml b/sgzb-modules/sgzb-base/src/main/resources/mapper/app/LeaseOutDetailsMapper.xml new file mode 100644 index 00000000..9d78f4e4 --- /dev/null +++ b/sgzb-modules/sgzb-base/src/main/resources/mapper/app/LeaseOutDetailsMapper.xml @@ -0,0 +1,166 @@ + + + + + + + + UPDATE + lease_apply_details + SET + al_num = al_num + 1, + + update_by = #{record.updateBy}, + + update_time = now(), + status = '2' + WHERE + parennt_id = #{record.parentId} and type_id = #{record.typeId} + + + + insert into lease_out_details(parent_id,type_id,ma_id,out_num,out_type,create_by,create_time,update_by,update_time,remark,company_id) + values(#{parentId},#{typeId},#{maId},#{outNum},#{outType},#{createBy},now(),#{updateBy},now(),#{remark},#{companyId}) + + + + insert into lease_out_details + + + parent_id, + + + type_id, + + + ma_id, + + + out_num, + + + out_type, + + + create_by, + + + update_by, + + + remark, + + + company_id, + + + + + #{parentId}, + + + #{typeId}, + + + #{maId}, + + + #{outNum}, + + + #{outType}, + + + #{createBy}, + + + #{updateBy}, + + + #{remark}, + + + #{companyId}, + + + + + + UPDATE + ma_type + SET + num = num - #{record.outNum} + WHERE + type_id = #{record.typeId} + + + + UPDATE + ma_machine + SET + ma_status = '16' + + type_id = #{record.typeId} + + and ma_id = #{record.maId} + + + + + + insert into tm_task_agreement + + + task_id, + + + agreement_id, + + + create_by, + + + update_by, + + + remark, + + + company_id, + + create_time + + + + #{record.parentId}, + + + #{record.typeId}, + + + #{record.createBy}, + + + #{record.updateBy}, + + + #{record.remark}, + + + #{record.companyId}, + + now() + + + \ No newline at end of file diff --git a/sgzb-modules/sgzb-base/src/main/resources/mapper/app/TmTaskMapper.xml b/sgzb-modules/sgzb-base/src/main/resources/mapper/app/TmTaskMapper.xml index b70cd39f..52f1207d 100644 --- a/sgzb-modules/sgzb-base/src/main/resources/mapper/app/TmTaskMapper.xml +++ b/sgzb-modules/sgzb-base/src/main/resources/mapper/app/TmTaskMapper.xml @@ -447,4 +447,78 @@ + + + + + + + + UPDATE tm_task SET task_status = #{record.taskStatus} WHERE task_id = #{record.taskId} + + + + UPDATE + lease_apply_info + set + + + company_audit_by = #{record.companyAuditBy}, + company_audit_time = #{record.companyAuditTime}, + company_audit_remark = #{record.companyAuditRemark}, + + + dept_audit_by = #{record.companyAuditBy}, + dept_audit_time = #{record.companyAuditTime}, + dept_audit_remark = #{record.companyAuditRemark}, + + + direct_audit_by = #{record.directAuditBy}, + direct_audit_time = #{record.directAuditTime} + + + WHERE + task_id = #{record.taskId} + + + + update + lease_apply_details + set + + + audit_num = #{record.auditNum}, + + + al_num = #{record.alNum}, + + + status = #{record.status}, + + + update_by = #{record.updateBy}, + + + update_time = #{record.updateTime} + + + where + parennt_id = #{record.parenntId} + \ No newline at end of file diff --git a/sgzb-modules/sgzb-system/src/main/java/com/bonus/sgzb/system/controller/SysUserController.java b/sgzb-modules/sgzb-system/src/main/java/com/bonus/sgzb/system/controller/SysUserController.java index b75b5c57..8ad4cd7c 100644 --- a/sgzb-modules/sgzb-system/src/main/java/com/bonus/sgzb/system/controller/SysUserController.java +++ b/sgzb-modules/sgzb-system/src/main/java/com/bonus/sgzb/system/controller/SysUserController.java @@ -1,30 +1,10 @@ package com.bonus.sgzb.system.controller; -import java.io.IOException; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; - import com.bonus.sgzb.common.core.constant.Constants; import com.bonus.sgzb.common.core.constant.SecurityConstants; -import com.bonus.sgzb.common.core.exception.ServiceException; -import com.bonus.sgzb.system.api.RemoteUserService; -import com.bonus.sgzb.system.service.*; -import org.apache.commons.lang3.ArrayUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.multipart.MultipartFile; +import com.bonus.sgzb.common.core.constant.UserConstants; import com.bonus.sgzb.common.core.domain.R; +import com.bonus.sgzb.common.core.exception.ServiceException; import com.bonus.sgzb.common.core.utils.StringUtils; import com.bonus.sgzb.common.core.utils.poi.ExcelUtil; import com.bonus.sgzb.common.core.web.controller.BaseController; @@ -35,10 +15,24 @@ import com.bonus.sgzb.common.log.enums.BusinessType; import com.bonus.sgzb.common.security.annotation.InnerAuth; import com.bonus.sgzb.common.security.annotation.RequiresPermissions; import com.bonus.sgzb.common.security.utils.SecurityUtils; +import com.bonus.sgzb.system.api.RemoteUserService; import com.bonus.sgzb.system.api.domain.SysDept; import com.bonus.sgzb.system.api.domain.SysRole; import com.bonus.sgzb.system.api.domain.SysUser; import com.bonus.sgzb.system.api.model.LoginUser; +import com.bonus.sgzb.system.service.*; +import org.apache.commons.lang3.ArrayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** * 用户信息 @@ -292,12 +286,25 @@ public class SysUserController extends BaseController * 根据手机验证码重制密码 */ @RequiresPermissions("system:user:edit") - @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @Log(title = "根据手机验证码重制密码", businessType = BusinessType.UPDATE) @PutMapping("/resetPwdByCode") - public AjaxResult resetPwdByCode(String phone, String code, String password) { - if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(code) || StringUtils.isEmpty(password)) { - return AjaxResult.error("参数错误"); + public AjaxResult resetPwdByCode(String phone, Long userId, String code, String password) { + if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(code) || StringUtils.isEmpty(password) || userId == null) { + return AjaxResult.error("参数不能为空"); } + if (password.length() < UserConstants.PASSWORD_MIN_LENGTH || password.length() > UserConstants.PASSWORD_MAX_LENGTH) { + throw new ServiceException("密码长度必须在6到19个字符之间"); + } + if (code.length() != UserConstants.CODE_MIN_LENGTH_LOGIN) { + throw new ServiceException("验证码长度需为6位"); + } + if (phone.length() != UserConstants.PHONE_DEFAULT_LENGTH_LOGIN) { + throw new ServiceException("手机号码长度不在指定范围"); + } + if (remoteUserService.checkCode(phone, code).getCode() != Constants.SUCCESS) { + throw new ServiceException("对不起,您输入的验证码:" + code + " 不存在,请重新输入有效的验证码"); + } + if (smsService.checkCode(phone, code)) { // 查询用户信息 R userResult = remoteUserService.getUserInfoByPhone(phone, SecurityConstants.INNER);