图片修改,必填的进行非空校验;非必填的可以更新为空

This commit is contained in:
林华觞
2025-08-01 09:17:18 +08:00
parent bffa56a4b4
commit 2cc4a5aeb6
17 changed files with 116 additions and 36 deletions

View File

@@ -56,10 +56,14 @@ public class SupplierController extends BaseController {
List<WxImg> images = supplierVO.getWxLicenseImg(); List<WxImg> images = supplierVO.getWxLicenseImg();
if(!CollectionUtils.isEmpty( images)){ if(!CollectionUtils.isEmpty( images)){
supplierVO.setLicenseImg(ArrayStringUtils.wxImgToArray(images)); supplierVO.setLicenseImg(ArrayStringUtils.wxImgToArray(images));
}else{
supplierVO.setLicenseImg(null);
} }
images = supplierVO.getWxFoodLicenseImg(); images = supplierVO.getWxFoodLicenseImg();
if(!CollectionUtils.isEmpty( images)){ if(!CollectionUtils.isEmpty( images)){
supplierVO.setFoodLicenseImg(ArrayStringUtils.wxImgToArray(images)); supplierVO.setFoodLicenseImg(ArrayStringUtils.wxImgToArray(images));
}else{
supplierVO.setFoodLicenseImg(null);
} }
return supplierService.saveVO(supplierVO); return supplierService.saveVO(supplierVO);
} }
@@ -78,10 +82,14 @@ public class SupplierController extends BaseController {
List<WxImg> images = supplierVO.getWxLicenseImg(); List<WxImg> images = supplierVO.getWxLicenseImg();
if(!CollectionUtils.isEmpty( images)){ if(!CollectionUtils.isEmpty( images)){
supplierVO.setLicenseImg(ArrayStringUtils.wxImgToArray(images)); supplierVO.setLicenseImg(ArrayStringUtils.wxImgToArray(images));
}else{
supplierVO.setLicenseImg(null);
} }
images = supplierVO.getWxFoodLicenseImg(); images = supplierVO.getWxFoodLicenseImg();
if(!CollectionUtils.isEmpty( images)){ if(!CollectionUtils.isEmpty( images)){
supplierVO.setFoodLicenseImg(ArrayStringUtils.wxImgToArray(images)); supplierVO.setFoodLicenseImg(ArrayStringUtils.wxImgToArray(images));
}else{
supplierVO.setFoodLicenseImg(null);
} }
return supplierService.updateVO(supplierVO); return supplierService.updateVO(supplierVO);
} }

View File

@@ -58,6 +58,8 @@ public class AccompanyMealController extends BaseController {
List<WxImg> imageList = accompanyMealVO.getWxAccompanyImage(); List<WxImg> imageList = accompanyMealVO.getWxAccompanyImage();
if(!CollectionUtils.isEmpty(imageList)){ if(!CollectionUtils.isEmpty(imageList)){
accompanyMealVO.setAccompanyImage(ArrayStringUtils.wxImgToArray(accompanyMealVO.getWxAccompanyImage())); accompanyMealVO.setAccompanyImage(ArrayStringUtils.wxImgToArray(accompanyMealVO.getWxAccompanyImage()));
}else{
accompanyMealVO.setAccompanyImage(null);
} }
return accompanyMealService.saveVO(accompanyMealVO); return accompanyMealService.saveVO(accompanyMealVO);
} }
@@ -75,6 +77,8 @@ public class AccompanyMealController extends BaseController {
List<WxImg> imageList = accompanyMealVO.getWxAccompanyImage(); List<WxImg> imageList = accompanyMealVO.getWxAccompanyImage();
if(!CollectionUtils.isEmpty(imageList)){ if(!CollectionUtils.isEmpty(imageList)){
accompanyMealVO.setAccompanyImage(ArrayStringUtils.wxImgToArray(accompanyMealVO.getWxAccompanyImage())); accompanyMealVO.setAccompanyImage(ArrayStringUtils.wxImgToArray(accompanyMealVO.getWxAccompanyImage()));
}else{
accompanyMealVO.setAccompanyImage(null);
} }
return accompanyMealService.updateVO(accompanyMealVO); return accompanyMealService.updateVO(accompanyMealVO);
} }

View File

