feat(module): 物资管理
添加物资管理 实现Excel批量导入
This commit is contained in:
parent
6fb4762af9
commit
a473018c48
@ -2,6 +2,7 @@ package com.zhyc.module.stock.controller;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
@ -19,6 +20,7 @@ import com.zhyc.module.stock.domain.WzMaterialsManagement;
|
|||||||
import com.zhyc.module.stock.service.IWzMaterialsManagementService;
|
import com.zhyc.module.stock.service.IWzMaterialsManagementService;
|
||||||
import com.zhyc.common.utils.poi.ExcelUtil;
|
import com.zhyc.common.utils.poi.ExcelUtil;
|
||||||
import com.zhyc.common.core.page.TableDataInfo;
|
import com.zhyc.common.core.page.TableDataInfo;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 物资管理Controller
|
* 物资管理Controller
|
||||||
@ -28,8 +30,7 @@ import com.zhyc.common.core.page.TableDataInfo;
|
|||||||
*/
|
*/
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/stock/management")
|
@RequestMapping("/stock/management")
|
||||||
public class WzMaterialsManagementController extends BaseController
|
public class WzMaterialsManagementController extends BaseController {
|
||||||
{
|
|
||||||
private final IWzMaterialsManagementService wzMaterialsManagementService;
|
private final IWzMaterialsManagementService wzMaterialsManagementService;
|
||||||
|
|
||||||
public WzMaterialsManagementController(IWzMaterialsManagementService wzMaterialsManagementService) {
|
public WzMaterialsManagementController(IWzMaterialsManagementService wzMaterialsManagementService) {
|
||||||
@ -41,8 +42,7 @@ public class WzMaterialsManagementController extends BaseController
|
|||||||
*/
|
*/
|
||||||
@PreAuthorize("@ss.hasPermi('stock:management:list')")
|
@PreAuthorize("@ss.hasPermi('stock:management:list')")
|
||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
public TableDataInfo list(WzMaterialsManagement wzMaterialsManagement)
|
public TableDataInfo list(WzMaterialsManagement wzMaterialsManagement) {
|
||||||
{
|
|
||||||
startPage();
|
startPage();
|
||||||
List<WzMaterialsManagement> list = wzMaterialsManagementService.selectWzMaterialsManagementList(wzMaterialsManagement);
|
List<WzMaterialsManagement> list = wzMaterialsManagementService.selectWzMaterialsManagementList(wzMaterialsManagement);
|
||||||
return getDataTable(list);
|
return getDataTable(list);
|
||||||
@ -54,8 +54,7 @@ public class WzMaterialsManagementController extends BaseController
|
|||||||
@PreAuthorize("@ss.hasPermi('stock:management:export')")
|
@PreAuthorize("@ss.hasPermi('stock:management:export')")
|
||||||
@Log(title = "物资管理", businessType = BusinessType.EXPORT)
|
@Log(title = "物资管理", businessType = BusinessType.EXPORT)
|
||||||
@PostMapping("/export")
|
@PostMapping("/export")
|
||||||
public void export(HttpServletResponse response, WzMaterialsManagement wzMaterialsManagement)
|
public void export(HttpServletResponse response, WzMaterialsManagement wzMaterialsManagement) {
|
||||||
{
|
|
||||||
List<WzMaterialsManagement> list = wzMaterialsManagementService.selectWzMaterialsManagementList(wzMaterialsManagement);
|
List<WzMaterialsManagement> list = wzMaterialsManagementService.selectWzMaterialsManagementList(wzMaterialsManagement);
|
||||||
ExcelUtil<WzMaterialsManagement> util = new ExcelUtil<>(WzMaterialsManagement.class);
|
ExcelUtil<WzMaterialsManagement> util = new ExcelUtil<>(WzMaterialsManagement.class);
|
||||||
util.exportExcel(response, list, "物资管理数据");
|
util.exportExcel(response, list, "物资管理数据");
|
||||||
@ -66,8 +65,7 @@ public class WzMaterialsManagementController extends BaseController
|
|||||||
*/
|
*/
|
||||||
@PreAuthorize("@ss.hasPermi('stock:management:query')")
|
@PreAuthorize("@ss.hasPermi('stock:management:query')")
|
||||||
@GetMapping(value = "/{materialManagementCode}")
|
@GetMapping(value = "/{materialManagementCode}")
|
||||||
public AjaxResult getInfo(@PathVariable("materialManagementCode") Long materialManagementCode)
|
public AjaxResult getInfo(@PathVariable("materialManagementCode") Long materialManagementCode) {
|
||||||
{
|
|
||||||
return success(wzMaterialsManagementService.selectWzMaterialsManagementByMaterialManagementCode(materialManagementCode));
|
return success(wzMaterialsManagementService.selectWzMaterialsManagementByMaterialManagementCode(materialManagementCode));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,8 +75,7 @@ public class WzMaterialsManagementController extends BaseController
|
|||||||
@PreAuthorize("@ss.hasPermi('stock:management:add')")
|
@PreAuthorize("@ss.hasPermi('stock:management:add')")
|
||||||
@Log(title = "物资管理", businessType = BusinessType.INSERT)
|
@Log(title = "物资管理", businessType = BusinessType.INSERT)
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public AjaxResult add(@RequestBody WzMaterialsManagement wzMaterialsManagement)
|
public AjaxResult add(@RequestBody WzMaterialsManagement wzMaterialsManagement) {
|
||||||
{
|
|
||||||
return toAjax(wzMaterialsManagementService.insertWzMaterialsManagement(wzMaterialsManagement));
|
return toAjax(wzMaterialsManagementService.insertWzMaterialsManagement(wzMaterialsManagement));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,8 +85,7 @@ public class WzMaterialsManagementController extends BaseController
|
|||||||
@PreAuthorize("@ss.hasPermi('stock:management:edit')")
|
@PreAuthorize("@ss.hasPermi('stock:management:edit')")
|
||||||
@Log(title = "物资管理", businessType = BusinessType.UPDATE)
|
@Log(title = "物资管理", businessType = BusinessType.UPDATE)
|
||||||
@PutMapping
|
@PutMapping
|
||||||
public AjaxResult edit(@RequestBody WzMaterialsManagement wzMaterialsManagement)
|
public AjaxResult edit(@RequestBody WzMaterialsManagement wzMaterialsManagement) {
|
||||||
{
|
|
||||||
return toAjax(wzMaterialsManagementService.updateWzMaterialsManagement(wzMaterialsManagement));
|
return toAjax(wzMaterialsManagementService.updateWzMaterialsManagement(wzMaterialsManagement));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,9 +94,23 @@ public class WzMaterialsManagementController extends BaseController
|
|||||||
*/
|
*/
|
||||||
@PreAuthorize("@ss.hasPermi('stock:management:remove')")
|
@PreAuthorize("@ss.hasPermi('stock:management:remove')")
|
||||||
@Log(title = "物资管理", businessType = BusinessType.DELETE)
|
@Log(title = "物资管理", businessType = BusinessType.DELETE)
|
||||||
@DeleteMapping("/{materialManagementCodes}")
|
@DeleteMapping("/{materialManagementCodes}")
|
||||||
public AjaxResult remove(@PathVariable Long[] materialManagementCodes)
|
public AjaxResult remove(@PathVariable Long[] materialManagementCodes) {
|
||||||
{
|
|
||||||
return toAjax(wzMaterialsManagementService.deleteWzMaterialsManagementByMaterialManagementCodes(materialManagementCodes));
|
return toAjax(wzMaterialsManagementService.deleteWzMaterialsManagementByMaterialManagementCodes(materialManagementCodes));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Log(title = "物资管理", businessType = BusinessType.IMPORT)
|
||||||
|
@PreAuthorize("@ss.hasPermi('stock:management:import')")
|
||||||
|
@PostMapping("/importData")
|
||||||
|
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception {
|
||||||
|
ExcelUtil<WzMaterialsManagement> util = new ExcelUtil<>(WzMaterialsManagement.class);
|
||||||
|
List<WzMaterialsManagement> stockInList = util.importExcel(file.getInputStream());
|
||||||
|
for (WzMaterialsManagement wzMaterialsManagement : stockInList) {
|
||||||
|
System.out.println(wzMaterialsManagement);
|
||||||
|
}
|
||||||
|
String operName = getUsername();
|
||||||
|
String message = wzMaterialsManagementService.importUser(stockInList, updateSupport, operName);
|
||||||
|
// String message = "OK We are testing";
|
||||||
|
return success(message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,6 @@ package com.zhyc.module.stock.controller;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import com.zhyc.common.core.domain.entity.SysUser;
|
|
||||||
import com.zhyc.module.stock.service.impl.WzStockInServiceImpl;
|
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
@ -113,7 +111,7 @@ public class WzStockInController extends BaseController
|
|||||||
@PostMapping("/importData")
|
@PostMapping("/importData")
|
||||||
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
|
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
|
||||||
{
|
{
|
||||||
ExcelUtil<WzStockIn> util = new ExcelUtil<WzStockIn>(WzStockIn.class);
|
ExcelUtil<WzStockIn> util = new ExcelUtil<>(WzStockIn.class);
|
||||||
List<WzStockIn> stockInList = util.importExcel(file.getInputStream());
|
List<WzStockIn> stockInList = util.importExcel(file.getInputStream());
|
||||||
stockInList.removeIf(wzStockIn -> wzStockIn.getDocDate() == null);
|
stockInList.removeIf(wzStockIn -> wzStockIn.getDocDate() == null);
|
||||||
String operName = getUsername();
|
String operName = getUsername();
|
||||||
|
@ -60,4 +60,12 @@ public interface WzMaterialsManagementMapper
|
|||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
int deleteWzMaterialsManagementByMaterialManagementCodes(Long[] materialManagementCodes);
|
int deleteWzMaterialsManagementByMaterialManagementCodes(Long[] materialManagementCodes);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 以物资编码获取记录
|
||||||
|
*
|
||||||
|
* @param materialID 物资编码
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
WzMaterialsManagement selectWzMaterialsManagementByMaterialID(String materialID);
|
||||||
}
|
}
|
||||||
|
@ -58,4 +58,14 @@ public interface IWzMaterialsManagementService
|
|||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
int deleteWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode);
|
int deleteWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入入库数据
|
||||||
|
*
|
||||||
|
* @param MaterialsManagementList 物资数据列表
|
||||||
|
* @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
|
||||||
|
* @param operName 操作用户
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
String importUser(List<WzMaterialsManagement> MaterialsManagementList, Boolean isUpdateSupport, String operName);
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package com.zhyc.module.stock.service;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.zhyc.common.core.domain.entity.SysUser;
|
|
||||||
import com.zhyc.module.stock.domain.WzStockIn;
|
import com.zhyc.module.stock.domain.WzStockIn;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -69,5 +68,5 @@ public interface IWzStockInService
|
|||||||
* @param operName 操作用户
|
* @param operName 操作用户
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
public String importUser(List<WzStockIn> StockInList, Boolean isUpdateSupport, String operName);
|
String importUser(List<WzStockIn> StockInList, Boolean isUpdateSupport, String operName);
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,13 @@ package com.zhyc.module.stock.service.impl;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.zhyc.common.exception.ServiceException;
|
||||||
|
import com.zhyc.common.utils.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import com.zhyc.module.stock.mapper.WzMaterialsManagementMapper;
|
import com.zhyc.module.stock.mapper.WzMaterialsManagementMapper;
|
||||||
import com.zhyc.module.stock.domain.WzMaterialsManagement;
|
import com.zhyc.module.stock.domain.WzMaterialsManagement;
|
||||||
import com.zhyc.module.stock.service.IWzMaterialsManagementService;
|
import com.zhyc.module.stock.service.IWzMaterialsManagementService;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 物资管理Service业务层处理
|
* 物资管理Service业务层处理
|
||||||
@ -14,8 +17,7 @@ import com.zhyc.module.stock.service.IWzMaterialsManagementService;
|
|||||||
* @date 2025-08-05
|
* @date 2025-08-05
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class WzMaterialsManagementServiceImpl implements IWzMaterialsManagementService
|
public class WzMaterialsManagementServiceImpl implements IWzMaterialsManagementService {
|
||||||
{
|
|
||||||
private final WzMaterialsManagementMapper wzMaterialsManagementMapper;
|
private final WzMaterialsManagementMapper wzMaterialsManagementMapper;
|
||||||
|
|
||||||
public WzMaterialsManagementServiceImpl(WzMaterialsManagementMapper wzMaterialsManagementMapper) {
|
public WzMaterialsManagementServiceImpl(WzMaterialsManagementMapper wzMaterialsManagementMapper) {
|
||||||
@ -29,8 +31,7 @@ public class WzMaterialsManagementServiceImpl implements IWzMaterialsManagementS
|
|||||||
* @return 物资管理
|
* @return 物资管理
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public WzMaterialsManagement selectWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode)
|
public WzMaterialsManagement selectWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode) {
|
||||||
{
|
|
||||||
return wzMaterialsManagementMapper.selectWzMaterialsManagementByMaterialManagementCode(materialManagementCode);
|
return wzMaterialsManagementMapper.selectWzMaterialsManagementByMaterialManagementCode(materialManagementCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,8 +42,7 @@ public class WzMaterialsManagementServiceImpl implements IWzMaterialsManagementS
|
|||||||
* @return 物资管理
|
* @return 物资管理
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<WzMaterialsManagement> selectWzMaterialsManagementList(WzMaterialsManagement wzMaterialsManagement)
|
public List<WzMaterialsManagement> selectWzMaterialsManagementList(WzMaterialsManagement wzMaterialsManagement) {
|
||||||
{
|
|
||||||
return wzMaterialsManagementMapper.selectWzMaterialsManagementList(wzMaterialsManagement);
|
return wzMaterialsManagementMapper.selectWzMaterialsManagementList(wzMaterialsManagement);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,8 +53,7 @@ public class WzMaterialsManagementServiceImpl implements IWzMaterialsManagementS
|
|||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int insertWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement)
|
public int insertWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement) {
|
||||||
{
|
|
||||||
return wzMaterialsManagementMapper.insertWzMaterialsManagement(wzMaterialsManagement);
|
return wzMaterialsManagementMapper.insertWzMaterialsManagement(wzMaterialsManagement);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,8 +64,7 @@ public class WzMaterialsManagementServiceImpl implements IWzMaterialsManagementS
|
|||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int updateWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement)
|
public int updateWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement) {
|
||||||
{
|
|
||||||
return wzMaterialsManagementMapper.updateWzMaterialsManagement(wzMaterialsManagement);
|
return wzMaterialsManagementMapper.updateWzMaterialsManagement(wzMaterialsManagement);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,8 +75,7 @@ public class WzMaterialsManagementServiceImpl implements IWzMaterialsManagementS
|
|||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int deleteWzMaterialsManagementByMaterialManagementCodes(Long[] materialManagementCodes)
|
public int deleteWzMaterialsManagementByMaterialManagementCodes(Long[] materialManagementCodes) {
|
||||||
{
|
|
||||||
return wzMaterialsManagementMapper.deleteWzMaterialsManagementByMaterialManagementCodes(materialManagementCodes);
|
return wzMaterialsManagementMapper.deleteWzMaterialsManagementByMaterialManagementCodes(materialManagementCodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,8 +86,47 @@ public class WzMaterialsManagementServiceImpl implements IWzMaterialsManagementS
|
|||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int deleteWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode)
|
public int deleteWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode) {
|
||||||
{
|
|
||||||
return wzMaterialsManagementMapper.deleteWzMaterialsManagementByMaterialManagementCode(materialManagementCode);
|
return wzMaterialsManagementMapper.deleteWzMaterialsManagementByMaterialManagementCode(materialManagementCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入用户数据
|
||||||
|
*
|
||||||
|
* @param MaterialsManagementList 物资数据列表
|
||||||
|
* @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
|
||||||
|
* @param operName 操作用户
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public String importUser(List<WzMaterialsManagement> MaterialsManagementList, Boolean isUpdateSupport, String operName) {
|
||||||
|
if (StringUtils.isNull(MaterialsManagementList) || MaterialsManagementList.isEmpty()) {
|
||||||
|
throw new ServiceException("导入用户数据不能为空!");
|
||||||
|
}
|
||||||
|
int successNum = 0;
|
||||||
|
int sameNum = 0;
|
||||||
|
StringBuilder successMsg = new StringBuilder();
|
||||||
|
StringBuilder failureMsg = new StringBuilder();
|
||||||
|
try {
|
||||||
|
for (WzMaterialsManagement wzMaterialsManagement : MaterialsManagementList) {
|
||||||
|
if (wzMaterialsManagement.getMaterialId() != null) {
|
||||||
|
WzMaterialsManagement isExist = wzMaterialsManagementMapper.selectWzMaterialsManagementByMaterialID(wzMaterialsManagement.getMaterialId());
|
||||||
|
// 存在则更新
|
||||||
|
if (isExist != null) {
|
||||||
|
sameNum++;
|
||||||
|
wzMaterialsManagementMapper.updateWzMaterialsManagement(wzMaterialsManagement);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int result = wzMaterialsManagementMapper.insertWzMaterialsManagement(wzMaterialsManagement);
|
||||||
|
if (result > 0) successNum++;
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
return failureMsg.append("导入出错:").append(e.getMessage()).toString();
|
||||||
|
}
|
||||||
|
successMsg.append("导入完成 : 导入 ").append(successNum).append(" 条\n更新 ").append(sameNum).append(" 条(已存在记录)");
|
||||||
|
return successMsg.toString();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<if test="expirationDate != null">expiration_date = #{expirationDate},</if>
|
<if test="expirationDate != null">expiration_date = #{expirationDate},</if>
|
||||||
<if test="expirationAlarm != null">expiration_alarm = #{expirationAlarm},</if>
|
<if test="expirationAlarm != null">expiration_alarm = #{expirationAlarm},</if>
|
||||||
</trim>
|
</trim>
|
||||||
where material_management_code = #{materialManagementCode}
|
where material_id = #{materialId}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<delete id="deleteWzMaterialsManagementByMaterialManagementCode" parameterType="Long">
|
<delete id="deleteWzMaterialsManagementByMaterialManagementCode" parameterType="Long">
|
||||||
@ -90,4 +90,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
#{materialManagementCode}
|
#{materialManagementCode}
|
||||||
</foreach>
|
</foreach>
|
||||||
</delete>
|
</delete>
|
||||||
|
|
||||||
|
<select id="selectWzMaterialsManagementByMaterialID" parameterType="String" resultMap="WzMaterialsManagementResult">
|
||||||
|
SELECT * FROM wz_materials_management WHERE material_id = #{materialID}
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
Loading…
x
Reference in New Issue
Block a user