晨检,垃圾处理,自检,食堂,留样管理改进
This commit is contained in:
@@ -8,7 +8,10 @@ import com.zf.foodpurchase.common.core.domain.entity.WxAppUserVO;
|
||||
import com.zf.foodpurchase.common.core.page.TableDataInfo;
|
||||
import com.zf.foodpurchase.common.valigroud.AddGroup;
|
||||
import com.zf.foodpurchase.common.valigroud.UpdateGroup;
|
||||
import com.zf.foodpurchase.common.valigroud.WxAddGroup;
|
||||
import com.zf.foodpurchase.common.valigroud.WxUpdateGroup;
|
||||
import com.zf.foodpurchase.fdsafe.service.ICattenService;
|
||||
import com.zf.foodpurchase.fdsafe.utils.ArrayStringUtils;
|
||||
import com.zf.foodpurchase.fdsafe.vo.CattenVO;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@@ -42,22 +45,26 @@ public class WxAppCattenController extends BaseController {
|
||||
}
|
||||
|
||||
@PostMapping("/add")
|
||||
public AjaxResult add(@Validated(AddGroup.class) @RequestBody CattenVO cattenVO) {
|
||||
public AjaxResult add(@Validated(WxAddGroup.class) @RequestBody CattenVO cattenVO) {
|
||||
WxAppUserVO userVO = getWxAppLoginUser().getUser();
|
||||
if(userVO == null || !WxAPPAccountConstants.SCHOOL.equals(userVO.getAccountType())){
|
||||
return AjaxResult.error("非学校人员账号无法操作");
|
||||
}
|
||||
cattenVO.setSchoolId(userVO.getSchoolId());
|
||||
cattenVO.setLicenseImg(ArrayStringUtils.wxImgToArray(cattenVO.getWxLicenseImg()));
|
||||
cattenVO.setFoodLicenseImg(ArrayStringUtils.wxImgToArray(cattenVO.getWxFoodLicenseImg()));
|
||||
return cattenService.saveVO(cattenVO);
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
public AjaxResult update(@Validated(UpdateGroup.class) @RequestBody CattenVO cattenVO) {
|
||||
public AjaxResult update(@Validated(WxUpdateGroup.class) @RequestBody CattenVO cattenVO) {
|
||||
WxAppUserVO userVO = getWxAppLoginUser().getUser();
|
||||
if(userVO == null || !WxAPPAccountConstants.SCHOOL.equals(userVO.getAccountType())){
|
||||
return AjaxResult.error("非学校人员账号无法操作");
|
||||
}
|
||||
cattenVO.setSchoolId(userVO.getSchoolId());
|
||||
cattenVO.setLicenseImg(ArrayStringUtils.wxImgToArray(cattenVO.getWxLicenseImg()));
|
||||
cattenVO.setFoodLicenseImg(ArrayStringUtils.wxImgToArray(cattenVO.getWxFoodLicenseImg()));
|
||||
return cattenService.updateVO(cattenVO);
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,8 @@ import com.zf.foodpurchase.common.core.domain.entity.WxAppUserVO;
|
||||
import com.zf.foodpurchase.common.core.page.TableDataInfo;
|
||||
import com.zf.foodpurchase.common.valigroud.AddGroup;
|
||||
import com.zf.foodpurchase.common.valigroud.UpdateGroup;
|
||||
import com.zf.foodpurchase.common.valigroud.WxAddGroup;
|
||||
import com.zf.foodpurchase.common.valigroud.WxUpdateGroup;
|
||||
import com.zf.foodpurchase.fdsafe.service.IFoodSampleService;
|
||||
import com.zf.foodpurchase.fdsafe.utils.ArrayStringUtils;
|
||||
import com.zf.foodpurchase.fdsafe.vo.FoodSampleVO;
|
||||
@@ -43,7 +45,7 @@ public class WxAppFoodSampleController extends BaseController {
|
||||
}
|
||||
|
||||
@PostMapping("/add")
|
||||
public AjaxResult add(@RequestBody @Validated(AddGroup.class) FoodSampleVO foodSampleVO) {
|
||||
public AjaxResult add(@RequestBody @Validated(WxAddGroup.class) FoodSampleVO foodSampleVO) {
|
||||
WxAppUserVO userVO = getWxAppLoginUser().getUser();
|
||||
if(userVO == null || !WxAPPAccountConstants.SCHOOL.equals(userVO.getAccountType())){
|
||||
return AjaxResult.error("非学校人员账号无法操作");
|
||||
@@ -55,7 +57,7 @@ public class WxAppFoodSampleController extends BaseController {
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
public AjaxResult update(@RequestBody @Validated(UpdateGroup.class) FoodSampleVO foodSampleVO) {
|
||||
public AjaxResult update(@RequestBody @Validated(WxUpdateGroup.class) FoodSampleVO foodSampleVO) {
|
||||
WxAppUserVO userVO = getWxAppLoginUser().getUser();
|
||||
if(userVO == null || !WxAPPAccountConstants.SCHOOL.equals(userVO.getAccountType())){
|
||||
return AjaxResult.error("非学校人员账号无法操作");
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.zf.foodpurchase.common.valigroud.AddGroup;
|
||||
import com.zf.foodpurchase.common.valigroud.UpdateGroup;
|
||||
import com.zf.foodpurchase.fdsafe.service.IMorningInspectionContentService;
|
||||
import com.zf.foodpurchase.fdsafe.service.IMorningInspectionDetailService;
|
||||
import com.zf.foodpurchase.fdsafe.utils.ArrayStringUtils;
|
||||
import com.zf.foodpurchase.fdsafe.vo.MorningInspectionDetailVO;
|
||||
import com.zf.foodpurchase.fdsafe.vo.MorningTableHeaderVO;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -87,6 +88,7 @@ public class WxAppMorningInspectionDetailController extends BaseController {
|
||||
if(userVO == null || !WxAPPAccountConstants.SCHOOL.equals(userVO.getAccountType())){
|
||||
return AjaxResult.error("非学校人员账号无法操作");
|
||||
}
|
||||
morningInspectionDetailVO.setAbnormalImg(ArrayStringUtils.wxImgToArray(morningInspectionDetailVO.getWxAbnormalImg()));
|
||||
return morningInspectionDetailService.saveVO(morningInspectionDetailVO);
|
||||
}
|
||||
|
||||
@@ -96,6 +98,7 @@ public class WxAppMorningInspectionDetailController extends BaseController {
|
||||
if(userVO == null || !WxAPPAccountConstants.SCHOOL.equals(userVO.getAccountType())){
|
||||
return AjaxResult.error("非学校人员账号无法操作");
|
||||
}
|
||||
morningInspectionDetailVO.setAbnormalImg(ArrayStringUtils.wxImgToArray(morningInspectionDetailVO.getWxAbnormalImg()));
|
||||
return morningInspectionDetailService.updateVO(morningInspectionDetailVO);
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ public class WxAppRubbishDealController extends BaseController {
|
||||
}
|
||||
rubbishDealVO.setSchoolId(userVO.getSchoolId());
|
||||
// 图片处理
|
||||
rubbishDealVO.setDealImg(ArrayStringUtils.wxImgToArray(rubbishDealVO.getWxDealImage()));
|
||||
rubbishDealVO.setDealImg(ArrayStringUtils.wxImgToArray(rubbishDealVO.getWxDealImg()));
|
||||
return rubbishDealService.saveVO(rubbishDealVO);
|
||||
}
|
||||
|
||||
@@ -63,7 +63,7 @@ public class WxAppRubbishDealController extends BaseController {
|
||||
}
|
||||
rubbishDealVO.setSchoolId(userVO.getSchoolId());
|
||||
// 图片处理
|
||||
rubbishDealVO.setDealImg(ArrayStringUtils.wxImgToArray(rubbishDealVO.getWxDealImage()));
|
||||
rubbishDealVO.setDealImg(ArrayStringUtils.wxImgToArray(rubbishDealVO.getWxDealImg()));
|
||||
return rubbishDealService.updateVO(rubbishDealVO);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,10 +11,12 @@ import com.zf.foodpurchase.common.valigroud.UpdateGroup;
|
||||
import com.zf.foodpurchase.fdsafe.service.ISelfInspectionContentService;
|
||||
import com.zf.foodpurchase.fdsafe.service.ISelfInspectionDetailService;
|
||||
import com.zf.foodpurchase.fdsafe.service.ISelfInspectionRecordService;
|
||||
import com.zf.foodpurchase.fdsafe.utils.ArrayStringUtils;
|
||||
import com.zf.foodpurchase.fdsafe.vo.SelfInspectionContentVO;
|
||||
import com.zf.foodpurchase.fdsafe.vo.SelfInspectionDetailVO;
|
||||
import com.zf.foodpurchase.fdsafe.vo.SelfInspectionRecordVO;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@@ -71,6 +73,13 @@ public class WxAppSelfInspectionRecordController extends BaseController {
|
||||
}
|
||||
selfInspectionRecordVO.setSchoolId(userVO.getSchoolId());
|
||||
selfInspectionRecordVO.setEduId(userVO.getEduId());
|
||||
// 监督自查图片处理
|
||||
List<SelfInspectionDetailVO> selfInspectionDetailVOList = selfInspectionRecordVO.getSelfInspectionDetailVOList();
|
||||
if(!CollectionUtils.isEmpty(selfInspectionDetailVOList)){
|
||||
for (SelfInspectionDetailVO selfInspectionDetailVO : selfInspectionDetailVOList) {
|
||||
selfInspectionDetailVO.setAbnormalImg(ArrayStringUtils.wxImgToArray(selfInspectionDetailVO.getWxAbnormalImg()));
|
||||
}
|
||||
}
|
||||
return selfInspectionRecordService.saveVO(selfInspectionRecordVO);
|
||||
}
|
||||
|
||||
@@ -81,6 +90,13 @@ public class WxAppSelfInspectionRecordController extends BaseController {
|
||||
return AjaxResult.error("非学校人员账号无法操作");
|
||||
}
|
||||
selfInspectionRecordVO.setSchoolId(userVO.getSchoolId());
|
||||
// 监督自查图片处理
|
||||
List<SelfInspectionDetailVO> selfInspectionDetailVOList = selfInspectionRecordVO.getSelfInspectionDetailVOList();
|
||||
if(!CollectionUtils.isEmpty(selfInspectionDetailVOList)){
|
||||
for (SelfInspectionDetailVO selfInspectionDetailVO : selfInspectionDetailVOList) {
|
||||
selfInspectionDetailVO.setAbnormalImg(ArrayStringUtils.wxImgToArray(selfInspectionDetailVO.getWxAbnormalImg()));
|
||||
}
|
||||
}
|
||||
return selfInspectionRecordService.updateVO(selfInspectionRecordVO);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.zf.foodpurchase.common.valigroud;
|
||||
|
||||
/**
|
||||
* @author:lilj
|
||||
* @date:2025/4/10
|
||||
*/
|
||||
public interface WxAddGroup {
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.zf.foodpurchase.common.valigroud;
|
||||
|
||||
/**
|
||||
* @author:lilj
|
||||
* @date:2025/4/10
|
||||
*/
|
||||
public interface WxUpdateGroup {
|
||||
}
|
||||
@@ -32,6 +32,8 @@ public class CattenServiceImpl extends ServiceImpl<CattenMapper, Catten> impleme
|
||||
list.forEach(vo -> {
|
||||
vo.setLicenseImg(ArrayStringUtils.stringToArray(vo.getLicenseImgStr()));
|
||||
vo.setFoodLicenseImg(ArrayStringUtils.stringToArray(vo.getFoodLicenseImgStr()));
|
||||
vo.setWxLicenseImg(ArrayStringUtils.arrayToWxImgList(vo.getLicenseImg()));
|
||||
vo.setWxFoodLicenseImg(ArrayStringUtils.arrayToWxImgList(vo.getFoodLicenseImg()));
|
||||
});
|
||||
}
|
||||
return list;
|
||||
|
||||
@@ -49,6 +49,7 @@ public class MorningInspectionDetailServiceImpl extends ServiceImpl<MorningInspe
|
||||
if(!CollectionUtils.isEmpty(list)){
|
||||
list.forEach(item -> {
|
||||
item.setAbnormalImg(ArrayStringUtils.stringToArray(item.getAbnormalImgStr()));
|
||||
item.setWxAbnormalImg(ArrayStringUtils.arrayToWxImgList(item.getAbnormalImg()));
|
||||
});
|
||||
}
|
||||
return list;
|
||||
|
||||
@@ -39,7 +39,7 @@ public class RubbishDealServiceImpl extends ServiceImpl<RubbishDealMapper, Rubbi
|
||||
if(!CollectionUtils.isEmpty(list)){
|
||||
list.forEach(item ->{
|
||||
item.setDealImg(ArrayStringUtils.stringToArray(item.getDealImgStr()));
|
||||
item.setWxDealImage(ArrayStringUtils.arrayToWxImgList(item.getDealImg()));
|
||||
item.setWxDealImg(ArrayStringUtils.arrayToWxImgList(item.getDealImg()));
|
||||
});
|
||||
}
|
||||
return list;
|
||||
|
||||
@@ -66,6 +66,7 @@ public class SelfInspectionDetailServiceImpl extends ServiceImpl<SelfInspectionD
|
||||
if(!CollectionUtils.isEmpty(list)){
|
||||
for (SelfInspectionDetailVO selfInspectionDetailVO : list) {
|
||||
selfInspectionDetailVO.setAbnormalImg(ArrayStringUtils.stringToArray(selfInspectionDetailVO.getAbnormalImgStr()));
|
||||
selfInspectionDetailVO.setWxAbnormalImg(ArrayStringUtils.arrayToWxImgList(selfInspectionDetailVO.getAbnormalImg()));
|
||||
}
|
||||
}
|
||||
return list;
|
||||
|
||||
@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.zf.foodpurchase.common.annotation.Phone;
|
||||
import com.zf.foodpurchase.common.valigroud.AddGroup;
|
||||
import com.zf.foodpurchase.common.valigroud.UpdateGroup;
|
||||
import com.zf.foodpurchase.common.valigroud.WxAddGroup;
|
||||
import com.zf.foodpurchase.common.valigroud.WxUpdateGroup;
|
||||
import com.zf.foodpurchase.common.vo.CommonVO;
|
||||
import lombok.Data;
|
||||
|
||||
@@ -16,6 +18,7 @@ import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author:lilj
|
||||
@@ -28,13 +31,13 @@ public class CattenVO extends CommonVO implements Serializable {
|
||||
/**
|
||||
* 食堂id
|
||||
*/
|
||||
@NotNull(message = "食堂id不能为空", groups = { UpdateGroup.class})
|
||||
@NotNull(message = "食堂id不能为空", groups = { UpdateGroup.class, WxUpdateGroup.class})
|
||||
private Integer cattenId;
|
||||
|
||||
/**
|
||||
* 学校id
|
||||
*/
|
||||
@NotNull(message = "学校id不能为空", groups = { AddGroup.class, UpdateGroup.class})
|
||||
@NotNull(message = "学校id不能为空", groups = { AddGroup.class, UpdateGroup.class, WxAddGroup.class, WxUpdateGroup.class})
|
||||
private Integer schoolId;
|
||||
|
||||
private String schoolName;
|
||||
@@ -42,13 +45,13 @@ public class CattenVO extends CommonVO implements Serializable {
|
||||
/**
|
||||
* 食堂名称
|
||||
*/
|
||||
@NotBlank(message = "食堂名称不能为空", groups = { AddGroup.class, UpdateGroup.class})
|
||||
@NotBlank(message = "食堂名称不能为空", groups = { AddGroup.class, UpdateGroup.class, WxAddGroup.class, WxUpdateGroup.class})
|
||||
private String cattenName;
|
||||
|
||||
/**
|
||||
* 食堂类型:0 自主经营 1 委托经营
|
||||
*/
|
||||
@NotNull(message = "食堂类型不能为空", groups = { AddGroup.class, UpdateGroup.class})
|
||||
@NotNull(message = "食堂类型不能为空", groups = { AddGroup.class, UpdateGroup.class, WxAddGroup.class, WxUpdateGroup.class})
|
||||
private Integer cattenType;
|
||||
|
||||
/**
|
||||
@@ -59,22 +62,26 @@ public class CattenVO extends CommonVO implements Serializable {
|
||||
/**
|
||||
* 联系人电话
|
||||
*/
|
||||
@Phone(message = "联系人电话格式不正确")
|
||||
@Phone(message = "联系人电话格式不正确",groups = { AddGroup.class, UpdateGroup.class, WxAddGroup.class, WxUpdateGroup.class})
|
||||
private String concatPhone;
|
||||
|
||||
/**
|
||||
* 营业执照
|
||||
*/
|
||||
@NotEmpty(message = "营业执照图片不能为空", groups = { AddGroup.class, UpdateGroup.class})
|
||||
@NotEmpty(message = "营业执照图片不能为空", groups = { AddGroup.class, UpdateGroup.class, WxAddGroup.class, WxUpdateGroup.class})
|
||||
private String[] licenseImg;
|
||||
private String licenseImgStr;
|
||||
@NotEmpty(message = "营业执照图片不能为空", groups = { AddGroup.class, UpdateGroup.class, WxAddGroup.class, WxUpdateGroup.class})
|
||||
private List<WxImg> wxLicenseImg;
|
||||
|
||||
/**
|
||||
* 食品许可证
|
||||
*/
|
||||
@NotEmpty(message = "食品许可证图片不能为空", groups = { AddGroup.class, UpdateGroup.class})
|
||||
@NotEmpty(message = "食品许可证图片不能为空", groups = { AddGroup.class, UpdateGroup.class, WxAddGroup.class, WxUpdateGroup.class})
|
||||
private String[] foodLicenseImg;
|
||||
private String foodLicenseImgStr;
|
||||
@NotEmpty(message = "食品许可证图片不能为空", groups = { AddGroup.class, UpdateGroup.class, WxAddGroup.class, WxUpdateGroup.class})
|
||||
private List<WxImg> wxFoodLicenseImg;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
|
||||
@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.zf.foodpurchase.common.valigroud.AddGroup;
|
||||
import com.zf.foodpurchase.common.valigroud.UpdateGroup;
|
||||
import com.zf.foodpurchase.common.valigroud.WxAddGroup;
|
||||
import com.zf.foodpurchase.common.valigroud.WxUpdateGroup;
|
||||
import com.zf.foodpurchase.common.vo.CommonVO;
|
||||
import lombok.Data;
|
||||
|
||||
@@ -27,7 +29,7 @@ public class FoodSampleVO extends CommonVO implements Serializable {
|
||||
/**
|
||||
* 留样id
|
||||
*/
|
||||
@NotNull(message = "留样id不能为空", groups = {UpdateGroup.class})
|
||||
@NotNull(message = "留样id不能为空", groups = {UpdateGroup.class, WxUpdateGroup.class})
|
||||
private Long sampleId;
|
||||
|
||||
/**
|
||||
@@ -49,19 +51,19 @@ public class FoodSampleVO extends CommonVO implements Serializable {
|
||||
/**
|
||||
* 餐次
|
||||
*/
|
||||
@NotNull(message = "餐次不能为空", groups = {UpdateGroup.class, AddGroup.class})
|
||||
@NotNull(message = "餐次不能为空", groups = {UpdateGroup.class, AddGroup.class, WxUpdateGroup.class, WxAddGroup.class})
|
||||
private Integer mealType;
|
||||
|
||||
/**
|
||||
* 留样人员
|
||||
*/
|
||||
@NotBlank(message = "留样人员不能为空", groups = {UpdateGroup.class, AddGroup.class})
|
||||
@NotBlank(message = "留样人员不能为空", groups = {UpdateGroup.class, AddGroup.class, WxUpdateGroup.class, WxAddGroup.class})
|
||||
private String savePerson;
|
||||
|
||||
/**
|
||||
* 学校
|
||||
*/
|
||||
@NotNull(message = "学校id不能为空", groups = {UpdateGroup.class, AddGroup.class})
|
||||
@NotNull(message = "学校id不能为空", groups = {UpdateGroup.class, AddGroup.class, WxUpdateGroup.class, WxAddGroup.class})
|
||||
private Integer schoolId;
|
||||
|
||||
private String schoolName;
|
||||
@@ -72,12 +74,13 @@ public class FoodSampleVO extends CommonVO implements Serializable {
|
||||
@NotEmpty(message = "留样照片不能为空", groups = {UpdateGroup.class, AddGroup.class})
|
||||
private String[] saveImg;
|
||||
private String saveImgStr;
|
||||
@NotEmpty(message = "留样照片不能为空", groups = {WxUpdateGroup.class, WxAddGroup.class})
|
||||
private List<WxImg> wxSaveImage;
|
||||
|
||||
/**
|
||||
* 目测状态:0 异常 1 良好
|
||||
*/
|
||||
@NotNull(message = "目测状态不能为空", groups = {UpdateGroup.class, AddGroup.class})
|
||||
@NotNull(message = "目测状态不能为空", groups = {UpdateGroup.class, AddGroup.class, WxUpdateGroup.class, WxAddGroup.class})
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
|
||||
@@ -67,6 +67,8 @@ public class MorningInspectionDetailVO extends CommonVO implements Serializable
|
||||
|
||||
private String abnormalImgStr;
|
||||
|
||||
private List<WxImg> wxAbnormalImg;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
|
||||
@@ -76,7 +76,7 @@ public class RubbishDealVO extends CommonVO implements Serializable {
|
||||
*/
|
||||
private String[] dealImg;
|
||||
private String dealImgStr;
|
||||
private List<WxImg> wxDealImage;
|
||||
private List<WxImg> wxDealImg;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
|
||||
@@ -13,6 +13,7 @@ import org.springframework.format.annotation.DateTimeFormat;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author:lilj
|
||||
@@ -60,6 +61,8 @@ public class SelfInspectionDetailVO extends CommonVO implements Serializable {
|
||||
|
||||
private String abnormalImgStr;
|
||||
|
||||
private List<WxImg> wxAbnormalImg;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
|
||||
@@ -23,10 +23,10 @@
|
||||
and sc.school_name like concat('%',#{schoolName},'%')
|
||||
</if>
|
||||
<if test="beginTime !=null">
|
||||
AND date_format(sc.create_time,'%Y%m%d') <= date_format(#{beginTime},'%Y%m%d')
|
||||
AND date_format(sa.create_time,'%Y%m%d') >= date_format(#{beginTime},'%Y%m%d')
|
||||
</if>
|
||||
<if test="endTime !=null">
|
||||
AND date_format(sc.create_time,'%Y%m%d') >= date_format(#{endTime})
|
||||
AND date_format(sa.create_time,'%Y%m%d') <= date_format(#{endTime},'%Y%m%d')
|
||||
</if>
|
||||
</where>
|
||||
order by sa.create_time desc
|
||||
|
||||
Reference in New Issue
Block a user