@@ -42,6 +42,12 @@ public class CattenController extends BaseController {
return getDataTable(list); return getDataTable(list);
} }
/**
* 营业执照,食品许可证图片不能为空
* @param cattenVO
* @return
*/
@PostMapping("/add") @PostMapping("/add")
public AjaxResult add(@Validated(AddGroup.class) @RequestBody CattenVO cattenVO) { public AjaxResult add(@Validated(AddGroup.class) @RequestBody CattenVO cattenVO) {
SysUser user = getLoginUser().getUser(); SysUser user = getLoginUser().getUser();
@@ -51,18 +57,29 @@ public class CattenController extends BaseController {
return error("非学校账号无法添加食堂"); return error("非学校账号无法添加食堂");
} }
} }
// 图片校验不能为空
// wxImage形式 // wxImage形式
List<WxImg> imageList = cattenVO.getWxLicenseImg(); List<WxImg> imageList = cattenVO.getWxLicenseImg();
if(!CollectionUtils.isEmpty(imageList)){ if(CollectionUtils.isEmpty(imageList)){
return error("营业执照图片不能为空");
}else{
cattenVO.setLicenseImg(ArrayStringUtils.wxImgToArray(cattenVO.getWxLicenseImg())); cattenVO.setLicenseImg(ArrayStringUtils.wxImgToArray(cattenVO.getWxLicenseImg()));
} }
imageList = cattenVO.getWxFoodLicenseImg(); imageList = cattenVO.getWxFoodLicenseImg();
if(!CollectionUtils.isEmpty(imageList)){ if(CollectionUtils.isEmpty(imageList)){
return error("食品许可证图片不能为空");
}else{
cattenVO.setFoodLicenseImg(ArrayStringUtils.wxImgToArray(cattenVO.getWxFoodLicenseImg())); cattenVO.setFoodLicenseImg(ArrayStringUtils.wxImgToArray(cattenVO.getWxFoodLicenseImg()));
} }
return cattenService.saveVO(cattenVO); return cattenService.saveVO(cattenVO);
} }
/**
* 营业执照,食品许可证图片不能为空
* @param cattenVO
* @return
*/
@PostMapping("/update") @PostMapping("/update")
public AjaxResult update(@Validated(UpdateGroup.class) @RequestBody CattenVO cattenVO) { public AjaxResult update(@Validated(UpdateGroup.class) @RequestBody CattenVO cattenVO) {
SysUser user = getLoginUser().getUser(); SysUser user = getLoginUser().getUser();
@@ -72,13 +89,19 @@ public class CattenController extends BaseController {
return error("非学校账号无法修改食堂信息"); return error("非学校账号无法修改食堂信息");
} }
} }
// 图片校验不能为空
// wxImage形式 // wxImage形式
List<WxImg> imageList = cattenVO.getWxLicenseImg(); List<WxImg> imageList = cattenVO.getWxLicenseImg();
if(!CollectionUtils.isEmpty(imageList)){ if(CollectionUtils.isEmpty(imageList)){
return error("营业执照图片不能为空");
}else{
cattenVO.setLicenseImg(ArrayStringUtils.wxImgToArray(cattenVO.getWxLicenseImg())); cattenVO.setLicenseImg(ArrayStringUtils.wxImgToArray(cattenVO.getWxLicenseImg()));
} }
imageList = cattenVO.getWxFoodLicenseImg(); imageList = cattenVO.getWxFoodLicenseImg();
if(!CollectionUtils.isEmpty(imageList)){ if(CollectionUtils.isEmpty(imageList)){
return error("食品许可证图片不能为空");
}else{
cattenVO.setFoodLicenseImg(ArrayStringUtils.wxImgToArray(cattenVO.getWxFoodLicenseImg())); cattenVO.setFoodLicenseImg(ArrayStringUtils.wxImgToArray(cattenVO.getWxFoodLicenseImg()));
} }
return cattenService.updateVO(cattenVO); return cattenService.updateVO(cattenVO);

View File

@@ -56,6 +56,8 @@ public class FoodSampleController extends BaseController {
List<WxImg> imageList = foodSampleVO.getWxSaveImg(); List<WxImg> imageList = foodSampleVO.getWxSaveImg();
if(!CollectionUtils.isEmpty(imageList)){ if(!CollectionUtils.isEmpty(imageList)){
foodSampleVO.setSaveImg(ArrayStringUtils.wxImgToArray(imageList)); foodSampleVO.setSaveImg(ArrayStringUtils.wxImgToArray(imageList));
}else{
return error("留样图片不能为空");
} }
return foodSampleService.saveVO(foodSampleVO); return foodSampleService.saveVO(foodSampleVO);
} }
@@ -73,6 +75,8 @@ public class FoodSampleController extends BaseController {
List<WxImg> imageList = foodSampleVO.getWxSaveImg(); List<WxImg> imageList = foodSampleVO.getWxSaveImg();
if(!CollectionUtils.isEmpty(imageList)){ if(!CollectionUtils.isEmpty(imageList)){
foodSampleVO.setSaveImg(ArrayStringUtils.wxImgToArray(imageList)); foodSampleVO.setSaveImg(ArrayStringUtils.wxImgToArray(imageList));
}else{
return error("留样图片不能为空");
} }
return foodSampleService.updateVO(foodSampleVO); return foodSampleService.updateVO(foodSampleVO);
} }

View File

@@ -95,6 +95,8 @@ public class MorningInspectionDetailController extends BaseController {
List<WxImg> images = morningInspectionDetailVO.getWxAbnormalImg(); List<WxImg> images = morningInspectionDetailVO.getWxAbnormalImg();
if(!CollectionUtils.isEmpty( images)){ if(!CollectionUtils.isEmpty( images)){
morningInspectionDetailVO.setAbnormalImg(ArrayStringUtils.wxImgToArray(images)); morningInspectionDetailVO.setAbnormalImg(ArrayStringUtils.wxImgToArray(images));
}else{
morningInspectionDetailVO.setAbnormalImg(null);
} }
return morningInspectionDetailService.saveVO(morningInspectionDetailVO); return morningInspectionDetailService.saveVO(morningInspectionDetailVO);
} }
@@ -112,6 +114,8 @@ public class MorningInspectionDetailController extends BaseController {
List<WxImg> images = morningInspectionDetailVO.getWxAbnormalImg(); List<WxImg> images = morningInspectionDetailVO.getWxAbnormalImg();
if(!CollectionUtils.isEmpty( images)){ if(!CollectionUtils.isEmpty( images)){
morningInspectionDetailVO.setAbnormalImg(ArrayStringUtils.wxImgToArray(images)); morningInspectionDetailVO.setAbnormalImg(ArrayStringUtils.wxImgToArray(images));
}else{
morningInspectionDetailVO.setAbnormalImg(null);
} }
return morningInspectionDetailService.updateVO(morningInspectionDetailVO); return morningInspectionDetailService.updateVO(morningInspectionDetailVO);
} }

View File

@@ -56,6 +56,8 @@ public class RubbishDealController extends BaseController {
List<WxImg> imageList = rubbishDealVO.getWxDealImg(); List<WxImg> imageList = rubbishDealVO.getWxDealImg();
if(!CollectionUtils.isEmpty(imageList)){ if(!CollectionUtils.isEmpty(imageList)){
rubbishDealVO.setDealImg(ArrayStringUtils.wxImgToArray(rubbishDealVO.getWxDealImg())); rubbishDealVO.setDealImg(ArrayStringUtils.wxImgToArray(rubbishDealVO.getWxDealImg()));
}else{
rubbishDealVO.setDealImg(null);
} }
return rubbishDealService.saveVO(rubbishDealVO); return rubbishDealService.saveVO(rubbishDealVO);
} }
@@ -73,6 +75,8 @@ public class RubbishDealController extends BaseController {
List<WxImg> imageList = rubbishDealVO.getWxDealImg(); List<WxImg> imageList = rubbishDealVO.getWxDealImg();
if(!CollectionUtils.isEmpty(imageList)){ if(!CollectionUtils.isEmpty(imageList)){
rubbishDealVO.setDealImg(ArrayStringUtils.wxImgToArray(rubbishDealVO.getWxDealImg())); rubbishDealVO.setDealImg(ArrayStringUtils.wxImgToArray(rubbishDealVO.getWxDealImg()));
}else{
rubbishDealVO.setDealImg(null);
} }
return rubbishDealService.updateVO(rubbishDealVO); return rubbishDealService.updateVO(rubbishDealVO);
} }

View File

