定损驳回
This commit is contained in:
parent
af7f799433
commit
57f7bf5d16
|
|
@ -100,9 +100,9 @@ public class LossAssessmentController extends BaseController {
|
||||||
* 驳回退料--批量
|
* 驳回退料--批量
|
||||||
*/
|
*/
|
||||||
@ApiOperation(value = "驳回退料--批量")
|
@ApiOperation(value = "驳回退料--批量")
|
||||||
@DeleteMapping("/{ids}")
|
@PostMapping("/reject")
|
||||||
public AjaxResult rejectRepair(@PathVariable Long[] ids) {
|
public AjaxResult rejectRepair(@RequestBody RepairTask bean) {
|
||||||
return service.rejectRepair(Arrays.asList(ids));
|
return service.rejectRepair(bean);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,7 @@
|
||||||
package com.bonus.material.lossAssessment.mapper;
|
package com.bonus.material.lossAssessment.mapper;
|
||||||
|
|
||||||
import com.bonus.material.ma.domain.PartType;
|
import com.bonus.material.ma.domain.PartType;
|
||||||
import com.bonus.material.repair.domain.RepairApplyRecord;
|
import com.bonus.material.repair.domain.*;
|
||||||
import com.bonus.material.repair.domain.RepairPartDetails;
|
|
||||||
import com.bonus.material.repair.domain.RepairTask;
|
|
||||||
import com.bonus.material.repair.domain.RepairTaskDetails;
|
|
||||||
import com.bonus.material.repair.domain.vo.RepairDeviceVO;
|
import com.bonus.material.repair.domain.vo.RepairDeviceVO;
|
||||||
import com.bonus.material.task.domain.TmTask;
|
import com.bonus.material.task.domain.TmTask;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
@ -175,4 +172,81 @@ public interface LossAssessmentMapper {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
int updateStatus(Long taskId);
|
int updateStatus(Long taskId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询任务状态
|
||||||
|
* @param taskId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int selectTaskStatus(Long taskId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除任务
|
||||||
|
* @param taskId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int deleteTask(Long taskId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除repair_apply_details
|
||||||
|
* @param taskId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int deleteApplyDetailsByTaskId(Long taskId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除repair_apply_record
|
||||||
|
* @param taskId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int deleteRecordByTaskId(Long taskId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除repair_part_details
|
||||||
|
* @param taskId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int deletePartByTaskId(Long taskId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除repair_cost
|
||||||
|
* @param taskId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int deleteCostByTaskId(Long taskId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询repair_apply_details
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
RepairApplyDetails selectRepairApplyDetailsById(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除repair_apply_details
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int delDetailsById(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除repair_apply_record
|
||||||
|
* @param repairApplyDetails
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int delRecord(RepairApplyDetails repairApplyDetails);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除repair_part_details
|
||||||
|
* @param repairApplyDetails
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int delPart(RepairApplyDetails repairApplyDetails);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除repair_cost
|
||||||
|
* @param repairApplyDetails
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int delCost(RepairApplyDetails repairApplyDetails);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,10 +48,10 @@ public interface LossAssessmentService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 驳回至退料
|
* 驳回至退料
|
||||||
* @param taskList
|
* @param bean
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
AjaxResult rejectRepair(@NotNull List<Long> taskList);
|
AjaxResult rejectRepair(RepairTask bean);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取详情的详情
|
* 获取详情的详情
|
||||||
|
|
|
||||||
|
|
@ -8,15 +8,15 @@ import com.bonus.common.core.utils.StringUtils;
|
||||||
import com.bonus.common.core.web.domain.AjaxResult;
|
import com.bonus.common.core.web.domain.AjaxResult;
|
||||||
import com.bonus.common.security.utils.SecurityUtils;
|
import com.bonus.common.security.utils.SecurityUtils;
|
||||||
import com.bonus.material.back.domain.BackApplyInfo;
|
import com.bonus.material.back.domain.BackApplyInfo;
|
||||||
|
import com.bonus.material.back.domain.BackCheckDetails;
|
||||||
import com.bonus.material.back.mapper.BackApplyInfoMapper;
|
import com.bonus.material.back.mapper.BackApplyInfoMapper;
|
||||||
|
import com.bonus.material.back.mapper.BackCheckDetailsMapper;
|
||||||
import com.bonus.material.basic.mapper.BmFileInfoMapper;
|
import com.bonus.material.basic.mapper.BmFileInfoMapper;
|
||||||
import com.bonus.material.lossAssessment.mapper.LossAssessmentMapper;
|
import com.bonus.material.lossAssessment.mapper.LossAssessmentMapper;
|
||||||
import com.bonus.material.lossAssessment.service.LossAssessmentService;
|
import com.bonus.material.lossAssessment.service.LossAssessmentService;
|
||||||
import com.bonus.material.ma.domain.PartType;
|
import com.bonus.material.ma.domain.PartType;
|
||||||
import com.bonus.material.repair.domain.RepairApplyRecord;
|
import com.bonus.material.ma.mapper.MachineMapper;
|
||||||
import com.bonus.material.repair.domain.RepairPartDetails;
|
import com.bonus.material.repair.domain.*;
|
||||||
import com.bonus.material.repair.domain.RepairTask;
|
|
||||||
import com.bonus.material.repair.domain.RepairTaskDetails;
|
|
||||||
import com.bonus.material.repair.domain.vo.RepairDeviceSummaryVo;
|
import com.bonus.material.repair.domain.vo.RepairDeviceSummaryVo;
|
||||||
import com.bonus.material.repair.domain.vo.RepairDeviceVO;
|
import com.bonus.material.repair.domain.vo.RepairDeviceVO;
|
||||||
import com.bonus.material.settlement.mapper.SltAgreementInfoMapper;
|
import com.bonus.material.settlement.mapper.SltAgreementInfoMapper;
|
||||||
|
|
@ -55,6 +55,10 @@ public class LossAssessmentServiceImpl implements LossAssessmentService {
|
||||||
private BackApplyInfoMapper backApplyInfoMapper;
|
private BackApplyInfoMapper backApplyInfoMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private SltAgreementInfoMapper sltAgreementInfoMapper;
|
private SltAgreementInfoMapper sltAgreementInfoMapper;
|
||||||
|
@Resource
|
||||||
|
private BackCheckDetailsMapper backCheckDetailsMapper;
|
||||||
|
@Resource
|
||||||
|
private MachineMapper machineMapper;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -252,72 +256,91 @@ public class LossAssessmentServiceImpl implements LossAssessmentService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public AjaxResult rejectRepair(@NotNull List<Long> taskList) {
|
public AjaxResult rejectRepair(RepairTask bean) {
|
||||||
String res="";
|
String res="";
|
||||||
try {
|
try {
|
||||||
for (Long taskId : taskList) {
|
if (!CollectionUtils.isEmpty(bean.getTaskIds())) {
|
||||||
// 判断维修明细是否有已经维修的数据
|
for (Long taskId : bean.getTaskIds()) {
|
||||||
final int repairedScrapNumber = mapper.getRepairedScrapNumByTaskId(taskId);
|
//判断是否定损完成
|
||||||
if (0 >= repairedScrapNumber) {
|
int status = mapper.selectTaskStatus(taskId);
|
||||||
// 1.修改维修task状态为已驳回
|
final TmTask tmTask = mapper.selectTmTaskByTaskId(taskId);
|
||||||
mapper.updateTaskStatus(String.valueOf(taskId), RepairTaskStatusEnum.TASK_STATUS_REJECT.getStatus());
|
if (status<=0){
|
||||||
final TmTask tmTask = mapper.selectTmTaskByTaskId(taskId);
|
//驳回操作不可跨月操作
|
||||||
if (null != tmTask && null != tmTask.getPreTaskId()) {
|
if (!StringHelper.isNullOrEmptyString(String.valueOf(tmTask.getCreateTime()))) {
|
||||||
// 2.修改退料任务状态为被维修驳回
|
// 将 createTime 转换为 LocalDate
|
||||||
backApplyInfoMapper.updateTaskStatus(new BackApplyInfo()
|
LocalDate taskCreationDate = tmTask.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
||||||
.setTaskId(tmTask.getPreTaskId())
|
// 获取当前日期
|
||||||
.setTaskStatus(BackTaskStatusEnum.BACK_TASK_TO_REJECT.getStatus())
|
LocalDate today = LocalDate.now();
|
||||||
);
|
// 检查是否在同一月
|
||||||
// 3.退料的在用数量恢复 -- 2025.1.9 ruan修改 已弃用!!!
|
if (taskCreationDate.getYear() != today.getYear() || taskCreationDate.getMonth() != today.getMonth()) {
|
||||||
// backApplyInfoMapper.updateBackApplyDetailsTwo(tmTask.getPreTaskId());
|
throw new ServiceException("只可驳回本月任务");
|
||||||
// 3. 更新结算信息表
|
}
|
||||||
sltAgreementInfoMapper.backRejectSltCope(tmTask.getPreTaskId());
|
}
|
||||||
|
//1、清除任务
|
||||||
//驳回操作不可跨月操作
|
int deleteTask = mapper.deleteTask(taskId);
|
||||||
if (!StringHelper.isNullOrEmptyString(String.valueOf(tmTask.getCreateTime()))) {
|
if (deleteTask<0){
|
||||||
// 将 createTime 转换为 LocalDate
|
throw new ServiceException("任务驳回失败,请重试");
|
||||||
LocalDate taskCreationDate = tmTask.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
}
|
||||||
// 获取当前日期
|
if (tmTask.getPreTaskId()!=null){
|
||||||
LocalDate today = LocalDate.now();
|
// 2. 根据任务id查询前置任务数据详情
|
||||||
// 检查是否在同一月
|
BackApplyInfo info = backApplyInfoMapper.selectByTaskId(tmTask.getPreTaskId());
|
||||||
if (taskCreationDate.getYear() != today.getYear() || taskCreationDate.getMonth() != today.getMonth()) {
|
// 3. 查询back_check_details表数据
|
||||||
res="只可驳回本月任务";
|
BackCheckDetails backCheckDetails = new BackCheckDetails();
|
||||||
throw new ServiceException("只可驳回本月任务");
|
backCheckDetails.setParentId(info.getId());
|
||||||
|
List<BackCheckDetails> checkDetails = backCheckDetailsMapper.selectBackCheckDetailsList(backCheckDetails);
|
||||||
|
// 4. 更新结算信息表
|
||||||
|
int result = sltAgreementInfoMapper.backRejectSltCope(tmTask.getPreTaskId());
|
||||||
|
if (result < 1) {
|
||||||
|
throw new ServiceException("维修驳回失败,请联系管理员");
|
||||||
|
}
|
||||||
|
// 5. 对于编码设备,更改设备状态为在用
|
||||||
|
if (!CollectionUtils.isEmpty(checkDetails)) {
|
||||||
|
for (BackCheckDetails backCheckDetail : checkDetails) {
|
||||||
|
if (backCheckDetail.getMaId() != null) {
|
||||||
|
// 更新设备状态为在用
|
||||||
|
machineMapper.updateStatus(backCheckDetail.getMaId(), MaMachineStatusEnum.IN_USE.getStatus());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//6、删除定损数据
|
||||||
//查询是否有签名 根据退料编码查询back_apply_info表
|
int detailsRes = mapper.deleteApplyDetailsByTaskId(taskId);
|
||||||
BackApplyInfo backApplyInfo = backApplyInfoMapper.selectSignByTaskId(taskId);
|
int recordRes = mapper.deleteRecordByTaskId(taskId);
|
||||||
if (null != backApplyInfo){
|
int partRes = mapper.deletePartByTaskId(taskId);
|
||||||
if (!StringHelper.isNullOrEmptyString(backApplyInfo.getBackSignUrl()) || backApplyInfo.getDirectAuditBy()>0){
|
int costRes = mapper.deleteCostByTaskId(taskId);
|
||||||
res="该任务已有签名,不能驳回";
|
|
||||||
throw new ServiceException("该任务已有签名,不能驳回");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null == tmTask.getCode() || tmTask.getCode().isEmpty()) {
|
|
||||||
res="定损任务:" + taskId + "没有退料单号,系统异常!";
|
|
||||||
throw new ServiceException("定损任务:" + taskId + "没有退料单号,系统异常!");
|
|
||||||
}
|
|
||||||
// 4.更新退料明细状态 -- 2025.1.9 ruan修改 驳回时--退料明细直接删除
|
|
||||||
backApplyInfoMapper.removeBackApplyDetails(tmTask.getCode());
|
|
||||||
} else {
|
} else {
|
||||||
res="定损任务:" + taskId + "没有前置任务,不能驳回";
|
throw new ServiceException("定损任务没有前置任务,不能驳回");
|
||||||
throw new ServiceException("定损任务:" + taskId + "没有前置任务,不能驳回");
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
res="定损任务:" + taskId + "有已定损数据,不能驳回";
|
res="此任务已定损完成,不可驳回";
|
||||||
throw new ServiceException("定损任务:" + taskId + "有已定损数据,不能驳回");
|
return AjaxResult.error(res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (!CollectionUtils.isEmpty(bean.getIds())) {
|
||||||
|
RepairApplyDetails repairApplyDetails = null;
|
||||||
|
for (Long id : bean.getIds()) {
|
||||||
|
// 查询明细详情
|
||||||
|
repairApplyDetails = mapper.selectRepairApplyDetailsById(id);
|
||||||
|
if (repairApplyDetails != null) {
|
||||||
|
if (repairApplyDetails.getMaId()!=null){
|
||||||
|
machineMapper.updateStatus(repairApplyDetails.getMaId(), MaMachineStatusEnum.IN_USE.getStatus());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//驳回后直接清除该条定损记录
|
||||||
|
mapper.delDetailsById(id);
|
||||||
|
mapper.delRecord(repairApplyDetails);
|
||||||
|
mapper.delPart(repairApplyDetails);
|
||||||
|
mapper.delCost(repairApplyDetails);
|
||||||
|
// 更新结算信息表
|
||||||
|
int result = sltAgreementInfoMapper.backInUseNum(repairApplyDetails);
|
||||||
|
if (result < 1) {
|
||||||
|
throw new ServiceException("定损驳回失败,请联系管理员");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (final DataAccessException e) {
|
} catch (final DataAccessException e) {
|
||||||
log.error("定损任务驳回",e.getMessage());
|
log.error("定损任务驳回",e.getMessage());
|
||||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||||
if (!"".equals(res)){
|
return AjaxResult.error("定损任务驳回失败");
|
||||||
return AjaxResult.error(res);
|
|
||||||
} else {
|
|
||||||
return AjaxResult.error("驳回失败");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return AjaxResult.success("执行完成");
|
return AjaxResult.success("执行完成");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,26 @@
|
||||||
<result property="splitType" column="split_type" />
|
<result property="splitType" column="split_type" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap type="com.bonus.material.repair.domain.RepairApplyDetails" id="RepairApplyDetailsResult">
|
||||||
|
<result property="id" column="id" />
|
||||||
|
<result property="taskId" column="task_id" />
|
||||||
|
<result property="maId" column="ma_id" />
|
||||||
|
<result property="typeId" column="type_id" />
|
||||||
|
<result property="repairNum" column="repair_num" />
|
||||||
|
<result property="repairedNum" column="repaired_num" />
|
||||||
|
<result property="scrapNum" column="scrap_num" />
|
||||||
|
<result property="status" column="status" />
|
||||||
|
<result property="createBy" column="create_by" />
|
||||||
|
<result property="createTime" column="create_time" />
|
||||||
|
<result property="updateBy" column="update_by" />
|
||||||
|
<result property="updateTime" column="update_time" />
|
||||||
|
<result property="remark" column="remark" />
|
||||||
|
<result property="companyId" column="company_id" />
|
||||||
|
<result property="backId" column="back_id" />
|
||||||
|
<result property="repairer" column="repairer" />
|
||||||
|
<result property="preTaskId" column="pre_task_id" />
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
<sql id="selectTmTaskVo">
|
<sql id="selectTmTaskVo">
|
||||||
select task_id, pre_task_id, task_type, task_status, code, create_by, create_time,
|
select task_id, pre_task_id, task_type, task_status, code, create_by, create_time,
|
||||||
update_by, update_time, remark, company_id, month_order
|
update_by, update_time, remark, company_id, month_order
|
||||||
|
|
@ -192,11 +212,13 @@
|
||||||
update_time = NOW()
|
update_time = NOW()
|
||||||
where task_id = #{taskId}
|
where task_id = #{taskId}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<update id="updateIsDs">
|
<update id="updateIsDs">
|
||||||
update repair_apply_details
|
update repair_apply_details
|
||||||
set is_ds = 0
|
set is_ds = 0
|
||||||
where task_id = #{taskId}
|
where task_id = #{taskId}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<update id="updateStatus">
|
<update id="updateStatus">
|
||||||
update repair_apply_details
|
update repair_apply_details
|
||||||
set status = 1
|
set status = 1
|
||||||
|
|
@ -204,6 +226,43 @@
|
||||||
and is_ds = 1
|
and is_ds = 1
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
<delete id="deleteTask">
|
||||||
|
delete from tm_task where task_id = #{taskId}
|
||||||
|
</delete>
|
||||||
|
<delete id="deleteApplyDetailsByTaskId">
|
||||||
|
delete from repair_apply_details where task_id = #{taskId}
|
||||||
|
</delete>
|
||||||
|
<delete id="deleteRecordByTaskId">
|
||||||
|
delete from repair_apply_record where task_id = #{taskId}
|
||||||
|
</delete>
|
||||||
|
<delete id="deletePartByTaskId">
|
||||||
|
delete from repair_part_details where task_id = #{taskId}
|
||||||
|
</delete>
|
||||||
|
<delete id="deleteCostByTaskId">
|
||||||
|
delete from repair_cost where task_id = #{taskId}
|
||||||
|
</delete>
|
||||||
|
<delete id="delDetailsById">
|
||||||
|
delete from repair_apply_details where id = #{id}
|
||||||
|
</delete>
|
||||||
|
<delete id="delRecord">
|
||||||
|
delete from repair_apply_record where task_id = #{taskId} and type_id = #{typeId}
|
||||||
|
<if test="maId != null">
|
||||||
|
and ma_id = #{maId}
|
||||||
|
</if>
|
||||||
|
</delete>
|
||||||
|
<delete id="delPart">
|
||||||
|
delete from repair_part_details where task_id = #{taskId} and type_id = #{typeId}
|
||||||
|
<if test="maId != null">
|
||||||
|
and ma_id = #{maId}
|
||||||
|
</if>
|
||||||
|
</delete>
|
||||||
|
<delete id="delCost">
|
||||||
|
delete from repair_cost where task_id = #{taskId} and type_id = #{typeId}
|
||||||
|
<if test="maId != null">
|
||||||
|
and ma_id = #{maId}
|
||||||
|
</if>
|
||||||
|
</delete>
|
||||||
|
|
||||||
<select id="getLossAssessmentList" resultType="com.bonus.material.repair.domain.RepairTask">
|
<select id="getLossAssessmentList" resultType="com.bonus.material.repair.domain.RepairTask">
|
||||||
SELECT
|
SELECT
|
||||||
rd.task_id as taskId,
|
rd.task_id as taskId,
|
||||||
|
|
@ -440,6 +499,36 @@
|
||||||
mm.ma_code,
|
mm.ma_code,
|
||||||
mpt2.pa_id
|
mpt2.pa_id
|
||||||
</select>
|
</select>
|
||||||
|
<select id="selectTaskStatus" resultType="java.lang.Integer">
|
||||||
|
SELECT task_status as taskStatus
|
||||||
|
FROM tm_task
|
||||||
|
WHERE task_id = #{taskId}
|
||||||
|
</select>
|
||||||
|
<select id="selectRepairApplyDetailsById" parameterType="Long" resultMap="RepairApplyDetailsResult">
|
||||||
|
SELECT
|
||||||
|
rad.id,
|
||||||
|
rad.task_id,
|
||||||
|
rad.ma_id,
|
||||||
|
rad.type_id,
|
||||||
|
rad.repair_num,
|
||||||
|
rad.repaired_num,
|
||||||
|
rad.scrap_num,
|
||||||
|
rad.STATUS,
|
||||||
|
rad.create_by,
|
||||||
|
rad.create_time,
|
||||||
|
rad.update_by,
|
||||||
|
rad.update_time,
|
||||||
|
rad.remark,
|
||||||
|
rad.company_id,
|
||||||
|
rad.back_id,
|
||||||
|
rad.repairer,
|
||||||
|
tt.pre_task_id
|
||||||
|
FROM
|
||||||
|
repair_apply_details rad
|
||||||
|
LEFT JOIN tm_task tt on tt.task_id=rad.task_id
|
||||||
|
WHERE
|
||||||
|
id = #{id}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue