diff --git a/src/main/java/com/bonus/digitalSignage/backstage/controller/ProProgressController.java b/src/main/java/com/bonus/digitalSignage/backstage/controller/ProProgressController.java index 44ab67d..dba31f1 100644 --- a/src/main/java/com/bonus/digitalSignage/backstage/controller/ProProgressController.java +++ b/src/main/java/com/bonus/digitalSignage/backstage/controller/ProProgressController.java @@ -3,17 +3,20 @@ package com.bonus.digitalSignage.backstage.controller; import com.bonus.digitalSignage.annotation.DecryptAndVerify; import com.bonus.digitalSignage.annotation.LogAnnotation; import com.bonus.digitalSignage.backstage.entity.dto.QueryParamDto; +import com.bonus.digitalSignage.backstage.entity.vo.ProProgressVo; import com.bonus.digitalSignage.backstage.service.ProProgressService; import com.bonus.digitalSignage.system.vo.EncryptedReq; import com.bonus.digitalSignage.utils.ServerResponse; import com.github.pagehelper.PageHelper; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; /** * @className:ProProgressController @@ -34,8 +37,56 @@ public class ProProgressController { @PostMapping(value = "getList") @DecryptAndVerify(decryptedClass = QueryParamDto.class)//加解密统一管理 @LogAnnotation(operModul = "综合查询-工程进度更新", operation = "查询列表", operDesc = "系统级事件",operType="查询") +// @PreAuthorize("@pms.hasPermission('comprehensive:data:query')") public ServerResponse getList(EncryptedReq dto) { PageHelper.startPage(dto.getData().getPageNum(), dto.getData().getPageSize()); return service.getList(dto.getData()); } + + @ApiOperation("工程进度更新-导出列表") + @PostMapping("downloadExcel") + @DecryptAndVerify(decryptedClass = QueryParamDto.class)//加解密统一管理 + @LogAnnotation(operModul = "工程进度更新-工程进度更新", operation = "导出列表", operDesc = "系统级事件",operType="导出") +// @PreAuthorize("@pms.hasPermission('comprehensive:data:export')") + public void downloadExcel(HttpServletResponse response, EncryptedReq dto) { + service.downloadExcel(dto.getData(),response); + } + + @ApiOperation("工程进度更新-更新进度-详情") + @PostMapping("detailQuery") + @DecryptAndVerify(decryptedClass = QueryParamDto.class)//加解密统一管理 + @LogAnnotation(operModul = "工程进度更新-更新进度", operation = "查询详情", operDesc = "系统级事件",operType="查询") +// @PreAuthorize("@pms.hasPermission('comprehensive:data:detailQuery')") + public ServerResponse detailQuery(HttpServletResponse response, EncryptedReq dto) { + return service.detailQuery(dto.getData()); + } + + @ApiOperation("工程进度更新-更新进度-项目进度") + @PostMapping(value = "getProProgress") + @DecryptAndVerify(decryptedClass = QueryParamDto.class)//加解密统一管理 + public ServerResponse getProProgress(EncryptedReq dto) { + PageHelper.startPage(dto.getData().getPageNum(), dto.getData().getPageSize()); + return service.getProProgress(dto.getData()); + } + + @ApiOperation("工程进度更新-更新进度-更新记录") + @PostMapping("updateRecord") + @DecryptAndVerify(decryptedClass = QueryParamDto.class)//加解密统一管理 + public ServerResponse updateRecord(HttpServletResponse response, EncryptedReq dto) { + return service.updateRecord(dto.getData()); + } + + @ApiOperation("工程进度更新-更新进度-查询更新项目工序数据") + @PostMapping("getGxData") + @DecryptAndVerify(decryptedClass = QueryParamDto.class)//加解密统一管理 + public ServerResponse getGxData(EncryptedReq dto) { + return service.getGxData(dto.getData()); + } + + @ApiOperation("工程进度更新-更新进度-更新数据") + @PostMapping("updateProgressData") + @DecryptAndVerify(decryptedClass = ProProgressVo.UpdateRecordVo.class)//加解密统一管理 + public ServerResponse updateProgressData(EncryptedReq dto) { + return service.updateProgressData(dto.getData()); + } } diff --git a/src/main/java/com/bonus/digitalSignage/backstage/dao/ProProgressDao.java b/src/main/java/com/bonus/digitalSignage/backstage/dao/ProProgressDao.java index 477f160..05792ee 100644 --- a/src/main/java/com/bonus/digitalSignage/backstage/dao/ProProgressDao.java +++ b/src/main/java/com/bonus/digitalSignage/backstage/dao/ProProgressDao.java @@ -23,4 +23,94 @@ public interface ProProgressDao { * @date 2025/4/21 17:46 */ List getList(QueryParamDto dto); + + /** + * 工程进度更新-更新进度-详情 + * @param dto + * @return ProDetailVo + * @author cwchen + * @date 2025/4/22 10:43 + */ + ProProgressVo.ProDetailVo detailQuery(QueryParamDto dto); + + /** + * 工程进度更新-更新进度-项目进度 + * @param dto + * @return List + * @author cwchen + * @date 2025/4/22 11:11 + */ + List getProProgress(QueryParamDto dto); + + /** + * 查询工程杆塔进度 + * @param dto + * @return TowerDetailVo + * @author cwchen + * @date 2025/4/22 11:20 + */ + ProProgressVo.ProDetailVo getTowerProgress(QueryParamDto dto); + + /** + * 工程进度更新-更新进度-更新记录 + * @param dto + * @return List + * @author cwchen + * @date 2025/4/22 13:06 + */ + List getUpdateRecord(QueryParamDto dto); + + /** + * 工程进度更新-更新进度-查询更新项目工序数据 + * @param dto + * @return List + * @author cwchen + * @date 2025/4/22 13:16 + */ + List getGxData(QueryParamDto dto); + + /** + * 查询杆塔进度是否被重复更新 + * @param vo + * @return int + * @author cwchen + * @date 2025/4/22 14:20 + */ + int getIsRepeatUpdate(ProProgressVo.UpdateRecordVo vo); + + /** + * 查询当前工程进度和杆塔数量 + * @param vo + * @return Integer + * @author cwchen + * @date 2025/4/22 14:25 + */ + List getNowProProgress(ProProgressVo.UpdateRecordVo vo); + + /** + * 更新杆塔进度 + * @param vo + * @return void + * @author cwchen + * @date 2025/4/22 14:41 + */ + void addProgress(ProProgressVo.UpdateRecordVo vo); + + /** + * 更新杆塔进度关系表 + * @param vo + * @return void + * @author cwchen + * @date 2025/4/22 15:03 + */ + void addTowerProgress(ProProgressVo.UpdateRecordVo vo); + + /** + * 更新工程整体进度 + * @param vo + * @return void + * @author cwchen + * @date 2025/4/22 15:03 + */ + void updateProProgress(ProProgressVo.UpdateRecordVo vo); } diff --git a/src/main/java/com/bonus/digitalSignage/backstage/entity/dto/QueryParamDto.java b/src/main/java/com/bonus/digitalSignage/backstage/entity/dto/QueryParamDto.java index 0e00358..511fa7b 100644 --- a/src/main/java/com/bonus/digitalSignage/backstage/entity/dto/QueryParamDto.java +++ b/src/main/java/com/bonus/digitalSignage/backstage/entity/dto/QueryParamDto.java @@ -16,7 +16,9 @@ import java.util.List; public class QueryParamDto { private Long id; + private Long departId; private String keyWord; + private int type; /**权限层级*/ private String level = UserUtil.getAuthLevel(); /**项目部权限*/ diff --git a/src/main/java/com/bonus/digitalSignage/backstage/entity/vo/ProProgressVo.java b/src/main/java/com/bonus/digitalSignage/backstage/entity/vo/ProProgressVo.java index 41969ab..c8dcb4a 100644 --- a/src/main/java/com/bonus/digitalSignage/backstage/entity/vo/ProProgressVo.java +++ b/src/main/java/com/bonus/digitalSignage/backstage/entity/vo/ProProgressVo.java @@ -1,10 +1,18 @@ package com.bonus.digitalSignage.backstage.entity.vo; +import cn.afterturn.easypoi.excel.annotation.Excel; +import com.bonus.digitalSignage.system.vo.LoginUser; +import com.bonus.digitalSignage.utils.UserUtil; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; import java.util.Date; +import java.util.List; +import java.util.Optional; /** * @className:ProProgressVo @@ -19,17 +27,200 @@ public class ProProgressVo { @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) private String keyWord; + @Excel(name = "序号", width = 10.0, orderNum = "0") private Long id; - /**工程名称*/ + /** + * 工程名称 + */ + @Excel(name = "工程名称", width = 30.0, orderNum = "1") private String proName; - /**电压等级*/ + /** + * 电压等级 + */ + @Excel(name = "电压等级", width = 30.0, orderNum = "2") private String voltageLevel; - /**项目进度*/ + /** + * 项目进度 + */ + @Excel(name = "项目进度", width = 30.0, orderNum = "3") private double proProgress; - /**更新时间*/ + /** + * 更新时间 + */ + @Excel(name = "更新时间", width = 30.0, orderNum = "4") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date updateTime; - /**更新人*/ + /** + * 更新人 + */ + @Excel(name = "更新人", width = 30.0, orderNum = "5") private String updateUserName; + /** + * 项目部id + */ + private Long departId; + + @Data + public static class ProDetailVo { + + private Long id; + /** + * 工程名称 + */ + private String proName; + /** + * 所属分公司 + */ + private String companyName; + /** + * 项目状态 + */ + private String proStatus; + /** + * 电压等级 + */ + private String voltageLevel; + /** + * 线路长度 + */ + private String lineLength; + /** + * 杆塔数量 + */ + private int towerNum; + /** + * 项目计划开始时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date planStartTime; + /** + * 项目计划结束时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date planEndTime; + /** + * 最后更新 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; + /** + * 项目进度 + */ + private double proProgress; + /** + * 基础开挖 + */ + private int num; + /** + * 基础开挖完成 + */ + private int num2; + /** + * 基础浇筑完成 + */ + private int num3; + /** + * 铁塔组立 + */ + private int num4; + /** + * 铁塔组立完成 + */ + private int num5; + /** + * 架线施工完成 + */ + private int num6; + /** + * 附件安装完成 + */ + private int num7; + } + + @Data + public static class TowerDetailVo { + + private Long id; + /** + * 杆塔名称 + */ + private String towerName; + /** + * 杆塔完成进度 1.基础开挖 2.基础开挖完成 3.基础浇筑完成 4.铁塔组立 5.铁塔组立完成 6.架线施工完成 7.附件安装完成 + */ + private int towerProgress; + + /** + * 1.可选择 0.不可选择 + */ + private int chooseStatus; + + } + + @Data + public static class UpdateRecordVo { + + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + @NotNull(message = "工程id不能为空", groups = {Update.class}) + private Long id; + + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + private Long dataId; + + private String userName; + /** + * 更新说明 + */ + @NotBlank(message = "更新说明不能为空", groups = {Update.class}) + private String updateDesc; + /** + * 更新进度 + */ + private double finishProgress; + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; + /** + * 更新日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date updateDate; + + /** + * 工序类型 1.基础开挖 2.基础开挖完成 3.基础浇筑完成 4.铁塔组立 5.铁塔组立完成 6.架线施工完成 7.附件安装完成 + */ + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + private int progressType; + + /** + * 创建人id + */ + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + private Long createUserId = Optional.ofNullable(UserUtil.getLoginUser()).map(LoginUser::getId).orElse(0L); + + /** + * 更新人id + */ + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + private Long updateUserId = Optional.ofNullable(UserUtil.getLoginUser()).map(LoginUser::getId).orElse(0L); + + /** + * 杆塔id集合 + */ + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + @NotNull(message = "选择杆塔不能为空", groups = {Update.class}) + @Size(min = 1, message = "至少选择一个杆塔数据", groups = {Update.class}) + private List towerIds; + + /** + * 修改条件限制 + */ + public interface Update { + } + + } + } diff --git a/src/main/java/com/bonus/digitalSignage/backstage/service/ProProgressService.java b/src/main/java/com/bonus/digitalSignage/backstage/service/ProProgressService.java index 13c90c7..295a2b0 100644 --- a/src/main/java/com/bonus/digitalSignage/backstage/service/ProProgressService.java +++ b/src/main/java/com/bonus/digitalSignage/backstage/service/ProProgressService.java @@ -1,8 +1,11 @@ package com.bonus.digitalSignage.backstage.service; import com.bonus.digitalSignage.backstage.entity.dto.QueryParamDto; +import com.bonus.digitalSignage.backstage.entity.vo.ProProgressVo; import com.bonus.digitalSignage.utils.ServerResponse; +import javax.servlet.http.HttpServletResponse; + /** * @className:ProProgress * @author:cwchen @@ -19,4 +22,59 @@ public interface ProProgressService { * @date 2025/4/21 17:41 */ ServerResponse getList(QueryParamDto data); + + /** + * 工程进度更新-导出列表 + * @param data + * @param response + * @return void + * @author cwchen + * @date 2025/4/22 10:22 + */ + void downloadExcel(QueryParamDto data, HttpServletResponse response); + + /** + * 工程进度更新-更新进度-详情 + * @param data + * @return ServerResponse + * @author cwchen + * @date 2025/4/22 10:39 + */ + ServerResponse detailQuery(QueryParamDto data); + + /** + * 工程进度更新-更新进度-项目进度 + * @param data + * @return ServerResponse + * @author cwchen + * @date 2025/4/22 11:06 + */ + ServerResponse getProProgress(QueryParamDto data); + + /** + * 工程进度更新-更新进度-更新记录 + * @param data + * @return ServerResponse + * @author cwchen + * @date 2025/4/22 13:02 + */ + ServerResponse updateRecord(QueryParamDto data); + + /** + * 工程进度更新-更新进度-查询更新项目工序数据 + * @param data + * @return ServerResponse + * @author cwchen + * @date 2025/4/22 13:15 + */ + ServerResponse getGxData(QueryParamDto data); + + /** + * 工程进度更新-更新进度-更新数据 + * @param vo + * @return ServerResponse + * @author cwchen + * @date 2025/4/22 13:38 + */ + ServerResponse updateProgressData(ProProgressVo.UpdateRecordVo vo); } diff --git a/src/main/java/com/bonus/digitalSignage/backstage/service/impl/ProProgressServiceImpl.java b/src/main/java/com/bonus/digitalSignage/backstage/service/impl/ProProgressServiceImpl.java index 6397cdb..5aa3b14 100644 --- a/src/main/java/com/bonus/digitalSignage/backstage/service/impl/ProProgressServiceImpl.java +++ b/src/main/java/com/bonus/digitalSignage/backstage/service/impl/ProProgressServiceImpl.java @@ -1,5 +1,9 @@ package com.bonus.digitalSignage.backstage.service.impl; +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import com.bonus.digitalSignage.advice.ValidatorsUtils; import com.bonus.digitalSignage.backstage.dao.ProProgressDao; import com.bonus.digitalSignage.backstage.entity.dto.QueryParamDto; import com.bonus.digitalSignage.backstage.entity.vo.ProProgressVo; @@ -7,11 +11,19 @@ import com.bonus.digitalSignage.backstage.service.ProProgressService; import com.bonus.digitalSignage.utils.ServerResponse; import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.Workbook; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; import javax.annotation.Resource; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.net.URLEncoder; import java.util.*; -import java.util.stream.Collectors; /** * @className:ProProgressServiceImpl @@ -27,15 +39,143 @@ public class ProProgressServiceImpl implements ProProgressService { @Resource(name = "ProProgressDao") private ProProgressDao dao; + @Resource(name = "ValidatorsUtils") + private ValidatorsUtils validatorsUtils; + @Override public ServerResponse getList(QueryParamDto dto) { List list = null; try { list = Optional.ofNullable(dao.getList(dto)).orElseGet(ArrayList::new); } catch (Exception e) { - log.error(e.toString(),e); + log.error(e.toString(), e); } PageInfo pageInfo = new PageInfo<>(list); return ServerResponse.createSuccessPage(pageInfo, dto.getPageNum(), dto.getPageSize()); } + + @Override + public void downloadExcel(QueryParamDto dto, HttpServletResponse response) { + try { + List list = list = Optional.ofNullable(dao.getList(dto)).orElseGet(ArrayList::new); + final Long[] num = {1L}; + list.forEach(vo -> { + vo.setId(num[0]); + num[0]++; + }); + ExportParams exportParams = new ExportParams("工程进度更新", "工程进度更新", ExcelType.XSSF); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, ProProgressVo.class, list); + response.setContentType("application/vnd.ms-excel"); + response.setHeader("content-disposition", "attachment;fileName=" + URLEncoder.encode("工程进度更新" + ".xlsx", "UTF-8")); + ServletOutputStream outputStream = response.getOutputStream(); + workbook.write(outputStream); + outputStream.close(); + workbook.close(); + } catch (Exception e) { + log.error(e.toString(), e); + } + } + + @Override + public ServerResponse detailQuery(QueryParamDto dto) { + try { + ProProgressVo.ProDetailVo vo = Optional.ofNullable(dao.detailQuery(dto)).orElseGet(ProProgressVo.ProDetailVo::new); + ProProgressVo.ProDetailVo vo2 = Optional.ofNullable(dao.getTowerProgress(dto)).orElseGet(ProProgressVo.ProDetailVo::new); + vo.setNum(vo2.getNum()); + vo.setNum2(vo2.getNum2()); + vo.setNum3(vo2.getNum3()); + vo.setNum4(vo2.getNum4()); + vo.setNum5(vo2.getNum5()); + vo.setNum6(vo2.getNum6()); + vo.setNum7(vo2.getNum7()); + return ServerResponse.createSuccess(vo); + } catch (Exception e) { + log.error(e.toString(), e); + return ServerResponse.createErroe("查询失败"); + } + } + + @Override + public ServerResponse getProProgress(QueryParamDto dto) { + List list = null; + try { + list = Optional.ofNullable(dao.getProProgress(dto)).orElseGet(ArrayList::new); + } catch (Exception e) { + log.error(e.toString(), e); + } + PageInfo pageInfo = new PageInfo<>(list); + return ServerResponse.createSuccessPage(pageInfo, dto.getPageNum(), dto.getPageSize()); + } + + + @Override + public ServerResponse updateRecord(QueryParamDto dto) { + List list = null; + try { + list = Optional.ofNullable(dao.getUpdateRecord(dto)).orElseGet(ArrayList::new); + } catch (Exception e) { + log.error(e.toString(), e); + } + return ServerResponse.createSuccess(list); + } + + @Override + public ServerResponse getGxData(QueryParamDto dto) { + List list = null; + try { + list = Optional.ofNullable(dao.getGxData(dto)).orElseGet(ArrayList::new); + } catch (Exception e) { + log.error(e.toString(), e); + } + return ServerResponse.createSuccess(list); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ServerResponse updateProgressData(ProProgressVo.UpdateRecordVo vo) { + try { + // 校验数据是否合法 + String validResult = validatorsUtils.valid(vo, ProProgressVo.UpdateRecordVo.Update.class); + if (StringUtils.isNotBlank(validResult)) { + return ServerResponse.createErroe(validResult); + } + // 查询杆塔进度是否被重复更新 + int result = dao.getIsRepeatUpdate(vo); + if (result > 0) { + return ServerResponse.createErroe("请勿重复更新杆塔数据"); + } + // 查询当前工程进度和杆塔数量 + List progressAndTowers = Optional.ofNullable(dao.getNowProProgress(vo)).orElseGet(ArrayList::new); + Long finishTowerNum = progressAndTowers.get(0); + Long towerNum = progressAndTowers.get(1); + // 计算更新后的进度 + double progress = handleProgress(finishTowerNum, towerNum, vo.getTowerIds().size()); + vo.setFinishProgress(progress); + // 更新杆塔进度、杆塔进度关系表、更新工程整体进度 + dao.addProgress(vo); + dao.addTowerProgress(vo); + dao.updateProProgress(vo); + return ServerResponse.createSuccess("操作成功"); + } catch (Exception e) { + log.error(e.toString(), e); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return ServerResponse.createErroe("操作失败"); + } + } + + /** + * 计算进度 + * @param nowProgress + * @param towerNum + * @param towerNum2 + * @return double + * @author cwchen + * @date 2025/4/22 14:57 + */ + public static double handleProgress(Long nowProgress, Long towerNum, int towerNum2) { + BigDecimal bigDecimal = BigDecimal.valueOf(nowProgress + (long) towerNum2).multiply(BigDecimal.valueOf(100)); + BigDecimal bigDecimal2 = BigDecimal.valueOf(towerNum * 7); + BigDecimal result = bigDecimal.divide(bigDecimal2, 2, RoundingMode.HALF_UP); + return result.doubleValue(); + } } diff --git a/src/main/java/com/bonus/digitalSignage/config/LoginPageConfig.java b/src/main/java/com/bonus/digitalSignage/config/LoginPageConfig.java index 97c043e..bc53763 100644 --- a/src/main/java/com/bonus/digitalSignage/config/LoginPageConfig.java +++ b/src/main/java/com/bonus/digitalSignage/config/LoginPageConfig.java @@ -12,6 +12,6 @@ public class LoginPageConfig { @RequestMapping("/") public RedirectView loginPage() { - return new RedirectView("/digitalSignage/login.html"); + return new RedirectView("/gzDigitalSignage/login.html"); } } diff --git a/src/main/resources/mappers/backstage/ProProgressMapper.xml b/src/main/resources/mappers/backstage/ProProgressMapper.xml index 479a4cb..fbf4f8f 100644 --- a/src/main/resources/mappers/backstage/ProProgressMapper.xml +++ b/src/main/resources/mappers/backstage/ProProgressMapper.xml @@ -2,15 +2,47 @@ + + INSERT INTO tb_progress + + pro_id, + progress_type, + update_desc, + finish_progress, + create_user_id, + + + #{id}, + #{progressType}, + #{updateDesc}, + #{finishProgress}, + #{createUserId} + + + + + INSERT INTO tb_tower_progress(tower_id,progress_id,progress_type,pro_id) VALUES + + ( + #{item},#{dataId},#{progressType},#{id} + ) + + + + + UPDATE tb_project SET pro_progress = #{finishProgress},update_user_id = #{updateUserId} + WHERE id = #{id} + + + + + + + + + + + + + + +