审核模块相关接口修改0721

This commit is contained in:
2025-07-21 11:17:44 +08:00
parent 6c7f945d29
commit 39a92d61f3
10 changed files with 272 additions and 126 deletions

View File

@@ -160,5 +160,4 @@ public class RkInfoController extends BaseController
return toAjax(rkInfoService.refundMaterial(dto)); return toAjax(rkInfoService.refundMaterial(dto));
} }
} }

View File

@@ -36,17 +36,12 @@ public class StockOutDTO {
/** 领取项目描述*/ /** 领取项目描述*/
private String xmMsCk; private String xmMsCk;
/** 出库列表 */ /** 出库明细 */
private List<StockOutItemDTO> ckList; private List<StockOutItemDTO> ckList;
/** 发起人签字图 */
/** 审核签字图片(发起人签字) */
private String signatureUrl; private String signatureUrl;
/** 审核照片列表(可多张) */ /** 审批人ID */
private List<String> photoUrls;
/** 审批人ID用于记录签字流转 */
private String approverId; private String approverId;
} }

View File

@@ -8,10 +8,19 @@ import lombok.Data;
@Data @Data
public class StockOutItemDTO { public class StockOutItemDTO {
/** 出库记录 ID库存 ID */ /** 出库记录IDrk_info.id */
private Long id; private Long id;
/** 出库备注 */ /** 出库备注 */
private String ckRemark; private String ckRemark;
/** 库位码 */
private String pcode;
/** 托盘码 */
private String trayCode;
/** 现场照片(单张) */
private String photoUrl; // ✅ 一物一图绑定
} }

View File

@@ -1,5 +1,6 @@
package com.zg.project.wisdom.domain.vo; package com.zg.project.wisdom.domain.vo;
import com.zg.framework.aspectj.lang.annotation.Excel;
import com.zg.project.wisdom.domain.AuditSignature; import com.zg.project.wisdom.domain.AuditSignature;
import lombok.Data; import lombok.Data;
@@ -36,6 +37,14 @@ public class AuditSignatureReviewVO {
/** 是否当前记录1是0否 */ /** 是否当前记录1是0否 */
private String isCurrent; private String isCurrent;
private String ckType;
private String ckTypeName;
private String teamCode;
private String teamName;
/** 审核时间 */ /** 审核时间 */
private Date signTime; private Date signTime;

View File

@@ -85,7 +85,7 @@ public interface AuditSignatureMapper
/** /**
* 查询现场图片URL按入库ID * 查询现场图片URL按入库ID
*/ */
AuditSignature selectPhotoUrlByRkId(@Param("rkId") Long rkId); AuditSignature selectPhotoUrlByBillNo(@Param("billNo") String billNo);
/** /**
* 查询审批记录列表按主表ID * 查询审批记录列表按主表ID

View File

@@ -85,11 +85,6 @@ public interface RkInfoMapper
*/ */
List<String> selectSapNoByBillNo(String billNo); List<String> selectSapNoByBillNo(String billNo);
/**
* 根据单据编号删除入库单据
* @param billNo
*/
void deleteByBillNo(String billNo);
/** /**
@@ -187,4 +182,29 @@ public interface RkInfoMapper
* 根据入库单据编号查询入库单据 * 根据入库单据编号查询入库单据
*/ */
List<RkInfo> selectRkInfoListByBillNo(String billNo); List<RkInfo> selectRkInfoListByBillNo(String billNo);
/**
* 根据出库单据编号查询入库单据
*/
List<RkInfo> selectRkInfoListByBillNoCk(String billNo);
/**
* 删除入库单据
*/
void markDeleteByBillNo(RkInfo rk);
/**
* 删除出库单据
*/
void markDeleteByBillNoCk(RkInfo rk);
/**
* 删除入库单据
*/
void deleteByBillNo(String billNo);
/**
* 出库驳回时恢复单据表数据状态
*/
void revertRkInfoStatusByBillNoCk(RkInfo revert);
} }

View File