@@ -61,6 +61,8 @@ public class SchoolStaffController extends BaseController {
List<WxImg> imageList = schoolStaffVO.getWxHealthCertImg(); List<WxImg> imageList = schoolStaffVO.getWxHealthCertImg();
if(!CollectionUtils.isEmpty(imageList)){ if(!CollectionUtils.isEmpty(imageList)){
schoolStaffVO.setHealthCertImg(ArrayStringUtils.wxImgToArray(schoolStaffVO.getWxHealthCertImg())); schoolStaffVO.setHealthCertImg(ArrayStringUtils.wxImgToArray(schoolStaffVO.getWxHealthCertImg()));
}else{
return error("健康证图片不能为空");
} }
return schoolStaffService.saveVO(schoolStaffVO); return schoolStaffService.saveVO(schoolStaffVO);
} }
@@ -78,6 +80,8 @@ public class SchoolStaffController extends BaseController {
List<WxImg> imageList = schoolStaffVO.getWxHealthCertImg(); List<WxImg> imageList = schoolStaffVO.getWxHealthCertImg();
if(!CollectionUtils.isEmpty(imageList)){ if(!CollectionUtils.isEmpty(imageList)){
schoolStaffVO.setHealthCertImg(ArrayStringUtils.wxImgToArray(schoolStaffVO.getWxHealthCertImg())); schoolStaffVO.setHealthCertImg(ArrayStringUtils.wxImgToArray(schoolStaffVO.getWxHealthCertImg()));
}else{
return error("健康证图片不能为空");
} }
return schoolStaffService.updateVO(schoolStaffVO); return schoolStaffService.updateVO(schoolStaffVO);
} }

View File

@@ -60,6 +60,8 @@ public class SelfInspectionRecordController extends BaseController {
List<WxImg> images = selfInspectionDetailVO.getWxAbnormalImg(); List<WxImg> images = selfInspectionDetailVO.getWxAbnormalImg();
if(!CollectionUtils.isEmpty( images)){ if(!CollectionUtils.isEmpty( images)){
selfInspectionDetailVO.setAbnormalImg(ArrayStringUtils.wxImgToArray(images)); selfInspectionDetailVO.setAbnormalImg(ArrayStringUtils.wxImgToArray(images));
}else{
selfInspectionDetailVO.setAbnormalImg(null);
} }
} }
} }
@@ -82,6 +84,8 @@ public class SelfInspectionRecordController extends BaseController {
List<WxImg> images = selfInspectionDetailVO.getWxAbnormalImg(); List<WxImg> images = selfInspectionDetailVO.getWxAbnormalImg();
if(!CollectionUtils.isEmpty( images)){ if(!CollectionUtils.isEmpty( images)){
selfInspectionDetailVO.setAbnormalImg(ArrayStringUtils.wxImgToArray(images)); selfInspectionDetailVO.setAbnormalImg(ArrayStringUtils.wxImgToArray(images));
}else{
selfInspectionDetailVO.setAbnormalImg(null);
} }
} }
} }

View File

@@ -67,6 +67,8 @@ public class SupplierDeliveryItemController extends BaseController {
List<WxImg> images = supplierDeliveryItemUpdateVO.getWxCheckReportImage(); List<WxImg> images = supplierDeliveryItemUpdateVO.getWxCheckReportImage();
if(!CollectionUtils.isEmpty( images)){ if(!CollectionUtils.isEmpty( images)){
supplierDeliveryItemUpdateVO.setCheckReportImage(ArrayStringUtils.wxImgToArray(images)); supplierDeliveryItemUpdateVO.setCheckReportImage(ArrayStringUtils.wxImgToArray(images));
}else{
supplierDeliveryItemUpdateVO.setCheckReportImage(null);
} }
return supplierDeliveryItemService.updateVO(supplierDeliveryItemUpdateVO); return supplierDeliveryItemService.updateVO(supplierDeliveryItemUpdateVO);
} }

View File

