From c7795eb09f3059f1a0310bc817e2fa0e9e64d29e Mon Sep 17 00:00:00 2001 From: whyclxw <810412026@qq.com> Date: 星期四, 26 六月 2025 21:15:01 +0800 Subject: [PATCH] Merge branch 'master' of http://118.89.139.230:10101/r/powerIntelligenceSystem --- src/main/java/com/whyc/pojo/web_site/WorkflowMain.java | 10 + src/main/java/com/whyc/util/CommonUtil.java | 2 src/main/java/com/whyc/mapper/DeviceSpareMapper.java | 2 src/main/java/com/whyc/service/DeviceSpareService.java | 164 ++++++++++++++++++++++++++++++-- src/main/java/com/whyc/schedule/AlarmInspectionSchedule.java | 2 src/main/resources/mapper/DeviceSpareMapper.xml | 6 + src/main/java/com/whyc/pojo/web_site/DeviceSpareLog.java | 9 + src/main/java/com/whyc/controller/DeviceSpareController.java | 13 ++ src/main/resources/excel_templates/template_device_spare.xlsx | 0 src/main/java/com/whyc/service/WorkflowMainService.java | 63 ++++++++++++ src/main/java/com/whyc/controller/WorkflowMainController.java | 12 ++ src/main/java/com/whyc/service/DeviceSpareLogService.java | 6 + 12 files changed, 269 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/whyc/controller/DeviceSpareController.java b/src/main/java/com/whyc/controller/DeviceSpareController.java index bda2800..b293fba 100644 --- a/src/main/java/com/whyc/controller/DeviceSpareController.java +++ b/src/main/java/com/whyc/controller/DeviceSpareController.java @@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; @@ -48,6 +49,12 @@ return service.addByExcel(file); } + @ApiOperation("excel瀵煎嚭") + @GetMapping("excelExport") + public void excelExport(HttpServletResponse response) { + service.excelExport(response); + } + @PostMapping("update") @ApiOperation("淇敼") @@ -55,6 +62,12 @@ return service.update(spare); } + @PostMapping("andOrChangePicture") + @ApiOperation("鏂板鎴栬�呮浛鎹㈠浘鐗�") + public Response andOrChangePicture(@RequestParam Integer id,@RequestParam MultipartFile file) throws IOException { + return service.andOrChangePicture(id,file); + } + @PostMapping("delete") @ApiOperation("鍒犻櫎") public Response delete(@RequestParam Integer id) { diff --git a/src/main/java/com/whyc/controller/WorkflowMainController.java b/src/main/java/com/whyc/controller/WorkflowMainController.java index a7a1fe2..6049e98 100644 --- a/src/main/java/com/whyc/controller/WorkflowMainController.java +++ b/src/main/java/com/whyc/controller/WorkflowMainController.java @@ -8,11 +8,15 @@ import com.whyc.service.WorkflowMainService; import com.whyc.util.ActionUtil; import com.whyc.util.CommonUtil; +import com.whyc.util.JsonUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.util.List; import java.util.Map; @RestController @@ -23,10 +27,16 @@ @Autowired private WorkflowMainService service; - @PostMapping("submit") + /*@PostMapping("submit") @ApiOperation(value = "鎻愪氦鍗曟嵁", notes = "浼犲弬:taskDesc,mainType,mainTypeCN,mainTypeEn,dealRoleId,processLevel") public Response<Integer> submit(@RequestBody WorkflowMain main){ return service.submit(main); + }*/ + @PostMapping("submit") + @ApiOperation(value = "鎻愪氦鍗曟嵁", notes = "") + public Response<Integer> submit(@RequestParam String mainJsonStr, @RequestPart(required = false) List<MultipartFile> fileList, @RequestPart(required = false) List<MultipartFile> picList) throws IOException { + WorkflowMain main = JsonUtil.getGson().fromJson(mainJsonStr, WorkflowMain.class); + return service.submit(main,fileList,picList); } diff --git a/src/main/java/com/whyc/mapper/DeviceSpareMapper.java b/src/main/java/com/whyc/mapper/DeviceSpareMapper.java index ddd3748..61d1c73 100644 --- a/src/main/java/com/whyc/mapper/DeviceSpareMapper.java +++ b/src/main/java/com/whyc/mapper/DeviceSpareMapper.java @@ -8,4 +8,6 @@ void outBound(List<DeviceSpare> spareList); + void updateQuantityAndPictureBatch(List<DeviceSpare> spareListUpdate); + } diff --git a/src/main/java/com/whyc/pojo/web_site/DeviceSpareLog.java b/src/main/java/com/whyc/pojo/web_site/DeviceSpareLog.java index 259823c..df8e216 100644 --- a/src/main/java/com/whyc/pojo/web_site/DeviceSpareLog.java +++ b/src/main/java/com/whyc/pojo/web_site/DeviceSpareLog.java @@ -25,4 +25,13 @@ private Date createTime; + public DeviceSpareLog(Integer deviceSpareId, Integer operationType, String operationDetail, Date createTime) { + this.deviceSpareId = deviceSpareId; + this.operationType = operationType; + this.operationDetail = operationDetail; + this.createTime = createTime; + } + + public DeviceSpareLog() { + } } diff --git a/src/main/java/com/whyc/pojo/web_site/WorkflowMain.java b/src/main/java/com/whyc/pojo/web_site/WorkflowMain.java index f385245..ace8692 100644 --- a/src/main/java/com/whyc/pojo/web_site/WorkflowMain.java +++ b/src/main/java/com/whyc/pojo/web_site/WorkflowMain.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.ToString; import org.apache.ibatis.type.Alias; +import org.springframework.web.multipart.MultipartFile; import java.util.Date; import java.util.List; @@ -68,16 +69,16 @@ @ApiModelProperty("宸ュ崟鐘舵��") private Integer status; /**闄勪欢鍚嶇О*/ - @ApiModelProperty("闄勪欢鍚嶇О") + @ApiModelProperty("闄勪欢鍚嶇О,澶氫釜鐢ㄩ�楀彿闅斿紑") private String fileName; /**闄勪欢鍦板潃*/ - @ApiModelProperty("闄勪欢鍦板潃") + @ApiModelProperty("闄勪欢鍦板潃,澶氫釜鐢ㄩ�楀彿闅斿紑") private String fileUrl; /**鍥剧墖鍚嶇О*/ - @ApiModelProperty("鍥剧墖鍚嶇О") + @ApiModelProperty("鍥剧墖鍚嶇О,澶氫釜鐢ㄩ�楀彿闅斿紑") private String picName; /**鍥剧墖鍦板潃*/ - @ApiModelProperty("鍥剧墖鍦板潃") + @ApiModelProperty("鍥剧墖鍦板潃,澶氫釜鐢ㄩ�楀彿闅斿紑") private String picUrl; /**褰掓。鎰忚*/ @ApiModelProperty("褰掓。鎰忚") @@ -101,4 +102,5 @@ @TableField(exist = false) private List<WorkflowDevice> deviceList; + } diff --git a/src/main/java/com/whyc/schedule/AlarmInspectionSchedule.java b/src/main/java/com/whyc/schedule/AlarmInspectionSchedule.java index a2e1373..4398de2 100644 --- a/src/main/java/com/whyc/schedule/AlarmInspectionSchedule.java +++ b/src/main/java/com/whyc/schedule/AlarmInspectionSchedule.java @@ -17,7 +17,7 @@ /** * 鏈変袱涓畾鏃朵换鍔�:1.鍛婅浜х敓,鍔犲叆鍒板贰妫�瀹炴椂琛�,2.鍛婅鏄惁娑堝け,鍚屾鍒板贰妫�瀹炴椂琛� */ -@EnableScheduling +//@EnableScheduling @Component public class AlarmInspectionSchedule { diff --git a/src/main/java/com/whyc/service/DeviceSpareLogService.java b/src/main/java/com/whyc/service/DeviceSpareLogService.java index 9e7ecca..a69417c 100644 --- a/src/main/java/com/whyc/service/DeviceSpareLogService.java +++ b/src/main/java/com/whyc/service/DeviceSpareLogService.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.Date; import java.util.List; @Service @@ -21,6 +22,11 @@ mapper.insert(deviceSpareLog); } + public void add(Integer deviceSpareId, Integer operationType, String operationDetail, Date createTime) { + DeviceSpareLog deviceSpareLog = new DeviceSpareLog(deviceSpareId, operationType, operationDetail, createTime); + mapper.insert(deviceSpareLog); + } + public Response<List<DeviceSpareLog>> getList(int deviceSpareId) { QueryWrapper<DeviceSpareLog> query = Wrappers.query(); query.eq("device_spare_id",deviceSpareId); diff --git a/src/main/java/com/whyc/service/DeviceSpareService.java b/src/main/java/com/whyc/service/DeviceSpareService.java index 72a0fea..94ada48 100644 --- a/src/main/java/com/whyc/service/DeviceSpareService.java +++ b/src/main/java/com/whyc/service/DeviceSpareService.java @@ -1,5 +1,8 @@ package com.whyc.service; +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.TemplateExportParams; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -13,17 +16,22 @@ import com.whyc.util.ThreadLocalUtil; import org.apache.commons.lang.StringUtils; import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.*; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.net.URLEncoder; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; @Service public class DeviceSpareService { @@ -66,10 +74,10 @@ if (file != null && file.size() > 0) { for (int i = 0; i < file.size(); i++) { MultipartFile multipartFile = file.get(i); - String fileName = multipartFile.getOriginalFilename(); + //String fileName = multipartFile.getOriginalFilename(); //灏唂ileName涓彲鑳藉瓨鍦ㄧ殑,鍘绘帀 - fileName = fileName.replace(",",""); - String filePath = fileDirPath + File.separator + timeFormat+"_"+fileName; + //fileName = fileName.replace(",",""); + String filePath = fileDirPath + File.separator + spare.getName()+"_"+spare.getModel()+"_"+spare.getVersion() + "_" + (i+1) + "_"+ timeFormat+".png"; multipartFile.transferTo(new File(filePath)); String split = "pis_file"+File.separator+"deviceSpare"; @@ -229,13 +237,143 @@ spare.setSupplier(supplier); spareList.add(spare); - //绗竷鍒椾负鍥剧墖 TODO 寰呭鐞� - /*Cell cell = row.getCell(7); - CellType cellType = cell.getCellType(); - System.out.println("-");*/ - } - addBatch(spareList); - return null; + } + + //绗竷鍒椾负鍥剧墖-娴姩寮忓浘鐗� + //鑾峰彇缁樺浘瀵硅薄涓殑鎵�鏈夊浘褰� + XSSFDrawing drawing = (XSSFDrawing) sheet.getDrawingPatriarch(); + if (drawing == null) { + drawing = (XSSFDrawing) sheet.createDrawingPatriarch(); + } + List<XSSFShape> shapes = drawing.getShapes(); + for (XSSFShape shape : shapes) { + if (shape instanceof XSSFPicture) { + XSSFPicture pic = (XSSFPicture) shape; + XSSFClientAnchor anchor = pic.getClientAnchor(); + //鑾峰彇鍥剧墖鎵�鍦ㄧ殑璧峰琛� + int rowIndex = anchor.getRow1(); + byte[] data = pic.getPictureData().getData(); + + DeviceSpare spare = spareList.get(rowIndex - 1); + //瀵瑰瓨鍌ㄨ矾寰勮繘琛屽畾涔� + Date now = new Date(); + String timeFormat = ThreadLocalUtil.format(ThreadLocalUtil.TIME_YYYY_MM_DD_HH_MM_SS_UNION, now); + String dirMonth = ThreadLocalUtil.format(ThreadLocalUtil.TIME_YYYY_MM, now); + String fileDirPath = CommonUtil.getRootFile() + "deviceSpare" + File.separator + dirMonth; + File fileDir = new File(fileDirPath); + //濡傛灉鏂囦欢澶逛笉瀛樺湪鍒欏垱寤� + if (!fileDir.exists()) { + fileDir.mkdirs(); + } + String filePath = fileDirPath + File.separator + spare.getName()+"_"+spare.getModel()+"_"+spare.getVersion() + "_"+ timeFormat+".png"; + + // 淇濆瓨鍥剧墖鍒版湰鍦� + try (FileOutputStream fos = new FileOutputStream(filePath)) { + fos.write(data); + } + String split = "pis_file"+File.separator+"deviceSpare"; + String picUrl = File.separator + filePath.substring(filePath.indexOf(split)); + spare.setPictureUrl(picUrl); + } + } + + //鏂板鍒楄〃 + List<DeviceSpare> spareListNew = new ArrayList<>(); + //鏇存柊鍒楄〃 + List<DeviceSpare> spareListUpdate = new ArrayList<>(); + //鏌ヨ搴撲腑鐨勬墍鏈夎澶囧櫒浠� + List<DeviceSpare> deviceSpareListInDB = mapper.selectList((Wrapper<DeviceSpare>) CommonUtil.nullObject); + for (DeviceSpare spare : spareList){ + boolean isExist = false; + for (DeviceSpare spareInDB : deviceSpareListInDB){ + if (spare.getName().equals(spareInDB.getName()) + && spare.getModel().equals(spareInDB.getModel()) + && spare.getVersion().equals(spareInDB.getVersion()) + && spare.getBrand().equals(spareInDB.getBrand()) + && spare.getType().equals(spareInDB.getType()) + && spare.getSupplier().equals(spareInDB.getSupplier()) + ){ + isExist = true; + spare.setId(spareInDB.getId()); + spare.setQuantity(spareInDB.getQuantity()+spare.getQuantity()); + if (spare.getPictureUrl() != null && spareInDB.getPictureUrl()!=null){ + spare.setPictureUrl(spareInDB.getPictureUrl()+","+spare.getPictureUrl()); + } + spareListUpdate.add(spare); + } + } + if(!isExist){ + //涓嶅瓨鍦ㄥ垯鏂板 + spareListNew.add(spare); + } + } + //鏇存柊 + if(spareListUpdate.size()>0) { + updateQuantityAndPictureBatch(spareListUpdate); + } + //鏂板 + if(spareListNew.size()>0) { + addBatch(spareListNew); + } + + return new Response().setII(1,"瀵煎叆瀹屾垚"); + } + + private void updateQuantityAndPictureBatch(List<DeviceSpare> spareListUpdate) { + mapper.updateQuantityAndPictureBatch(spareListUpdate); + } + + public void excelExport(HttpServletResponse response) { + //鏌ヨ鎵�鏈夌殑璁惧鍣ㄤ欢 + List<DeviceSpare> deviceSpareList = mapper.selectList((Wrapper<DeviceSpare>) CommonUtil.nullObject); + //鑾峰彇瀵煎嚭妯℃澘鍦板潃 + ClassPathResource classPathResource = new ClassPathResource("excel_templates/template_device_spare.xlsx"); + String path = classPathResource.getPath(); + TemplateExportParams templateExportParams1 = new TemplateExportParams(path,true); + // 鏋勫缓瀵煎嚭鏁版嵁妯″瀷 + Map<String, Object> map = new HashMap<>(); + map.put("deviceSpareList", deviceSpareList); // 鍋囪妯℃澘涓娇鐢� ${deviceSpareList} 浣滀负鍙橀噺鍚� + + Workbook wb = ExcelExportUtil.exportExcel(templateExportParams1, map); + try { + LocalDateTime now = LocalDateTime.now(); + String fileName = "缁翠慨绠$悊鍣ㄤ欢搴撳瓨_"+now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))+".xlsx"; + response.setContentType("application/vnd.ms-excel"); + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8")); + response.flushBuffer(); + wb.write(response.getOutputStream()); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + public Response andOrChangePicture(Integer id, MultipartFile file) throws IOException { + DeviceSpare spare = mapper.selectById(id); + //瀵瑰瓨鍌ㄨ矾寰勮繘琛屽畾涔� + Date now = new Date(); + String timeFormat = ThreadLocalUtil.format(ThreadLocalUtil.TIME_YYYY_MM_DD_HH_MM_SS_UNION, now); + String dirMonth = ThreadLocalUtil.format(ThreadLocalUtil.TIME_YYYY_MM, now); + String fileDirPath = CommonUtil.getRootFile() + "deviceSpare" + File.separator + dirMonth; + File fileDir = new File(fileDirPath); + //濡傛灉鏂囦欢澶逛笉瀛樺湪鍒欏垱寤� + if (!fileDir.exists()) { + fileDir.mkdirs(); + } + String filePath = fileDirPath + File.separator + spare.getName()+"_"+spare.getModel()+"_"+spare.getVersion() + "_"+ timeFormat+".png"; + + // 淇濆瓨鍥剧墖鍒版湰鍦� + file.transferTo(new File(filePath)); + String split = "pis_file"+File.separator+"deviceSpare"; + String picUrl = File.separator + filePath.substring(filePath.indexOf(split)); + //鏇存柊鍥剧墖 + UpdateWrapper<DeviceSpare> update = Wrappers.update(); + update.eq("id",id); + update.set("picture_url",picUrl); + mapper.update((DeviceSpare) CommonUtil.nullObject,update); + //璁板綍鍙樻洿 + deviceSpareLogService.add(id,2,"鏇存崲鍥剧墖",now); + return new Response().setII(1,"鏂板鎴栬�呮浛鎹㈠浘鐗囧畬鎴�"); } } diff --git a/src/main/java/com/whyc/service/WorkflowMainService.java b/src/main/java/com/whyc/service/WorkflowMainService.java index bed00c2..8f5a728 100644 --- a/src/main/java/com/whyc/service/WorkflowMainService.java +++ b/src/main/java/com/whyc/service/WorkflowMainService.java @@ -20,9 +20,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.ServletContext; +import java.io.File; +import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -244,7 +247,7 @@ */ @Transactional - public Response submit(WorkflowMain main){ + public Response submit(WorkflowMain main, List<MultipartFile> fileList, List<MultipartFile> picList) throws IOException { //1.鎻愪氦鍒板崟鎹鎵规祦绋� //濡傛灉瀛樺湪鍏宠仈鍗曟嵁id,棣栧厛鏍¢獙鎻愪氦鐨勬暟閲� Date now = new Date(); @@ -299,6 +302,64 @@ deviceList.get(i).setQuantityUnprocessed(deviceList.get(i).getQuantity()); } } + //濡傛灉瀛樺湪闄勪欢鍜屽浘鐗�,鍒欏瓨鍏ュ搴斿瓧娈� + //瀵瑰瓨鍌ㄨ矾寰勮繘琛屽畾涔� + String timeFormat = ThreadLocalUtil.format(ThreadLocalUtil.TIME_YYYY_MM_DD_HH_MM_SS_UNION, now); + String dirMonth = ThreadLocalUtil.format(ThreadLocalUtil.TIME_YYYY_MM, now); + String fileDirPath = CommonUtil.getRootFile() + "workflow" + File.separator + dirMonth; + File fileDir = new File(fileDirPath); + //濡傛灉鏂囦欢澶逛笉瀛樺湪鍒欏垱寤� + if (!fileDir.exists()) { + fileDir.mkdirs(); + } + StringBuilder fileUrlSb = new StringBuilder(); + StringBuilder fileNameSb = new StringBuilder(); + if (fileList != null && fileList.size() > 0) { + for (int i = 0; i < fileList.size(); i++) { + MultipartFile multipartFile = fileList.get(i); + String fileName = multipartFile.getOriginalFilename(); + //灏唂ileName涓彲鑳藉瓨鍦ㄧ殑,鍘绘帀 + fileName = fileName.replace(",",""); + String filePath = fileDirPath + File.separator + timeFormat+"_"+fileName; + + multipartFile.transferTo(new File(filePath)); + String split = "pis_file"+File.separator+"workflow"; + String fileUrl = File.separator + filePath.substring(filePath.indexOf(split)); + if(i == fileList.size()-1) { + fileUrlSb.append(fileUrl); + fileNameSb.append(fileName); + }else { + fileUrlSb.append(fileUrl).append(","); + fileNameSb.append(fileName).append(","); + } + } + } + main.setFileUrl(fileUrlSb.toString()); + main.setFileName(fileNameSb.toString()); + + StringBuilder picUrlSb = new StringBuilder(); + StringBuilder picNameSb = new StringBuilder(); + if (picList != null && picList.size() > 0) { + for (int i = 0; i < picList.size(); i++) { + MultipartFile multipartFile = picList.get(i); + String picName = multipartFile.getOriginalFilename(); + //灏唒icName涓彲鑳藉瓨鍦ㄧ殑,鍘绘帀 + picName = picName.replace(",",""); + String picPath = fileDirPath + File.separator + picName; + multipartFile.transferTo(new File(picPath)); + String split = "pis_file"+File.separator+"workflow"; + String picUrl = File.separator + picPath.substring(picPath.indexOf(split)); + if(i == picList.size()-1) { + picUrlSb.append(picUrl); + picNameSb.append(picName); + }else { + picUrlSb.append(picUrl).append(","); + picNameSb.append(picName).append(","); + } + } + } + main.setPicUrl(picUrlSb.toString()); + main.setPicName(picNameSb.toString()); add(main); //涓昏〃鍏宠仈鐨勭墿鏂欐彃鍏� for (WorkflowDevice device : deviceList) { diff --git a/src/main/java/com/whyc/util/CommonUtil.java b/src/main/java/com/whyc/util/CommonUtil.java index 26725ac..346a0b5 100644 --- a/src/main/java/com/whyc/util/CommonUtil.java +++ b/src/main/java/com/whyc/util/CommonUtil.java @@ -3,6 +3,7 @@ import com.whyc.constant.YamlProperties; import com.whyc.pojo.db_user.User; import com.whyc.service.UserLogService; +import org.apache.poi.ss.formula.functions.T; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; import org.springframework.beans.factory.annotation.Autowired; @@ -20,6 +21,7 @@ @Component public class CommonUtil { + public static Object nullObject = null; private static UserLogService userLogService; @Autowired diff --git a/src/main/resources/excel_templates/template_device_spare.xlsx b/src/main/resources/excel_templates/template_device_spare.xlsx new file mode 100644 index 0000000..d72e489 --- /dev/null +++ b/src/main/resources/excel_templates/template_device_spare.xlsx Binary files differ diff --git a/src/main/resources/mapper/DeviceSpareMapper.xml b/src/main/resources/mapper/DeviceSpareMapper.xml index 36a7fe5..761f7ea 100644 --- a/src/main/resources/mapper/DeviceSpareMapper.xml +++ b/src/main/resources/mapper/DeviceSpareMapper.xml @@ -13,4 +13,10 @@ and supplier = #{item.supplier} </foreach> </update> + <update id="updateQuantityAndPictureBatch"> + <foreach collection="list" item="item" separator=";"> + update web_site.tb_device_spare set quantity = #{item.quantity},picture_url = #{item.pictureUrl} + where id = #{item.id} + </foreach> + </update> </mapper> \ No newline at end of file -- Gitblit v1.9.1