@@ -130,45 +130,84 @@ public class AuditSignatureServiceImpl implements IAuditSignatureService
throw new ServiceException("该记录已审核,不能重复操作"); throw new ServiceException("该记录已审核,不能重复操作");
} }
// 3. 更新审核状态 // 2.1 校验审核结果是否为空
audit.setAuditResult(audit.getAuditResult()); // 必须为 "1"(通过)或 "0"(驳回) if (StringUtils.isBlank(audit.getAuditResult())) {
audit.setApproverId(userId); // 设置审核人 throw new ServiceException("审核结果不能为空");
audit.setRemark(audit.getRemark()); // 设置审核意见
audit.setUpdateBy(userId);
audit.setUpdateTime(DateUtils.getNowDate());
audit.setApproverSignUrl(audit.getApproverSignUrl());
auditSignatureMapper.updateAuditSignature(audit);
RkInfo rk = new RkInfo();
rk.setBillNo(audit.getBillNo());
rk.setUpdateBy(userId);
rk.setUpdateTime(DateUtils.getNowDate());
if ("1".equals(audit.getAuditResult())) {
// 审核通过rk_info.status = 1驳回
rk.setStatus("1");
rk.setIsChuku("0");
// 获取该 bill_no 下所有 rk_info 记录
List<RkInfo> rkList = rkInfoMapper.selectRkInfoListByBillNo(audit.getBillNo());
// 提取所有非空的 gys_jh_id 并去重
Set<Long> jhIdSet = rkList.stream()
.map(RkInfo::getGysJhId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
// 批量更新对应供应计划的状态
for (Long jhId : jhIdSet) {
gysJhMapper.updateStatusById(jhId);
}
} else if ("0".equals(audit.getAuditResult())) {
// 审核驳回rk_info.status = 2已入库
rk.setStatus("2");
} }
rkInfoMapper.updateStatusByBillNo(rk); // ✅ 如果是驳回,设置当前记录 is_current = 0
if ("0".equals(audit.getAuditResult())) {
audit.setIsCurrent("0");
}
// 3. 更新审核记录本身
audit.setApproverId(userId);
audit.setUpdateBy(userId);
audit.setUpdateTime(DateUtils.getNowDate());
auditSignatureMapper.updateAuditSignature(audit);
// 4. 构建更新 rk_info 的状态记录(或删除记录)
RkInfo rk = new RkInfo();
rk.setUpdateBy(userId);
rk.setUpdateTime(DateUtils.getNowDate());
if ("0".equals(db.getBillType())) {
rk.setBillNo(db.getBillNo()); // 入库
} else if ("1".equals(db.getBillType())) {
rk.setBillNoCk(db.getBillNo()); // 出库
}
// 5. 处理审核结果
if ("1".equals(audit.getAuditResult())) {
rk.setStatus("1"); // 审核通过
if ("0".equals(db.getBillType())) {
rk.setIsChuku("0"); // 入库:已入库
} else if ("1".equals(db.getBillType())) {
rk.setIsChuku("1"); // 出库:已出库
}
// ✅ 如果是入库且通过,更新供应计划状态
if ("0".equals(db.getBillType())) {
List<RkInfo> rkList = rkInfoMapper.selectRkInfoListByBillNo(audit.getBillNo());
Set<Long> jhIdSet = rkList.stream()
.map(RkInfo::getGysJhId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
for (Long jhId : jhIdSet) {
gysJhMapper.updateStatusById(jhId);
}
}
// ✅ 更新 rk_info 状态
rkInfoMapper.updateStatusByBillNo(rk);
} else if ("0".equals(audit.getAuditResult())) {
rk.setStatus("2"); // 审核驳回
rk.setIsDelete("1"); // 逻辑删除
rk.setUpdateBy(userId);
rk.setUpdateTime(DateUtils.getNowDate());
// ✅ 调用统一逻辑删除方法
if ("0".equals(db.getBillType())) {
rk.setBillNo(db.getBillNo());
rkInfoMapper.markDeleteByBillNo(rk);
} else if ("1".equals(db.getBillType())) {
rk.setBillNoCk(db.getBillNo());
rkInfoMapper.markDeleteByBillNoCk(rk);
// ✅ 恢复入库状态
RkInfo revert = new RkInfo();
revert.setBillNoCk(db.getBillNo()); // 出库单号
revert.setStatus("1"); // 入库通过
revert.setIsChuku("0"); // 未出库
revert.setUpdateBy(userId);
revert.setUpdateTime(DateUtils.getNowDate());
rkInfoMapper.revertRkInfoStatusByBillNoCk(revert);
}
}
} }
@Override @Override
public List<AuditSignatureReviewVO> selectAuditSignatureReviewList(AuditSignature filter) { public List<AuditSignatureReviewVO> selectAuditSignatureReviewList(AuditSignature filter) {
@@ -186,7 +225,11 @@ public class AuditSignatureServiceImpl implements IAuditSignatureService
if (!billNoSet.isEmpty()) { if (!billNoSet.isEmpty()) {
List<RkInfo> rkInfoList = rkInfoMapper.selectOneForEachBillNo(new ArrayList<>(billNoSet)); List<RkInfo> rkInfoList = rkInfoMapper.selectOneForEachBillNo(new ArrayList<>(billNoSet));
rkInfoMap = rkInfoList.stream() rkInfoMap = rkInfoList.stream()
.collect(Collectors.toMap(RkInfo::getBillNo, Function.identity(), (a, b) -> a)); .collect(Collectors.toMap(
rk -> StringUtils.isNotBlank(rk.getBillNoCk()) ? rk.getBillNoCk() : rk.getBillNo(),
Function.identity(),
(a, b) -> a
));
} }
// 3. 构造返回结果列表 // 3. 构造返回结果列表
@@ -202,6 +245,8 @@ public class AuditSignatureServiceImpl implements IAuditSignatureService
vo.setCangkuName(rk.getCangkuName()); vo.setCangkuName(rk.getCangkuName());
vo.setWlTypeName(rk.getWlTypeName()); vo.setWlTypeName(rk.getWlTypeName());
vo.setLihuoYName(rk.getLihuoYName()); vo.setLihuoYName(rk.getLihuoYName());
vo.setCkTypeName(rk.getCkTypeName());
vo.setTeamName(rk.getTeamName());
vo.setLihuoY(rk.getLihuoY()); vo.setLihuoY(rk.getLihuoY());
} }