@@ -6,6 +6,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.exc.InvalidFormatException; import com.fasterxml.jackson.databind.exc.InvalidFormatException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.http.HttpMessage; import org.springframework.http.HttpMessage;
import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.AccessDeniedException;
@@ -24,6 +25,8 @@ import com.zf.foodpurchase.common.exception.ServiceException;
import com.zf.foodpurchase.common.utils.StringUtils; import com.zf.foodpurchase.common.utils.StringUtils;
import com.zf.foodpurchase.common.utils.html.EscapeUtil; import com.zf.foodpurchase.common.utils.html.EscapeUtil;
import java.sql.DataTruncation;
/** /**
* 全局异常处理器 * 全局异常处理器
* *
@@ -34,6 +37,31 @@ public class GlobalExceptionHandler
{ {
private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
/**
* JSON入参序列化异常HttpMessageNotReadableException
*/
/**
* 权限校验异常
*/
@ExceptionHandler(HttpMessageNotReadableException.class)
public AjaxResult handleHttpMessageNotReadableException(HttpMessageNotReadableException e, HttpServletRequest request)
{
String requestURI = request.getRequestURI();
log.error("请求地址'{}',JSON入参序列化异常'{}'", requestURI, e.getMessage());
return AjaxResult.error(HttpStatus.ERROR, "系统异常,请联系管理员");
}
/**
* 数据库异常处理:DataTruncation
*/
@ExceptionHandler(DataIntegrityViolationException.class)
public AjaxResult handleDataIntegrityViolationException(DataIntegrityViolationException e, HttpServletRequest request)
{
String requestURI = request.getRequestURI();
log.error("请求地址'{}',数据库异常'{}'", requestURI, e.getMessage());
return AjaxResult.error(HttpStatus.ERROR, "系统异常,请联系管理员");
}
/** /**
* 权限校验异常 * 权限校验异常
*/ */

View File

@@ -1,10 +1,8 @@
package com.zf.foodpurchase.fdsafe.entity; package com.zf.foodpurchase.fdsafe.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@@ -85,8 +83,9 @@ public class AccompanyMeal implements Serializable {
private String feedBack; private String feedBack;
/** /**
* 陪餐照片 * 陪餐照片: 为空时也会进行更新
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String accompanyImage; private String accompanyImage;
/** /**

View File

@@ -1,10 +1,8 @@
package com.zf.foodpurchase.fdsafe.entity; package com.zf.foodpurchase.fdsafe.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@@ -56,8 +54,9 @@ public class MorningInspectionDetail implements Serializable {
private String remark; private String remark;
/** /**
* 问题照片 * 问题照片:为null也修改
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String abnormalImg; private String abnormalImg;
/** /**

View File

@@ -1,10 +1,8 @@
package com.zf.foodpurchase.fdsafe.entity; package com.zf.foodpurchase.fdsafe.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@@ -64,8 +62,9 @@ public class RubbishDeal implements Serializable {
private String recycleCompany; private String recycleCompany;
/** /**
* 回收图片 * 回收图片,为空时也会更新
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String dealImg; private String dealImg;
/** /**

View File

@@ -1,10 +1,8 @@
package com.zf.foodpurchase.fdsafe.entity; package com.zf.foodpurchase.fdsafe.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@@ -53,8 +51,9 @@ public class SelfInspectionDetail implements Serializable {
private String remark; private String remark;
/** /**
* 问题图片 * 问题图片:为null也更新
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String abnormalImg; private String abnormalImg;
/** /**

View File

@@ -1,10 +1,8 @@
package com.zf.foodpurchase.fdsafe.entity; package com.zf.foodpurchase.fdsafe.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@@ -64,13 +62,15 @@ public class Supplier implements Serializable {
private String concatPhone; private String concatPhone;
/** /**
* 营业执照照片 * 营业执照照片:为null也进行更新
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String licenseImg; private String licenseImg;
/** /**
* 食品经营许可证照片 * 食品经营许可证照片:为null也进行更新
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String foodLicenseImg; private String foodLicenseImg;
/** /**

View File

@@ -1,10 +1,8 @@
package com.zf.foodpurchase.fdsafe.entity; package com.zf.foodpurchase.fdsafe.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@@ -64,8 +62,9 @@ public class SupplierDeliveryItem implements Serializable {
private String inImage; private String inImage;
/** /**
* 检测报告图片 * 检测报告图片:为null时也进行更新
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String checkReportImage; private String checkReportImage;
/** /**

View File

@@ -75,7 +75,7 @@ public class SupplierVO extends CommonVO implements Serializable {
* 联系电话 * 联系电话
*/ */
@NotBlank(message = "联系电话不能为空", groups = {UpdateGroup.class, AddGroup.class}) @NotBlank(message = "联系电话不能为空", groups = {UpdateGroup.class, AddGroup.class})
@Phone(message = "联系电话格式不正确") @Phone(message = "联系电话格式不正确", groups = {UpdateGroup.class, AddGroup.class})
private String concatPhone; private String concatPhone;
/** /**