View File

@@ -96,7 +96,7 @@ public class RkInfoServiceImpl implements IRkInfoService
} }
// 查询现场图片 + 审核结果image_type = '1' // 查询现场图片 + 审核结果image_type = '1'
AuditSignature signature = auditSignatureMapper.selectPhotoUrlByRkId(info.getId()); AuditSignature signature = auditSignatureMapper.selectPhotoUrlByBillNo(info.getBillNo());
if (signature != null) { if (signature != null) {
info.setScenePhotoUrl(signature.getSignUrl()); info.setScenePhotoUrl(signature.getSignUrl());
info.setAuditResult(signature.getAuditResult()); info.setAuditResult(signature.getAuditResult());
@@ -467,7 +467,7 @@ public class RkInfoServiceImpl implements IRkInfoService
Date now = DateUtils.getNowDate(); Date now = DateUtils.getNowDate();
// Step 1: 判断是否需要审核 // Step 1: 判断是否需要审核
boolean needAudit = "1".equals(configService.selectConfigByKey("stock.audit.enabled")); boolean needAudit = "1".equals(configService.selectConfigByKey("rk.audit.enabled"));
// Step 2: 生成出库单据号 // Step 2: 生成出库单据号
String billNo = BillNoUtil.generateTodayBillNo("CK"); String billNo = BillNoUtil.generateTodayBillNo("CK");
@@ -475,86 +475,88 @@ public class RkInfoServiceImpl implements IRkInfoService
// Step 3: 批量更新 rk_info 出库字段 // Step 3: 批量更新 rk_info 出库字段
for (StockOutItemDTO item : dto.getCkList()) { for (StockOutItemDTO item : dto.getCkList()) {
RkInfo update = new RkInfo(); RkInfo update = new RkInfo();
update.setId(item.getId()); // 主键ID update.setId(item.getId());
update.setBillNoCk(billNo); // 出库单号 update.setBillNoCk(billNo);
update.setCkType(dto.getCkType()); // 出库类型 update.setCkType(dto.getCkType());
update.setTeamCode(dto.getTeamCode()); // 施工队编码 update.setTeamCode(dto.getTeamCode());
update.setLyTime(dto.getLyTime()); // 出库时间(领用时间) update.setLyTime(dto.getLyTime());
update.setCkLihuoY(dto.getCkLihuoY()); // 出库理货员 update.setCkLihuoY(dto.getCkLihuoY());
update.setCkRemark(item.getCkRemark()); // 出库备注 update.setCkRemark(item.getCkRemark());
update.setXmNoCk(dto.getXmNoCk()); // 项目编号 update.setXmNoCk(dto.getXmNoCk());
update.setXmMsCk(dto.getXmMsCk()); // 项目描述 update.setXmMsCk(dto.getXmMsCk());
update.setUpdateBy(userId); // 修改人 update.setUpdateBy(userId);
update.setUpdateTime(now); // 修改时间 update.setUpdateTime(now);
if ("JLCK".equals(dto.getCkType())) { if ("JLCK".equals(dto.getCkType())) {
update.setIsBorrowed("1"); // 是否借料 update.setIsBorrowed("1");
update.setBorrowTime(dto.getBorrowTime()); // 借用时间 update.setBorrowTime(dto.getBorrowTime());
update.setReturnTime(dto.getReturnTime()); // 归还时间 update.setReturnTime(dto.getReturnTime());
} }
if (needAudit) { if (needAudit) {
update.setStatus("3"); // 出库待审核 update.setStatus("3"); // 出库待审核
update.setIsChuku("0"); // 不可直接出库,等待审批 update.setIsChuku("2");
} else { } else {
update.setIsChuku("1"); // 审核关闭,直接出库 update.setIsChuku("1");
update.setStatus("1"); // 设置为审核通过 update.setStatus("1"); // 审核通过
} }
rkInfoMapper.updateById(update); rkInfoMapper.updateById(update);
} }
// Step 4: 如果启审核,写入签字记录 // Step 4: 如果启审核,写入签字记录
if (needAudit) { if (needAudit) {
List<AuditSignature> recordList = new ArrayList<>(); List<AuditSignature> recordList = new ArrayList<>();
// === 判断是否是重新提交(存在发起人记录) === // 先检查是否已有发起人记录(逻辑规范化)
boolean hasOldSign = auditSignatureMapper.existsCurrentSigner(billNo, "0"); boolean hasOldSign = auditSignatureMapper.existsCurrentSigner(billNo, "0");
if (hasOldSign) { if (hasOldSign) {
auditSignatureMapper.updateIsCurrentToZero(billNo, "0"); // 标记旧记录为历史 auditSignatureMapper.updateIsCurrentToZero(billNo, "0");
} }
// === 发起人签字记录 === // ✅ 插入发起人签字记录(无论是否有签字图)
AuditSignature sign = new AuditSignature(); AuditSignature sign = new AuditSignature();
sign.setBillNo(billNo); // 单据号(出库单号) sign.setBillNo(billNo);
sign.setBillType("1"); // 单据类型1=出库 sign.setBillType("1"); // 出库
sign.setSignerId(userId); // 签字人ID发起人 sign.setSignerId(userId);
sign.setSignerRole("0"); // 角色0=发起人 sign.setSignerRole("0"); // 发起人
sign.setSignUrl(dto.getSignatureUrl()); // 签字图 URL sign.setSignUrl(dto.getSignatureUrl()); // 允许为空
sign.setSignTime(now); // 签字时间 sign.setImageType("0"); // 签字
sign.setImageType("0"); // 图片类型0=签字图 sign.setSignTime(now);
sign.setApproverId(dto.getApproverId()); // 审批人ID sign.setAuditResult("2");
sign.setIsCurrent("1"); // 当前记录 sign.setApproverId(dto.getApproverId());
sign.setIsDelete("0"); // 未删除 sign.setIsCurrent("1");
sign.setCreateBy(userId); // 创建人 sign.setIsDelete("0");
sign.setCreateTime(now); // 创建时间 sign.setCreateBy(userId);
sign.setCreateTime(now);
recordList.add(sign); recordList.add(sign);
// === 多张现场照片记录 === // ✅ 插入每条出库明细的现场拍照记录photoUrl不为空才插
if (dto.getPhotoUrls() != null) { for (StockOutItemDTO item : dto.getCkList()) {
for (String url : dto.getPhotoUrls()) { if (StringUtils.isBlank(item.getPhotoUrl())) continue;
if (url == null || url.trim().isEmpty()) continue;
AuditSignature photo = new AuditSignature(); AuditSignature photo = new AuditSignature();
photo.setBillNo(billNo); // 单据号 photo.setBillNo(billNo);
photo.setBillType("1"); // 出库 photo.setBillType("1");
photo.setSignerId(userId); // 拍照人 photo.setSignerId(userId);
photo.setSignerRole("2"); // 角色2=拍照人 photo.setSignerRole("2"); // 拍照人
photo.setSignUrl(url); // 照片URL photo.setSignUrl(item.getPhotoUrl());
photo.setImageType("1"); // 图片类型1=照片 photo.setImageType("1"); // 现场图
photo.setSignTime(now); // 拍照时间 photo.setSignTime(now);
photo.setApproverId(dto.getApproverId()); // 审批人ID photo.setApproverId(dto.getApproverId());
photo.setIsCurrent("1"); // 当前记录 photo.setIsCurrent("1");
photo.setIsDelete("0"); // 未删除 photo.setAuditResult("2");
photo.setCreateBy(userId); // 创建人 photo.setIsDelete("0");
photo.setCreateTime(now); // 创建时间 photo.setCreateBy(userId);
recordList.add(photo); photo.setCreateTime(now);
} photo.setRkId(item.getId());
photo.setPcode(item.getPcode());
photo.setTrayCode(item.getTrayCode());
recordList.add(photo);
} }
if (!recordList.isEmpty()) { if (!recordList.isEmpty()) {
auditSignatureMapper.batchInsert(recordList); // 批量插入签字记录 auditSignatureMapper.batchInsert(recordList);
} }
} }

View File

@@ -91,13 +91,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND is_delete = '0' AND is_delete = '0'
</select> </select>
<select id="selectPhotoUrlByRkId" <select id="selectPhotoUrlByBillNo"
resultMap="AuditSignatureResult" resultMap="AuditSignatureResult"
parameterType="java.lang.Long"> parameterType="java.lang.String">
SELECT sign_url, audit_result SELECT sign_url, audit_result
FROM audit_signature FROM audit_signature
WHERE is_delete = '0' WHERE is_delete = '0'
AND rk_id = #{rkId} AND bill_no = #{billNo}
AND image_type = '1' AND image_type = '1'
ORDER BY create_time DESC ORDER BY create_time DESC
LIMIT 1 LIMIT 1
@@ -177,7 +177,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
is_delete, is_delete,
create_by, create_by,
create_time, create_time,
rk_id rk_id,
pcode,
tray_code
) )
VALUES VALUES
<foreach collection="list" item="item" separator=","> <foreach collection="list" item="item" separator=",">
@@ -195,7 +197,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{item.isDelete}, #{item.isDelete},
#{item.createBy}, #{item.createBy},
#{item.createTime}, #{item.createTime},
#{item.rkId} #{item.rkId},
#{item.pcode},
#{item.trayCode}
) )
</foreach> </foreach>
</insert> </insert>
@@ -209,6 +213,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateBy != null">update_by = #{updateBy},</if> <if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if> <if test="updateTime != null">update_time = #{updateTime},</if>
<if test="remark != null">remark = #{remark},</if> <if test="remark != null">remark = #{remark},</if>
<if test="isCurrent != null">is_current = #{isCurrent},</if>
</set> </set>
WHERE bill_no = #{billNo} WHERE bill_no = #{billNo}
AND is_current = '1' AND is_current = '1'

View File

@@ -142,9 +142,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
) )
</insert> </insert>
<delete id="deleteByBillNo">
DELETE FROM rk_info WHERE bill_no = #{billNo}
</delete>
<update id="cancelStockOut"> <update id="cancelStockOut">
UPDATE rk_info UPDATE rk_info
@@ -160,6 +157,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
update_time = NOW() update_time = NOW()
WHERE bill_no_ck = #{billNoCk} WHERE bill_no_ck = #{billNoCk}
</update> </update>
<delete id="deleteByBillNo">
DELETE FROM rk_info
WHERE bill_no = #{billNo}
</delete>
<select id="selectRkInfoList" parameterType="RkInfo" resultMap="RkInfoResult"> <select id="selectRkInfoList" parameterType="RkInfo" resultMap="RkInfoResult">
<include refid="selectRkInfoVo"/> <include refid="selectRkInfoVo"/>
@@ -350,25 +351,38 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectOneForEachBillNo" parameterType="java.util.List" resultType="com.zg.project.wisdom.domain.RkInfo"> <select id="selectOneForEachBillNo" parameterType="java.util.List" resultType="com.zg.project.wisdom.domain.RkInfo">
SELECT SELECT
r.bill_no AS billNo, COALESCE(r.bill_no_ck, r.bill_no) AS billNo,
MAX(r.lihuo_y) AS lihuoY, MAX(r.lihuo_y) AS lihuoY,
MAX(u.user_name) AS lihuoYName, MAX(u.user_name) AS lihuoYName,
MAX(rkType.type_name) AS rkTypeName, MAX(rkType.type_name) AS rkTypeName,
MAX(cangku.warehouse_name) AS cangkuName, MAX(cangku.warehouse_name) AS cangkuName,
MAX(wlType.type_name) AS wlTypeName MAX(wlType.type_name) AS wlTypeName,
MAX(ckType.type_name) AS ckTypeName,
MAX(team.team_name) AS teamName
FROM rk_info r FROM rk_info r
LEFT JOIN stock_in_type rkType ON r.rk_type = rkType.type_code LEFT JOIN stock_in_type rkType ON r.rk_type = rkType.type_code
LEFT JOIN stock_out_type ckType ON r.ck_type = ckType.type_code
LEFT JOIN warehouse_info cangku ON r.cangku = cangku.warehouse_code LEFT JOIN warehouse_info cangku ON r.cangku = cangku.warehouse_code
LEFT JOIN material_type wlType ON r.wl_type = wlType.type_code LEFT JOIN material_type wlType ON r.wl_type = wlType.type_code
LEFT JOIN construction_team team ON r.team_code = team.team_code
LEFT JOIN sys_user u ON r.lihuo_y = u.user_id LEFT JOIN sys_user u ON r.lihuo_y = u.user_id
WHERE r.is_delete = '0' WHERE r.is_delete = '0'
AND r.bill_no IN AND (
r.bill_no IN
<foreach collection="billNos" item="billNo" open="(" separator="," close=")"> <foreach collection="billNos" item="billNo" open="(" separator="," close=")">
#{billNo} #{billNo}
</foreach> </foreach>
GROUP BY r.bill_no OR
r.bill_no_ck IN
<foreach collection="billNos" item="billNo" open="(" separator="," close=")">
#{billNo}
</foreach>
)
GROUP BY COALESCE(r.bill_no_ck, r.bill_no)
</select> </select>
<select id="selectRkInfoListByBillNo" resultMap="RkInfoResult" <select id="selectRkInfoListByBillNo" resultMap="RkInfoResult"
parameterType="java.lang.String"> parameterType="java.lang.String">
SELECT SELECT
@@ -378,6 +392,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND bill_no = #{billNo} AND bill_no = #{billNo}
</select> </select>
<select id="selectRkInfoListByBillNoCk" resultMap="RkInfoResult" parameterType="java.lang.String">
SELECT *
FROM rk_info
WHERE is_delete = '0'
AND bill_no_ck = #{billNo}
</select>
<update id="updateRkInfo" parameterType="RkInfo"> <update id="updateRkInfo" parameterType="RkInfo">
update rk_info update rk_info
<trim prefix="SET" suffixOverrides=","> <trim prefix="SET" suffixOverrides=",">
@@ -458,18 +479,59 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="lyTime != null">ly_time = #{lyTime},</if> <if test="lyTime != null">ly_time = #{lyTime},</if>
<if test="borrowTime != null">borrow_time = #{borrowTime},</if> <if test="borrowTime != null">borrow_time = #{borrowTime},</if>
<if test="returnTime != null">return_time = #{returnTime},</if> <if test="returnTime != null">return_time = #{returnTime},</if>
<if test="status != null">status = #{status},</if>
</set> </set>
WHERE id = #{id} WHERE id = #{id}
</update> </update>
<update id="updateStatusByBillNo" parameterType="RkInfo"> <update id="updateStatusByBillNo" parameterType="RkInfo">
UPDATE rk_info UPDATE rk_info
SET status = #{status}, <set>
update_by = #{updateBy}, <if test="status != null">status = #{status},</if>
is_chuku = #{isChuku}, <if test="isChuku != null">is_chuku = #{isChuku},</if>
update_time = #{updateTime} <if test="updateBy != null">update_by = #{updateBy},</if>
WHERE bill_no = #{billNo} <if test="updateTime != null">update_time = #{updateTime},</if>
AND is_delete = '0' </set>
<where>
<if test="billNo != null">
bill_no = #{billNo}
</if>
<if test="billNo == null and billNoCk != null">
bill_no_ck = #{billNoCk}
</if>
</where>
</update> </update>
<update id="markDeleteByBillNo" parameterType="RkInfo">
UPDATE rk_info
SET is_delete = #{isDelete},
status = #{status},
update_by = #{updateBy},
update_time = #{updateTime}
WHERE bill_no = #{billNo}
AND status IN ('0', '2')
</update>
<update id="markDeleteByBillNoCk" parameterType="RkInfo">
UPDATE rk_info
SET is_delete = #{isDelete},
status = #{status},
update_by = #{updateBy},
update_time = #{updateTime}
WHERE bill_no_ck = #{billNoCk}
AND status IN ('0', '2')
</update>
<update id="revertRkInfoStatusByBillNoCk" parameterType="RkInfo">
UPDATE rk_info
SET status = #{status},
is_chuku = #{isChuku},
update_by = #{updateBy},
update_time = #{updateTime}
WHERE bill_no_ck = #{billNoCk}
AND is_delete = '0'
AND bill_no IS NOT NULL
</update>
</mapper> </mapper>