新增配送物料字段
优化u其他逻辑
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
package com.zg.project.information.controller;
|
||||
|
||||
import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import com.zg.framework.aspectj.lang.annotation.Log;
|
||||
import com.zg.framework.aspectj.lang.enums.BusinessType;
|
||||
import com.zg.project.information.domain.DeliveryMtd;
|
||||
import com.zg.project.information.service.IDeliveryMtdService;
|
||||
import com.zg.framework.web.controller.BaseController;
|
||||
import com.zg.framework.web.domain.AjaxResult;
|
||||
import com.zg.common.utils.poi.ExcelUtil;
|
||||
import com.zg.framework.web.page.TableDataInfo;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
/**
|
||||
* 配送系统物料字典Controller
|
||||
*
|
||||
* @author zg
|
||||
* @date 2025-10-24
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/information/delivery")
|
||||
public class DeliveryMtdController extends BaseController
|
||||
{
|
||||
@Autowired
|
||||
private IDeliveryMtdService deliveryMtdService;
|
||||
|
||||
/**
|
||||
* 查询配送系统物料字典列表
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('information:delivery:list')")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(DeliveryMtd deliveryMtd)
|
||||
{
|
||||
startPage();
|
||||
List<DeliveryMtd> list = deliveryMtdService.selectDeliveryMtdList(deliveryMtd);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出配送系统物料字典列表
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('information:delivery:export')")
|
||||
@Log(title = "配送系统物料字典", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, DeliveryMtd deliveryMtd)
|
||||
{
|
||||
List<DeliveryMtd> list = deliveryMtdService.selectDeliveryMtdList(deliveryMtd);
|
||||
ExcelUtil<DeliveryMtd> util = new ExcelUtil<DeliveryMtd>(DeliveryMtd.class);
|
||||
util.exportExcel(response, list, "配送系统物料字典数据");
|
||||
}
|
||||
|
||||
@PreAuthorize("@ss.hasPermi('information:delivery:import')")
|
||||
@Log(title = "配送系统物料字典", businessType = BusinessType.IMPORT)
|
||||
@PostMapping("/importData")
|
||||
public AjaxResult importData(@RequestParam("file") MultipartFile file) throws Exception
|
||||
{
|
||||
if (file == null || file.isEmpty()) {
|
||||
return AjaxResult.error("导入文件不能为空");
|
||||
}
|
||||
ExcelUtil<DeliveryMtd> util = new ExcelUtil<>(DeliveryMtd.class);
|
||||
List<DeliveryMtd> list = util.importExcel(file.getInputStream());
|
||||
int handled = deliveryMtdService.importDeliveryMtd(list, getUsername());
|
||||
return success("导入成功,共处理 " + handled + " 条");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取配送系统物料字典详细信息
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('information:delivery:query')")
|
||||
@GetMapping(value = "/{Id}")
|
||||
public AjaxResult getInfo(@PathVariable("Id") Long Id)
|
||||
{
|
||||
return success(deliveryMtdService.selectDeliveryMtdById(Id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增配送系统物料字典
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('information:delivery:add')")
|
||||
@Log(title = "配送系统物料字典", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public AjaxResult add(@RequestBody DeliveryMtd deliveryMtd)
|
||||
{
|
||||
return toAjax(deliveryMtdService.insertDeliveryMtd(deliveryMtd));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改配送系统物料字典
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('information:delivery:edit')")
|
||||
@Log(title = "配送系统物料字典", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public AjaxResult edit(@RequestBody DeliveryMtd deliveryMtd)
|
||||
{
|
||||
return toAjax(deliveryMtdService.updateDeliveryMtd(deliveryMtd));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除配送系统物料字典
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('information:delivery:remove')")
|
||||
@Log(title = "配送系统物料字典", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{Ids}")
|
||||
public AjaxResult remove(@PathVariable Long[] Ids)
|
||||
{
|
||||
return toAjax(deliveryMtdService.deleteDeliveryMtdByIds(Ids));
|
||||
}
|
||||
}
|
||||
@@ -4,14 +4,7 @@ import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import com.zg.framework.aspectj.lang.annotation.Log;
|
||||
import com.zg.framework.aspectj.lang.enums.BusinessType;
|
||||
import com.zg.project.information.domain.Mtd;
|
||||
@@ -20,6 +13,7 @@ import com.zg.framework.web.controller.BaseController;
|
||||
import com.zg.framework.web.domain.AjaxResult;
|
||||
import com.zg.common.utils.poi.ExcelUtil;
|
||||
import com.zg.framework.web.page.TableDataInfo;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
/**
|
||||
* 物料字典Controller
|
||||
@@ -59,6 +53,23 @@ public class MtdController extends BaseController
|
||||
util.exportExcel(response, list, "物料字典数据");
|
||||
}
|
||||
|
||||
/**
|
||||
* Excel 导入数据(存在则更新,不存在则新增)
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('information:mtd:import')")
|
||||
@Log(title = "物料字典", businessType = BusinessType.IMPORT)
|
||||
@PostMapping("/importData")
|
||||
public AjaxResult importData(@RequestParam("file") MultipartFile file,
|
||||
@RequestParam(value = "updateSupport", defaultValue = "true") boolean updateSupport) throws Exception
|
||||
{
|
||||
ExcelUtil<Mtd> util = new ExcelUtil<>(Mtd.class);
|
||||
List<Mtd> mtdList = util.importExcel(file.getInputStream());
|
||||
String operName = getUsername();
|
||||
// String operName = "大爷的!!!";
|
||||
String message = mtdService.importMtd(mtdList, updateSupport, operName);
|
||||
return success(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取物料字典详细信息
|
||||
*/
|
||||
@@ -101,4 +112,13 @@ public class MtdController extends BaseController
|
||||
{
|
||||
return toAjax(mtdService.deleteMtdByIds(Ids));
|
||||
}
|
||||
|
||||
@PreAuthorize("@ss.hasPermi('information:mtd:sync')")
|
||||
@Log(title = "物料字典", businessType = BusinessType.OTHER)
|
||||
@GetMapping("/syncFromPlan")
|
||||
public AjaxResult syncFromPlan() {
|
||||
String operName = getUsername();
|
||||
int inserted = mtdService.syncFromGysPlan(operName);
|
||||
return success("同步完成:新增 " + inserted + " 条。");
|
||||
}
|
||||
}
|
||||
|
||||
132
src/main/java/com/zg/project/information/domain/DeliveryMtd.java
Normal file
132
src/main/java/com/zg/project/information/domain/DeliveryMtd.java
Normal file
@@ -0,0 +1,132 @@
|
||||
package com.zg.project.information.domain;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||
import com.zg.framework.aspectj.lang.annotation.Excel;
|
||||
import com.zg.framework.web.domain.BaseEntity;
|
||||
|
||||
/**
|
||||
* 配送系统物料字典对象 delivery_mtd
|
||||
*
|
||||
* @author zg
|
||||
* @date 2025-10-24
|
||||
*/
|
||||
public class DeliveryMtd extends BaseEntity
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** $column.columnComment */
|
||||
private Long Id;
|
||||
|
||||
/** 物料号 */
|
||||
@Excel(name = "物料号")
|
||||
private String wlNo;
|
||||
|
||||
/** 物料描述 */
|
||||
@Excel(name = "物料描述")
|
||||
private String wlMs;
|
||||
|
||||
/** 单位 */
|
||||
@Excel(name = "单位")
|
||||
private String dw;
|
||||
|
||||
/** 单件重量(kg) */
|
||||
@Excel(name = "单件重量(kg)")
|
||||
private BigDecimal weightKg;
|
||||
|
||||
/** 单件体积(立方米) */
|
||||
@Excel(name = "单件体积(立方米)")
|
||||
private BigDecimal volumeM3;
|
||||
|
||||
/** 是否删除(0正常 1删除) */
|
||||
@Excel(name = "是否删除(0正常 1删除)")
|
||||
private String isDelete;
|
||||
|
||||
public void setId(Long Id)
|
||||
{
|
||||
this.Id = Id;
|
||||
}
|
||||
|
||||
public Long getId()
|
||||
{
|
||||
return Id;
|
||||
}
|
||||
|
||||
public void setWlNo(String wlNo)
|
||||
{
|
||||
this.wlNo = wlNo;
|
||||
}
|
||||
|
||||
public String getWlNo()
|
||||
{
|
||||
return wlNo;
|
||||
}
|
||||
|
||||
public void setWlMs(String wlMs)
|
||||
{
|
||||
this.wlMs = wlMs;
|
||||
}
|
||||
|
||||
public String getWlMs()
|
||||
{
|
||||
return wlMs;
|
||||
}
|
||||
|
||||
public void setDw(String dw)
|
||||
{
|
||||
this.dw = dw;
|
||||
}
|
||||
|
||||
public String getDw()
|
||||
{
|
||||
return dw;
|
||||
}
|
||||
|
||||
public void setWeightKg(BigDecimal weightKg)
|
||||
{
|
||||
this.weightKg = weightKg;
|
||||
}
|
||||
|
||||
public BigDecimal getWeightKg()
|
||||
{
|
||||
return weightKg;
|
||||
}
|
||||
|
||||
public void setVolumeM3(BigDecimal volumeM3)
|
||||
{
|
||||
this.volumeM3 = volumeM3;
|
||||
}
|
||||
|
||||
public BigDecimal getVolumeM3()
|
||||
{
|
||||
return volumeM3;
|
||||
}
|
||||
|
||||
public void setIsDelete(String isDelete)
|
||||
{
|
||||
this.isDelete = isDelete;
|
||||
}
|
||||
|
||||
public String getIsDelete()
|
||||
{
|
||||
return isDelete;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||
.append("Id", getId())
|
||||
.append("wlNo", getWlNo())
|
||||
.append("wlMs", getWlMs())
|
||||
.append("dw", getDw())
|
||||
.append("weightKg", getWeightKg())
|
||||
.append("volumeM3", getVolumeM3())
|
||||
.append("createBy", getCreateBy())
|
||||
.append("createTime", getCreateTime())
|
||||
.append("updateBy", getUpdateBy())
|
||||
.append("updateTime", getUpdateTime())
|
||||
.append("isDelete", getIsDelete())
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package com.zg.project.information.mapper;
|
||||
|
||||
import java.util.List;
|
||||
import com.zg.project.information.domain.DeliveryMtd;
|
||||
|
||||
/**
|
||||
* 配送系统物料字典Mapper接口
|
||||
*
|
||||
* @author zg
|
||||
* @date 2025-10-24
|
||||
*/
|
||||
public interface DeliveryMtdMapper
|
||||
{
|
||||
/**
|
||||
* 查询配送系统物料字典
|
||||
*
|
||||
* @param Id 配送系统物料字典主键
|
||||
* @return 配送系统物料字典
|
||||
*/
|
||||
public DeliveryMtd selectDeliveryMtdById(Long Id);
|
||||
|
||||
/**
|
||||
* 查询配送系统物料字典列表
|
||||
*
|
||||
* @param deliveryMtd 配送系统物料字典
|
||||
* @return 配送系统物料字典集合
|
||||
*/
|
||||
public List<DeliveryMtd> selectDeliveryMtdList(DeliveryMtd deliveryMtd);
|
||||
|
||||
/**
|
||||
* 新增配送系统物料字典
|
||||
*
|
||||
* @param deliveryMtd 配送系统物料字典
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertDeliveryMtd(DeliveryMtd deliveryMtd);
|
||||
|
||||
/**
|
||||
* 修改配送系统物料字典
|
||||
*
|
||||
* @param deliveryMtd 配送系统物料字典
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateDeliveryMtd(DeliveryMtd deliveryMtd);
|
||||
|
||||
/**
|
||||
* 删除配送系统物料字典
|
||||
*
|
||||
* @param Id 配送系统物料字典主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteDeliveryMtdById(Long Id);
|
||||
|
||||
/**
|
||||
* 批量删除配送系统物料字典
|
||||
*
|
||||
* @param Ids 需要删除的数据主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteDeliveryMtdByIds(Long[] Ids);
|
||||
|
||||
/**
|
||||
* 批量插入数据
|
||||
* @param clean
|
||||
* @return
|
||||
*/
|
||||
int batchUpsertDeliveryMtd(List<DeliveryMtd> clean);
|
||||
}
|
||||
@@ -65,4 +65,11 @@ public interface MtdMapper
|
||||
* @return
|
||||
*/
|
||||
String selectWlmsByWlbh(String materialCode);
|
||||
|
||||
/**
|
||||
* 根据物料编码查询物料信息
|
||||
* @param
|
||||
* @return
|
||||
*/
|
||||
Mtd selectMtdByMid(String trim);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
package com.zg.project.information.service;
|
||||
|
||||
import java.util.List;
|
||||
import com.zg.project.information.domain.DeliveryMtd;
|
||||
|
||||
/**
|
||||
* 配送系统物料字典Service接口
|
||||
*
|
||||
* @author zg
|
||||
* @date 2025-10-24
|
||||
*/
|
||||
public interface IDeliveryMtdService
|
||||
{
|
||||
/**
|
||||
* 查询配送系统物料字典
|
||||
*
|
||||
* @param Id 配送系统物料字典主键
|
||||
* @return 配送系统物料字典
|
||||
*/
|
||||
public DeliveryMtd selectDeliveryMtdById(Long Id);
|
||||
|
||||
/**
|
||||
* 查询配送系统物料字典列表
|
||||
*
|
||||
* @param deliveryMtd 配送系统物料字典
|
||||
* @return 配送系统物料字典集合
|
||||
*/
|
||||
public List<DeliveryMtd> selectDeliveryMtdList(DeliveryMtd deliveryMtd);
|
||||
|
||||
/**
|
||||
* 新增配送系统物料字典
|
||||
*
|
||||
* @param deliveryMtd 配送系统物料字典
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertDeliveryMtd(DeliveryMtd deliveryMtd);
|
||||
|
||||
/**
|
||||
* 修改配送系统物料字典
|
||||
*
|
||||
* @param deliveryMtd 配送系统物料字典
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateDeliveryMtd(DeliveryMtd deliveryMtd);
|
||||
|
||||
/**
|
||||
* 批量删除配送系统物料字典
|
||||
*
|
||||
* @param Ids 需要删除的配送系统物料字典主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteDeliveryMtdByIds(Long[] Ids);
|
||||
|
||||
/**
|
||||
* 删除配送系统物料字典信息
|
||||
*
|
||||
* @param Id 配送系统物料字典主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteDeliveryMtdById(Long Id);
|
||||
|
||||
/**
|
||||
* 批量导入(UPSERT,依赖 wl_no 唯一索引)
|
||||
* @param list 数据
|
||||
* @param operator 操作人
|
||||
* @return 处理条数
|
||||
*/
|
||||
int importDeliveryMtd(List<DeliveryMtd> list, String operator);
|
||||
}
|
||||
@@ -58,4 +58,17 @@ public interface IMtdService
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteMtdById(Long Id);
|
||||
|
||||
/**
|
||||
* 导入物料字典数据
|
||||
*
|
||||
* @param mtdList 物料字典数据列表
|
||||
* @param updateSupport 是否更新已经存在的物料字典数据
|
||||
* @param operName 操作人员
|
||||
* @return 结果
|
||||
*/
|
||||
String importMtd(List<Mtd> mtdList, boolean updateSupport, String operName);
|
||||
|
||||
int syncFromGysPlan(String operName);
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,132 @@
|
||||
package com.zg.project.information.service.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.zg.common.exception.ServiceException;
|
||||
import com.zg.common.utils.DateUtils;
|
||||
import com.zg.common.utils.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.zg.project.information.mapper.DeliveryMtdMapper;
|
||||
import com.zg.project.information.domain.DeliveryMtd;
|
||||
import com.zg.project.information.service.IDeliveryMtdService;
|
||||
|
||||
/**
|
||||
* 配送系统物料字典Service业务层处理
|
||||
*
|
||||
* @author zg
|
||||
* @date 2025-10-24
|
||||
*/
|
||||
@Service
|
||||
public class DeliveryMtdServiceImpl implements IDeliveryMtdService
|
||||
{
|
||||
@Autowired
|
||||
private DeliveryMtdMapper deliveryMtdMapper;
|
||||
|
||||
/**
|
||||
* 查询配送系统物料字典
|
||||
*
|
||||
* @param Id 配送系统物料字典主键
|
||||
* @return 配送系统物料字典
|
||||
*/
|
||||
@Override
|
||||
public DeliveryMtd selectDeliveryMtdById(Long Id)
|
||||
{
|
||||
return deliveryMtdMapper.selectDeliveryMtdById(Id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询配送系统物料字典列表
|
||||
*
|
||||
* @param deliveryMtd 配送系统物料字典
|
||||
* @return 配送系统物料字典
|
||||
*/
|
||||
@Override
|
||||
public List<DeliveryMtd> selectDeliveryMtdList(DeliveryMtd deliveryMtd)
|
||||
{
|
||||
return deliveryMtdMapper.selectDeliveryMtdList(deliveryMtd);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增配送系统物料字典
|
||||
*
|
||||
* @param deliveryMtd 配送系统物料字典
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int insertDeliveryMtd(DeliveryMtd deliveryMtd)
|
||||
{
|
||||
deliveryMtd.setCreateTime(DateUtils.getNowDate());
|
||||
return deliveryMtdMapper.insertDeliveryMtd(deliveryMtd);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改配送系统物料字典
|
||||
*
|
||||
* @param deliveryMtd 配送系统物料字典
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int updateDeliveryMtd(DeliveryMtd deliveryMtd)
|
||||
{
|
||||
deliveryMtd.setUpdateTime(DateUtils.getNowDate());
|
||||
return deliveryMtdMapper.updateDeliveryMtd(deliveryMtd);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除配送系统物料字典
|
||||
*
|
||||
* @param Ids 需要删除的配送系统物料字典主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteDeliveryMtdByIds(Long[] Ids)
|
||||
{
|
||||
return deliveryMtdMapper.deleteDeliveryMtdByIds(Ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除配送系统物料字典信息
|
||||
*
|
||||
* @param Id 配送系统物料字典主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteDeliveryMtdById(Long Id)
|
||||
{
|
||||
return deliveryMtdMapper.deleteDeliveryMtdById(Id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int importDeliveryMtd(List<DeliveryMtd> list, String operator)
|
||||
{
|
||||
if (list == null || list.isEmpty()) {
|
||||
throw new ServiceException("导入数据为空");
|
||||
}
|
||||
// 清洗与校验
|
||||
List<DeliveryMtd> clean = new ArrayList<>(list.size());
|
||||
for (DeliveryMtd m : list) {
|
||||
if (m == null) continue;
|
||||
if (StringUtils.isEmpty(m.getWlNo())) {
|
||||
// wlNo 必填,缺失则跳过
|
||||
continue;
|
||||
}
|
||||
m.setWlNo(m.getWlNo().trim());
|
||||
if (StringUtils.isEmpty(m.getIsDelete())) m.setIsDelete("0");
|
||||
|
||||
// 写入操作人与时间
|
||||
m.setUpdateBy(operator);
|
||||
m.setUpdateTime(DateUtils.getNowDate());
|
||||
if (m.getCreateBy() == null) m.setCreateBy(operator);
|
||||
if (m.getCreateTime() == null) m.setCreateTime(DateUtils.getNowDate());
|
||||
|
||||
clean.add(m);
|
||||
}
|
||||
if (clean.isEmpty()) {
|
||||
throw new ServiceException("有效导入数据为空(缺少 wlNo)");
|
||||
}
|
||||
// 批量 UPSERT(依赖 delivery_mtd.wl_no 唯一索引)
|
||||
return deliveryMtdMapper.batchUpsertDeliveryMtd(clean);
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,21 @@
|
||||
package com.zg.project.information.service.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import com.zg.common.exception.ServiceException;
|
||||
import com.zg.project.wisdom.domain.vo.PlanToMtdVO;
|
||||
import com.zg.project.wisdom.mapper.GysJhMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.zg.project.information.mapper.MtdMapper;
|
||||
import com.zg.project.information.domain.Mtd;
|
||||
import com.zg.project.information.service.IMtdService;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* 物料字典Service业务层处理
|
||||
@@ -19,6 +29,13 @@ public class MtdServiceImpl implements IMtdService
|
||||
@Autowired
|
||||
private MtdMapper mtdMapper;
|
||||
|
||||
// 注入若依内置线程池
|
||||
@Autowired
|
||||
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
|
||||
|
||||
@Autowired
|
||||
private GysJhMapper gysJhMapper;
|
||||
|
||||
/**
|
||||
* 查询物料字典
|
||||
*
|
||||
@@ -90,4 +107,105 @@ public class MtdServiceImpl implements IMtdService
|
||||
{
|
||||
return mtdMapper.deleteMtdById(Id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入 Excel 数据(存在则更新,不存在则新增)
|
||||
*/
|
||||
@Override
|
||||
public String importMtd(List<Mtd> mtdList, boolean updateSupport, String operName)
|
||||
{
|
||||
if (mtdList == null || mtdList.isEmpty()) {
|
||||
throw new ServiceException("导入数据不能为空!");
|
||||
}
|
||||
|
||||
int nThreads = 3; // 启动3个线程
|
||||
int size = mtdList.size();
|
||||
int chunk = (size + nThreads - 1) / nThreads;
|
||||
|
||||
AtomicInteger insertCount = new AtomicInteger(0);
|
||||
AtomicInteger updateCount = new AtomicInteger(0);
|
||||
AtomicInteger failCount = new AtomicInteger(0);
|
||||
ConcurrentLinkedQueue<String> errorMsgs = new ConcurrentLinkedQueue<>();
|
||||
|
||||
List<CompletableFuture<Void>> futures = new ArrayList<>();
|
||||
|
||||
for (int t = 0; t < nThreads; t++) {
|
||||
int from = t * chunk;
|
||||
int to = Math.min(from + chunk, size);
|
||||
if (from >= to) break;
|
||||
|
||||
final List<Mtd> part = mtdList.subList(from, to);
|
||||
final int startRow = 2 + from;
|
||||
|
||||
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
|
||||
for (int i = 0; i < part.size(); i++) {
|
||||
Mtd row = part.get(i);
|
||||
int rowNum = startRow + i;
|
||||
try {
|
||||
if (row.getMid() == null || row.getMid().trim().isEmpty()) {
|
||||
failCount.incrementAndGet();
|
||||
errorMsgs.add("第" + rowNum + "行:物料号为空;");
|
||||
continue;
|
||||
}
|
||||
|
||||
String mid = row.getMid().trim();
|
||||
Mtd exist = mtdMapper.selectMtdByMid(mid);
|
||||
if (exist == null) {
|
||||
row.setCreateBy(operName);
|
||||
mtdMapper.insertMtd(row);
|
||||
insertCount.incrementAndGet();
|
||||
} else if (updateSupport) {
|
||||
exist.setDesMat(row.getDesMat());
|
||||
exist.setGrp(row.getGrp());
|
||||
exist.setUnt(row.getUnt());
|
||||
exist.setUprc(row.getUprc());
|
||||
exist.setBtpe(row.getBtpe());
|
||||
exist.setMtpe(row.getMtpe());
|
||||
exist.setStpe(row.getStpe());
|
||||
exist.setUpdateBy(operName);
|
||||
mtdMapper.updateMtd(exist);
|
||||
updateCount.incrementAndGet();
|
||||
} else {
|
||||
failCount.incrementAndGet();
|
||||
errorMsgs.add("第" + rowNum + "行:物料号(" + mid + ")已存在,跳过;");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
failCount.incrementAndGet();
|
||||
errorMsgs.add("第" + rowNum + "行导入异常:" + e.getMessage() + ";");
|
||||
}
|
||||
}
|
||||
}, threadPoolTaskExecutor);
|
||||
futures.add(future);
|
||||
}
|
||||
|
||||
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
|
||||
|
||||
String summary = String.format("导入完成:新增 %d 条,更新 %d 条,失败 %d 条。",
|
||||
insertCount.get(), updateCount.get(), failCount.get());
|
||||
if (failCount.get() > 0) {
|
||||
StringBuilder sb = new StringBuilder(summary).append(" 失败详情:");
|
||||
errorMsgs.forEach(sb::append);
|
||||
throw new ServiceException(sb.toString());
|
||||
}
|
||||
return summary;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int syncFromGysPlan(String operName) {
|
||||
// 查出“供应计划里有、物料字典里没有”的物料(去重)
|
||||
List<PlanToMtdVO> needAdd = gysJhMapper.selectMissingMtdItems();
|
||||
if (needAdd == null || needAdd.isEmpty()) return 0;
|
||||
|
||||
int cnt = 0;
|
||||
for (PlanToMtdVO it : needAdd) {
|
||||
Mtd m = new Mtd();
|
||||
m.setMid(it.getWlNo()); // 物料号
|
||||
m.setDesMat(it.getWlMs()); // 物料描述
|
||||
m.setUnt(it.getDw()); // 单位
|
||||
m.setUprc(it.getHtDj() == null ? null : it.getHtDj().toPlainString()); // 单价(字符串)
|
||||
m.setCreateBy(operName);
|
||||
cnt += mtdMapper.insertMtd(m);
|
||||
}
|
||||
return cnt;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -251,6 +251,7 @@ public class RkInfoController extends BaseController
|
||||
List<RkInfo> list = rkInfoService.selectAllRkInfo(dto);
|
||||
|
||||
return getDataTable(list);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -251,6 +251,14 @@ public class RkInfo extends BaseEntity
|
||||
@TableField(exist = false)
|
||||
private Date lyEndTime;
|
||||
|
||||
/** 一次封样号 */
|
||||
@Excel(name = "一次封样号")
|
||||
private String fycde1;
|
||||
|
||||
/** 二次封样号 */
|
||||
@Excel(name = "二次封样号")
|
||||
private String fycde2;
|
||||
|
||||
/** 是否删除(0 表示正常,1 表示已删除) */
|
||||
private String isDelete;
|
||||
|
||||
@@ -473,6 +481,23 @@ public class RkInfo extends BaseEntity
|
||||
public void setAuditResult(String auditResult) {
|
||||
this.auditResult = auditResult;
|
||||
}
|
||||
|
||||
public String getFycde1() {
|
||||
return fycde1;
|
||||
}
|
||||
|
||||
public void setFycde1(String fycde1) {
|
||||
this.fycde1 = fycde1;
|
||||
}
|
||||
|
||||
public String getFycde2() {
|
||||
return fycde2;
|
||||
}
|
||||
|
||||
public void setFycde2(String fycde2) {
|
||||
this.fycde2 = fycde2;
|
||||
}
|
||||
|
||||
public String getIsDelete() { return isDelete; }
|
||||
public void setIsDelete(String isDelete) { this.isDelete = isDelete; }
|
||||
|
||||
@@ -547,6 +572,8 @@ public class RkInfo extends BaseEntity
|
||||
.append("isChukuList", getIsChukuList())
|
||||
.append("lyStartTime", getLyStartTime())
|
||||
.append("lyEndTime", getLyEndTime())
|
||||
.append("fycde1", getFycde1())
|
||||
.append("fycde2", getFycde2())
|
||||
.append("isDelete", getIsDelete())
|
||||
.toString();
|
||||
}
|
||||
|
||||
@@ -73,6 +73,12 @@ public class PcRkInfoItemDTO {
|
||||
/** 实物 ID */
|
||||
private String entityId;
|
||||
|
||||
/*一次封样号*/
|
||||
private String fycde1;
|
||||
|
||||
/*二次封样号*/
|
||||
private String fycde2;
|
||||
|
||||
/** 备注 */
|
||||
private String remark;
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.zg.project.wisdom.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
@Data
|
||||
public class PlanToMtdVO {
|
||||
private String wlNo; // 物料号
|
||||
private String wlMs; // 物料描述
|
||||
private String dw; // 单位
|
||||
private BigDecimal htDj; // 合同单价
|
||||
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.zg.project.wisdom.domain.GysJh;
|
||||
import com.zg.project.wisdom.domain.vo.PlanToMtdVO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
@@ -114,4 +115,12 @@ public interface GysJhMapper
|
||||
* @param realQty
|
||||
*/
|
||||
void decreaseJhQtyById(@Param("id") Long id, @Param("realQty") BigDecimal realQty);
|
||||
|
||||
/**
|
||||
* 查询缺失的物料
|
||||
* @return
|
||||
*/
|
||||
List<PlanToMtdVO> selectMissingMtdItems();
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -343,6 +343,8 @@ public class RkInfoServiceImpl implements IRkInfoService
|
||||
rk.setCreateTime(now);
|
||||
rk.setIsDelete("0");
|
||||
rk.setGysJhId(item.getGysJhId());
|
||||
rk.setFycde1(item.getFycde1());
|
||||
rk.setFycde2(item.getFycde2());
|
||||
|
||||
if (needAudit) {
|
||||
rk.setStatus("0"); // 待审核
|
||||
@@ -758,6 +760,9 @@ public class RkInfoServiceImpl implements IRkInfoService
|
||||
throw new ServiceException("匹配失败:缺少场景ID");
|
||||
}
|
||||
|
||||
//根据任务ID修改任务状态
|
||||
taskMapper.updateStatus(dto.getTaskId(), "1");
|
||||
|
||||
// 自动盘点必须有设备 ID
|
||||
String deviceId = dto.getDeviceId();
|
||||
int scanType = dto.getScanType() != null ? dto.getScanType() : 0; // 扫描类型:0=手动盘点,1=自动盘点
|
||||
|
||||
@@ -7,9 +7,9 @@ spring:
|
||||
# 主库数据源
|
||||
master:
|
||||
# url: jdbc:mysql://101.132.133.142:3306/wisdom?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
url: jdbc:mysql://192.168.1.20:3306/wisdom?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
# url: jdbc:mysql://192.168.1.20:3306/wisdom?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
# url: jdbc:mysql://192.168.1.192:3306/wisdom?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
# url: jdbc:mysql://192.168.1.251:3306/wisdom?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
url: jdbc:mysql://192.168.1.251:3306/wisdom?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
# url: jdbc:mysql://localhost:3306/wisdom?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
username: root
|
||||
password: shzg
|
||||
|
||||
@@ -69,8 +69,8 @@ spring:
|
||||
redis:
|
||||
# 地址
|
||||
# host: 101.132.133.142
|
||||
host: 192.168.1.20
|
||||
# host: 192.168.1.251
|
||||
# host: 192.168.1.20
|
||||
host: 192.168.1.251
|
||||
# host: localhost
|
||||
# 端口,默认为6379
|
||||
port: 6379
|
||||
|
||||
115
src/main/resources/mybatis/information/DeliveryMtdMapper.xml
Normal file
115
src/main/resources/mybatis/information/DeliveryMtdMapper.xml
Normal file
@@ -0,0 +1,115 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.zg.project.information.mapper.DeliveryMtdMapper">
|
||||
|
||||
<resultMap type="DeliveryMtd" id="DeliveryMtdResult">
|
||||
<result property="Id" column="Id" />
|
||||
<result property="wlNo" column="wl_no" />
|
||||
<result property="wlMs" column="wl_ms" />
|
||||
<result property="dw" column="dw" />
|
||||
<result property="weightKg" column="weight_kg" />
|
||||
<result property="volumeM3" column="volume_m3" />
|
||||
<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="isDelete" column="is_delete" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectDeliveryMtdVo">
|
||||
select Id, wl_no, wl_ms, dw, weight_kg, volume_m3, create_by, create_time, update_by, update_time, is_delete from delivery_mtd
|
||||
</sql>
|
||||
|
||||
<select id="selectDeliveryMtdList" parameterType="DeliveryMtd" resultMap="DeliveryMtdResult">
|
||||
<include refid="selectDeliveryMtdVo"/>
|
||||
<where>
|
||||
<if test="wlNo != null and wlNo != ''"> and wl_no = #{wlNo}</if>
|
||||
<if test="wlMs != null and wlMs != ''"> and wl_ms = #{wlMs}</if>
|
||||
<if test="dw != null and dw != ''"> and dw = #{dw}</if>
|
||||
<if test="weightKg != null "> and weight_kg = #{weightKg}</if>
|
||||
<if test="volumeM3 != null "> and volume_m3 = #{volumeM3}</if>
|
||||
<if test="isDelete != null and isDelete != ''"> and is_delete = #{isDelete}</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<select id="selectDeliveryMtdById" parameterType="Long" resultMap="DeliveryMtdResult">
|
||||
<include refid="selectDeliveryMtdVo"/>
|
||||
where Id = #{Id}
|
||||
</select>
|
||||
|
||||
<insert id="insertDeliveryMtd" parameterType="DeliveryMtd" useGeneratedKeys="true" keyProperty="Id">
|
||||
insert into delivery_mtd
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="wlNo != null">wl_no,</if>
|
||||
<if test="wlMs != null">wl_ms,</if>
|
||||
<if test="dw != null">dw,</if>
|
||||
<if test="weightKg != null">weight_kg,</if>
|
||||
<if test="volumeM3 != null">volume_m3,</if>
|
||||
<if test="createBy != null">create_by,</if>
|
||||
<if test="createTime != null">create_time,</if>
|
||||
<if test="updateBy != null">update_by,</if>
|
||||
<if test="updateTime != null">update_time,</if>
|
||||
<if test="isDelete != null">is_delete,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="wlNo != null">#{wlNo},</if>
|
||||
<if test="wlMs != null">#{wlMs},</if>
|
||||
<if test="dw != null">#{dw},</if>
|
||||
<if test="weightKg != null">#{weightKg},</if>
|
||||
<if test="volumeM3 != null">#{volumeM3},</if>
|
||||
<if test="createBy != null">#{createBy},</if>
|
||||
<if test="createTime != null">#{createTime},</if>
|
||||
<if test="updateBy != null">#{updateBy},</if>
|
||||
<if test="updateTime != null">#{updateTime},</if>
|
||||
<if test="isDelete != null">#{isDelete},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<update id="updateDeliveryMtd" parameterType="DeliveryMtd">
|
||||
update delivery_mtd
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="wlNo != null">wl_no = #{wlNo},</if>
|
||||
<if test="wlMs != null">wl_ms = #{wlMs},</if>
|
||||
<if test="dw != null">dw = #{dw},</if>
|
||||
<if test="weightKg != null">weight_kg = #{weightKg},</if>
|
||||
<if test="volumeM3 != null">volume_m3 = #{volumeM3},</if>
|
||||
<if test="createBy != null">create_by = #{createBy},</if>
|
||||
<if test="createTime != null">create_time = #{createTime},</if>
|
||||
<if test="updateBy != null">update_by = #{updateBy},</if>
|
||||
<if test="updateTime != null">update_time = #{updateTime},</if>
|
||||
<if test="isDelete != null">is_delete = #{isDelete},</if>
|
||||
</trim>
|
||||
where Id = #{Id}
|
||||
</update>
|
||||
|
||||
<insert id="batchUpsertDeliveryMtd" parameterType="java.util.List">
|
||||
INSERT INTO delivery_mtd
|
||||
(wl_no, wl_ms, dw, weight_kg, volume_m3, create_by, create_time, update_by, update_time, is_delete)
|
||||
VALUES
|
||||
<foreach collection="list" item="item" separator=",">
|
||||
(#{item.wlNo}, #{item.wlMs}, #{item.dw}, #{item.weightKg}, #{item.volumeM3},
|
||||
#{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime}, #{item.isDelete})
|
||||
</foreach>
|
||||
ON DUPLICATE KEY UPDATE
|
||||
wl_ms = VALUES(wl_ms),
|
||||
dw = VALUES(dw),
|
||||
weight_kg = VALUES(weight_kg),
|
||||
volume_m3 = VALUES(volume_m3),
|
||||
update_by = VALUES(update_by),
|
||||
update_time = VALUES(update_time),
|
||||
is_delete = VALUES(is_delete)
|
||||
</insert>
|
||||
|
||||
<delete id="deleteDeliveryMtdById" parameterType="Long">
|
||||
delete from delivery_mtd where Id = #{Id}
|
||||
</delete>
|
||||
|
||||
<delete id="deleteDeliveryMtdByIds" parameterType="String">
|
||||
delete from delivery_mtd where Id in
|
||||
<foreach item="Id" collection="array" open="(" separator="," close=")">
|
||||
#{Id}
|
||||
</foreach>
|
||||
</delete>
|
||||
</mapper>
|
||||
@@ -45,6 +45,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
WHERE mid = #{materialCode}
|
||||
</select>
|
||||
|
||||
<select id="selectMtdByMid" resultMap="MtdResult">
|
||||
SELECT * FROM mtd WHERE mid = #{mid} LIMIT 1
|
||||
</select>
|
||||
|
||||
<insert id="insertMtd" parameterType="Mtd" useGeneratedKeys="true" keyProperty="Id">
|
||||
insert into mtd
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
|
||||
@@ -93,6 +93,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
<select id="selectMissingMtdItems" resultType="com.zg.project.wisdom.domain.vo.PlanToMtdVO">
|
||||
SELECT
|
||||
g.wl_no AS wlNo,
|
||||
MAX(g.wl_ms) AS wlMs,
|
||||
MAX(g.dw) AS dw,
|
||||
MAX(g.ht_dj) AS htDj
|
||||
FROM gys_jh g
|
||||
LEFT JOIN mtd m ON m.mid = g.wl_no
|
||||
WHERE g.wl_no IS NOT NULL AND g.wl_no <> ''
|
||||
AND m.mid IS NULL
|
||||
GROUP BY g.wl_no
|
||||
</select>
|
||||
|
||||
<insert id="insertGysJh" parameterType="GysJh" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into gys_jh
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.zg.project.wisdom.mapper.RkInfoMapper">
|
||||
|
||||
<resultMap type="RkInfo" id="RkInfoResult">
|
||||
@@ -57,9 +57,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="isDelete" column="is_delete" />
|
||||
<result property="hasMoved" column="has_moved"/>
|
||||
<result property="lihuoYName" column="lihuo_y_name"/>
|
||||
<result property="fycde1" column="fycde_1"/>
|
||||
<result property="fycde2" column="fycde_2"/>
|
||||
<result property="isDelivery" column="is_delivery"/>
|
||||
</resultMap>
|
||||
|
||||
<!-- 明细查询SQL(包含多表JOIN,用于普通明细/分页等) -->
|
||||
<sql id="selectRkInfoVo">
|
||||
SELECT
|
||||
ri.id,
|
||||
@@ -73,6 +76,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
ri.team_code, ct.team_name,
|
||||
ri.ck_remark,
|
||||
ri.ly_time,
|
||||
ri.fycde_1, ri.fycde_2,
|
||||
ri.borrow_time, ri.return_time,
|
||||
ri.xj, ri.xm_no, ri.xm_ms, ri.wl_no, ri.wl_ms, ri.xm_no_ck, ri.xm_ms_ck,
|
||||
ri.gys_no, ri.gys_mc, ri.jh_amt, ri.ht_dj, ri.sap_no, ri.xh, ri.gys_jh_id,
|
||||
@@ -90,6 +94,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
LEFT JOIN sys_user u ON ri.lihuo_y = u.user_id
|
||||
</sql>
|
||||
|
||||
<!-- 轻量分组专用SQL:仅rk_info字段,不做JOIN(供按单据分组内层使用) -->
|
||||
<sql id="selectRkInfoForGroup">
|
||||
SELECT
|
||||
ri.id,
|
||||
ri.bill_no,
|
||||
ri.bill_no_ck,
|
||||
ri.rk_type,
|
||||
ri.wl_type,
|
||||
ri.cangku,
|
||||
ri.rk_time,
|
||||
ri.lihuo_y,
|
||||
ri.is_chuku,
|
||||
ri.xj,
|
||||
ri.xm_no,
|
||||
ri.xm_ms,
|
||||
ri.xm_no_ck,
|
||||
ri.xm_ms_ck,
|
||||
ri.gys_mc,
|
||||
ri.wl_no,
|
||||
ri.wl_ms,
|
||||
ri.gys_no,
|
||||
ri.sap_no,
|
||||
ri.ck_type,
|
||||
ri.ly_time,
|
||||
ri.ck_lihuo_y,
|
||||
ri.pcode,
|
||||
ri.is_delete
|
||||
FROM rk_info ri
|
||||
</sql>
|
||||
|
||||
<insert id="batchInsertRkInfo"
|
||||
parameterType="java.util.List"
|
||||
useGeneratedKeys="true"
|
||||
@@ -101,7 +135,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
xm_no_ck, xm_ms_ck, xj, sap_no, gys_no, gys_mc,
|
||||
jh_qty, ht_qty, jh_amt, ht_dj, dw,
|
||||
borrow_time, return_time, status,
|
||||
pcode, pcode_id, tray_code, real_qty, entity_id,
|
||||
pcode, pcode_id, tray_code, real_qty, entity_id, fycde_1, fycde_2,
|
||||
remark, is_chuku, is_borrowed, gys_jh_id,
|
||||
is_delete, create_by, create_time
|
||||
)
|
||||
@@ -114,7 +148,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
#{item.xmNoCk}, #{item.xmMsCk}, #{item.xj}, #{item.sapNo}, #{item.gysNo}, #{item.gysMc},
|
||||
#{item.jhQty}, #{item.htQty}, #{item.jhAmt}, #{item.htDj}, #{item.dw},
|
||||
#{item.borrowTime}, #{item.returnTime}, #{item.status},
|
||||
#{item.pcode}, #{item.pcodeId}, #{item.trayCode}, #{item.realQty}, #{item.entityId},
|
||||
#{item.pcode}, #{item.pcodeId}, #{item.trayCode}, #{item.realQty}, #{item.entityId}, #{item.fycde1}, #{item.fycde2},
|
||||
#{item.remark}, #{item.isChuku}, #{item.isBorrowed}, #{item.gysJhId},
|
||||
#{item.isDelete}, #{item.createBy}, #{item.createTime}
|
||||
)
|
||||
@@ -146,7 +180,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
)
|
||||
</insert>
|
||||
|
||||
|
||||
<update id="cancelStockOut">
|
||||
UPDATE rk_info
|
||||
SET
|
||||
@@ -186,6 +219,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
AND (
|
||||
ri.xm_no like concat('%', #{keyword}, '%')
|
||||
or ri.xm_ms like concat('%', #{keyword}, '%')
|
||||
or ri.fycde_1 like concat('%', #{keyword}, '%')
|
||||
or ri.fycde_2 like concat('%', #{keyword}, '%')
|
||||
or ri.wl_no like concat('%', #{keyword}, '%')
|
||||
or ri.wl_ms like concat('%', #{keyword}, '%')
|
||||
or ri.gys_no like concat('%', #{keyword}, '%')
|
||||
@@ -207,7 +242,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="cangku != null and cangku != ''">
|
||||
AND ri.cangku like concat('%', #{cangku}, '%')
|
||||
</if>
|
||||
|
||||
<if test="fycde1 != null and fycde1 != ''">
|
||||
AND ri.fycde_1 like concat('%', #{fycde1}, '%')
|
||||
</if>
|
||||
<if test="fycde2 != null and fycde2 != ''">
|
||||
AND ri.fycde_2 like concat('%', #{fycde2}, '%')
|
||||
</if>
|
||||
<if test="ids != null and ids.size > 0">
|
||||
AND ri.id IN
|
||||
<foreach collection="ids" item="id" open="(" separator="," close=")">
|
||||
@@ -318,12 +358,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
ORDER BY ri.rk_time DESC
|
||||
</select>
|
||||
|
||||
<!--
|
||||
按单据分组(bill_no)列表
|
||||
复用 <sql id="selectRkInfoVo"> 作为子查询,外层分组聚合
|
||||
返回字段:bill_no、bill_no_ck + 你指定的通用字段(rk_type、wl_type、cangku、rk_time、lihuo_y、is_chuku、xj、
|
||||
xm_no、xm_ms、xm_no_ck、xm_ms_ck、wl_no、wl_ms、gys_no、sap_no)
|
||||
-->
|
||||
<!-- ================== 这里是已优化的按单据分组查询(替换旧版本) ================== -->
|
||||
<select id="selectGroupedByBill" resultMap="RkInfoResult" parameterType="map">
|
||||
SELECT
|
||||
a.id,
|
||||
@@ -353,33 +388,42 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
u.user_name AS ck_lihuo_y_name
|
||||
FROM (
|
||||
SELECT
|
||||
MIN(t.id) AS id, -- 代表ID
|
||||
t.bill_no AS bill_no, -- 分组键
|
||||
MIN(t.bill_no_ck) AS bill_no_ck, -- 代表值
|
||||
MIN(t.rk_type) AS rk_type,
|
||||
MIN(t.wl_type) AS wl_type,
|
||||
MIN(t.cangku) AS cangku,
|
||||
MIN(t.rk_time) AS rk_time, -- 单据内最早入库时间
|
||||
MIN(t.lihuo_y) AS lihuo_y,
|
||||
MAX(t.is_chuku) AS is_chuku, -- 单据内只要有出库则为1
|
||||
MIN(t.xj) AS xj,
|
||||
MIN(t.xm_no) AS xm_no,
|
||||
MIN(t.xm_ms) AS xm_ms,
|
||||
MIN(t.xm_no_ck) AS xm_no_ck,
|
||||
MIN(t.xm_ms_ck) AS xm_ms_ck,
|
||||
MIN(t.id) AS id, -- 代表ID
|
||||
t.bill_no AS bill_no, -- 分组键
|
||||
MIN(t.bill_no_ck) AS bill_no_ck,
|
||||
MIN(t.rk_type) AS rk_type,
|
||||
MIN(t.wl_type) AS wl_type,
|
||||
MIN(t.cangku) AS cangku,
|
||||
MIN(t.rk_time) AS rk_time, -- 单据内最早入库时间
|
||||
MIN(t.lihuo_y) AS lihuo_y,
|
||||
MAX(t.is_chuku) AS is_chuku, -- 单据内只要有出库则为1
|
||||
MIN(t.xj) AS xj,
|
||||
MIN(t.xm_no) AS xm_no,
|
||||
MIN(t.xm_ms) AS xm_ms,
|
||||
MIN(t.xm_no_ck) AS xm_no_ck,
|
||||
MIN(t.xm_ms_ck) AS xm_ms_ck,
|
||||
MIN(t.gys_mc) AS gys_mc,
|
||||
MIN(t.wl_no) AS wl_no,
|
||||
MIN(t.wl_ms) AS wl_ms,
|
||||
MIN(t.gys_no) AS gys_no,
|
||||
MIN(t.sap_no) AS sap_no,
|
||||
MIN(t.ck_type) AS ck_type,
|
||||
MAX(t.ly_time) AS ly_time,
|
||||
MIN(t.wl_no) AS wl_no,
|
||||
MIN(t.wl_ms) AS wl_ms,
|
||||
MIN(t.gys_no) AS gys_no,
|
||||
MIN(t.sap_no) AS sap_no,
|
||||
MIN(t.ck_type) AS ck_type,
|
||||
MAX(t.ly_time) AS ly_time,
|
||||
MIN(t.ck_lihuo_y) AS ck_lihuo_y
|
||||
FROM (
|
||||
<!-- 复用已有的明细查询(列别名与 RkInfoResult 一致) -->
|
||||
<include refid="selectRkInfoVo"/>
|
||||
<include refid="selectRkInfoForGroup"/>
|
||||
) t
|
||||
<where>
|
||||
<!-- 删除标记:默认0 -->
|
||||
<choose>
|
||||
<when test="q.isDelete != null and q.isDelete != ''">
|
||||
AND t.is_delete = #{q.isDelete}
|
||||
</when>
|
||||
<otherwise>
|
||||
AND t.is_delete = 0
|
||||
</otherwise>
|
||||
</choose>
|
||||
|
||||
<!-- is_chuku 优先列表,其次单值 -->
|
||||
<choose>
|
||||
<when test="q.isChukuList != null and q.isChukuList.size > 0">
|
||||
@@ -396,153 +440,74 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<!-- 关键词模糊 -->
|
||||
<if test="q.keyword != null and q.keyword != ''">
|
||||
AND (
|
||||
t.xm_no LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.xm_ms LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.wl_no LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.wl_ms LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.gys_no LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.gys_mc LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.sap_no LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.bill_no LIKE concat('%', #{q.keyword}, '%')
|
||||
t.xm_no LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.xm_ms LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.wl_no LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.wl_ms LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.gys_no LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.gys_mc LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.sap_no LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.bill_no LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.bill_no_ck LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.ck_type LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.pcode LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.ck_type LIKE concat('%', #{q.keyword}, '%')
|
||||
OR t.pcode LIKE concat('%', #{q.keyword}, '%')
|
||||
)
|
||||
</if>
|
||||
|
||||
<!-- 维度筛选 -->
|
||||
<if test="q.rkType != null and q.rkType != ''">
|
||||
AND t.rk_type LIKE concat('%', #{q.rkType}, '%')
|
||||
</if>
|
||||
<if test="q.wlType != null and q.wlType != ''">
|
||||
AND t.wl_type LIKE concat('%', #{q.wlType}, '%')
|
||||
</if>
|
||||
<if test="q.cangku != null and q.cangku != ''">
|
||||
AND t.cangku LIKE concat('%', #{q.cangku}, '%')
|
||||
</if>
|
||||
<if test="q.rkType != null and q.rkType != ''"> AND t.rk_type LIKE concat('%', #{q.rkType}, '%') </if>
|
||||
<if test="q.wlType != null and q.wlType != ''"> AND t.wl_type LIKE concat('%', #{q.wlType}, '%') </if>
|
||||
<if test="q.cangku != null and q.cangku != ''"> AND t.cangku LIKE concat('%', #{q.cangku}, '%') </if>
|
||||
|
||||
<!-- ID 列表 -->
|
||||
<if test="q.ids != null and q.ids.size > 0">
|
||||
AND t.id IN
|
||||
<foreach collection="q.ids" item="id" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
<!-- 入库/领用时间范围(闭区间) -->
|
||||
<if test="q.startTime != null"><![CDATA[ AND t.rk_time >= #{q.startTime} ]]></if>
|
||||
<if test="q.endTime != null"><![CDATA[ AND t.rk_time <= #{q.endTime} ]]></if>
|
||||
<if test="q.lyStartTime!= null"><![CDATA[ AND t.ly_time >= #{q.lyStartTime}]]></if>
|
||||
<if test="q.lyEndTime != null"><![CDATA[ AND t.ly_time <= #{q.lyEndTime} ]]></if>
|
||||
|
||||
<!-- 入库时间范围(闭区间) -->
|
||||
<if test="q.startTime != null"><![CDATA[
|
||||
AND t.rk_time >= #{q.startTime}
|
||||
]]></if>
|
||||
<if test="q.endTime != null"><![CDATA[
|
||||
AND t.rk_time <= #{q.endTime}
|
||||
]]></if>
|
||||
|
||||
<!-- 领用时间范围(闭区间) -->
|
||||
<if test="q.lyStartTime != null"><![CDATA[
|
||||
AND t.ly_time >= #{q.lyStartTime}
|
||||
]]></if>
|
||||
<if test="q.lyEndTime != null"><![CDATA[
|
||||
AND t.ly_time <= #{q.lyEndTime}
|
||||
]]></if>
|
||||
|
||||
<!-- 其它模糊/等值 -->
|
||||
<if test="q.lihuoY != null and q.lihuoY != ''">
|
||||
AND t.lihuo_y LIKE concat('%', #{q.lihuoY}, '%')
|
||||
</if>
|
||||
<if test="q.xj != null and q.xj != ''">
|
||||
AND t.xj LIKE concat('%', #{q.xj}, '%')
|
||||
</if>
|
||||
<if test="q.billNo != null and q.billNo != ''">
|
||||
AND t.bill_no LIKE concat('%', #{q.billNo}, '%')
|
||||
</if>
|
||||
<if test="q.billNoCk != null and q.billNoCk != ''">
|
||||
AND t.bill_no_ck LIKE concat('%', #{q.billNoCk}, '%')
|
||||
</if>
|
||||
<if test="q.xmNo != null and q.xmNo != ''">
|
||||
AND t.xm_no LIKE concat('%', #{q.xmNo}, '%')
|
||||
</if>
|
||||
<if test="q.xmMs != null and q.xmMs != ''">
|
||||
AND t.xm_ms LIKE concat('%', #{q.xmMs}, '%')
|
||||
</if>
|
||||
<if test="q.wlNo != null and q.wlNo != ''">
|
||||
AND t.wl_no LIKE concat('%', #{q.wlNo}, '%')
|
||||
</if>
|
||||
<if test="q.wlMs != null and q.wlMs != ''">
|
||||
AND t.wl_ms LIKE concat('%', #{q.wlMs}, '%')
|
||||
</if>
|
||||
<if test="q.gysNo != null and q.gysNo != ''">
|
||||
AND t.gys_no LIKE concat('%', #{q.gysNo}, '%')
|
||||
</if>
|
||||
<if test="q.gysMc != null and q.gysMc != ''">
|
||||
AND t.gys_mc LIKE concat('%', #{q.gysMc}, '%')
|
||||
</if>
|
||||
|
||||
<if test="q.jhAmt != null"> AND t.jh_amt = #{q.jhAmt} </if>
|
||||
<if test="q.htDj != null"> AND t.ht_dj = #{q.htDj} </if>
|
||||
|
||||
<if test="q.sapNo != null and q.sapNo != ''">
|
||||
AND t.sap_no LIKE concat('%', #{q.sapNo}, '%')
|
||||
</if>
|
||||
<if test="q.xh != null and q.xh != ''">
|
||||
AND t.xh LIKE concat('%', #{q.xh}, '%')
|
||||
</if>
|
||||
<if test="q.jhQty != null"> AND t.jh_qty = #{q.jhQty} </if>
|
||||
<if test="q.htQty != null"> AND t.ht_qty = #{q.htQty} </if>
|
||||
<if test="q.dw != null and q.dw != ''">
|
||||
AND t.dw LIKE concat('%', #{q.dw}, '%')
|
||||
</if>
|
||||
<if test="q.realQty != null"> AND t.real_qty = #{q.realQty} </if>
|
||||
|
||||
<if test="q.pcode != null and q.pcode != ''">
|
||||
AND t.pcode LIKE concat('%', #{q.pcode}, '%')
|
||||
</if>
|
||||
<if test="q.lyTime != null"> AND t.ly_time = #{q.lyTime} </if>
|
||||
<if test="q.returnTime != null"> AND t.return_time = #{q.returnTime} </if>
|
||||
<if test="q.trayCode != null and q.trayCode != ''">
|
||||
AND t.tray_code LIKE concat('%', #{q.trayCode}, '%')
|
||||
</if>
|
||||
<if test="q.entityId != null and q.entityId != ''">
|
||||
AND t.entity_id LIKE concat('%', #{q.entityId}, '%')
|
||||
</if>
|
||||
<if test="q.ckType != null and q.ckType != ''">
|
||||
AND t.ck_type LIKE concat('%', #{q.ckType}, '%')
|
||||
</if>
|
||||
<!-- 其它等值/模糊 -->
|
||||
<if test="q.lihuoY != null and q.lihuoY != ''"> AND t.lihuo_y LIKE concat('%', #{q.lihuoY}, '%') </if>
|
||||
<if test="q.xj != null and q.xj != ''"> AND t.xj LIKE concat('%', #{q.xj}, '%') </if>
|
||||
<if test="q.billNo != null and q.billNo != ''"> AND t.bill_no LIKE concat('%', #{q.billNo}, '%') </if>
|
||||
<if test="q.billNoCk != null and q.billNoCk != ''"> AND t.bill_no_ck LIKE concat('%', #{q.billNoCk}, '%') </if>
|
||||
<if test="q.xmNo != null and q.xmNo != ''"> AND t.xm_no LIKE concat('%', #{q.xmNo}, '%') </if>
|
||||
<if test="q.xmMs != null and q.xmMs != ''"> AND t.xm_ms LIKE concat('%', #{q.xmMs}, '%') </if>
|
||||
<if test="q.wlNo != null and q.wlNo != ''"> AND t.wl_no LIKE concat('%', #{q.wlNo}, '%') </if>
|
||||
<if test="q.wlMs != null and q.wlMs != ''"> AND t.wl_ms LIKE concat('%', #{q.wlMs}, '%') </if>
|
||||
<if test="q.gysNo != null and q.gysNo != ''"> AND t.gys_no LIKE concat('%', #{q.gysNo}, '%') </if>
|
||||
<if test="q.gysMc != null and q.gysMc != ''"> AND t.gys_mc LIKE concat('%', #{q.gysMc}, '%') </if>
|
||||
<if test="q.sapNo != null and q.sapNo != ''"> AND t.sap_no LIKE concat('%', #{q.sapNo}, '%') </if>
|
||||
<if test="q.xh != null and q.xh != ''"> AND t.xh LIKE concat('%', #{q.xh}, '%') </if>
|
||||
<if test="q.pcode != null and q.pcode != ''"> AND t.pcode LIKE concat('%', #{q.pcode}, '%') </if>
|
||||
|
||||
<!-- 若查询出库单据,则要求已生成出库单号 -->
|
||||
<if test="(q.isChuku != null and q.isChuku == 1)
|
||||
or (q.isChukuList != null and q.isChukuList.size > 0 and q.isChukuList.contains(1))">
|
||||
or (q.isChukuList != null and q.isChukuList.size > 0 and q.isChukuList.contains(1))">
|
||||
AND t.bill_no_ck IS NOT NULL
|
||||
</if>
|
||||
|
||||
<!-- 删除标记(默认0) -->
|
||||
<choose>
|
||||
<when test="q.isDelete != null and q.isDelete != ''">
|
||||
AND t.is_delete = #{q.isDelete}
|
||||
</when>
|
||||
<otherwise>
|
||||
AND t.is_delete = 0
|
||||
</otherwise>
|
||||
</choose>
|
||||
|
||||
<!-- 审核开启:剔除审核失败(不使用 <>,而用 != 或 CDATA) -->
|
||||
<!-- 审核开启:剔除该 bill_no 下任意一条“审核失败”的明细 -->
|
||||
<if test="needAudit != null and needAudit == 1">
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM audit_signature asg
|
||||
WHERE asg.rk_id = t.id
|
||||
FROM rk_info r2
|
||||
JOIN audit_signature asg
|
||||
ON asg.rk_id = r2.id
|
||||
AND asg.approver_id IS NOT NULL
|
||||
AND (asg.audit_result IS NOT NULL AND asg.audit_result != '1')
|
||||
WHERE r2.bill_no = t.bill_no
|
||||
AND r2.is_delete = 0
|
||||
)
|
||||
</if>
|
||||
</where>
|
||||
GROUP BY t.bill_no
|
||||
) a
|
||||
LEFT JOIN stock_in_type si ON a.rk_type = si.type_code
|
||||
LEFT JOIN stock_out_type so ON a.ck_type = so.type_code
|
||||
LEFT JOIN sys_user u ON a.ck_lihuo_y = u.user_id
|
||||
LEFT JOIN stock_in_type si ON a.rk_type = si.type_code
|
||||
LEFT JOIN stock_out_type so ON a.ck_type = so.type_code
|
||||
LEFT JOIN sys_user u ON a.ck_lihuo_y = u.user_id
|
||||
ORDER BY a.rk_time DESC
|
||||
</select>
|
||||
|
||||
<!-- ================== /按单据分组查询 ================== -->
|
||||
|
||||
<select id="selectRkInfoById" parameterType="Long" resultMap="RkInfoResult">
|
||||
<include refid="selectRkInfoVo"/>
|
||||
@@ -569,7 +534,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<select id="countOverdueStock" resultType="int">
|
||||
SELECT COUNT(*) FROM rk_info
|
||||
WHERE is_delete = 0 AND is_chuku = 0
|
||||
<![CDATA[
|
||||
<![CDATA[
|
||||
AND DATE(rk_time) <= DATE_SUB(CURDATE(), INTERVAL 20 DAY)
|
||||
]]>
|
||||
</select>
|
||||
@@ -577,12 +542,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<select id="selectTopOverdueStock" resultMap="RkInfoResult">
|
||||
SELECT * FROM rk_info
|
||||
WHERE is_delete = 0 AND is_chuku = 0
|
||||
<![CDATA[
|
||||
<![CDATA[
|
||||
AND DATE(rk_time) <= DATE_SUB(CURDATE(), INTERVAL 20 DAY)
|
||||
]]>
|
||||
ORDER BY rk_time DESC
|
||||
]]>
|
||||
ORDER BY rk_time DESC
|
||||
LIMIT #{limit}
|
||||
</select>
|
||||
|
||||
<select id="selectSapNoByCkBillNo" resultType="java.lang.String">
|
||||
SELECT DISTINCT sap_no FROM rk_info
|
||||
WHERE bill_no = #{billNo} AND sap_no IS NOT NULL
|
||||
@@ -648,7 +614,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
AND pd.scene = #{sceneId}
|
||||
</select>
|
||||
|
||||
|
||||
<select id="countGetByWh" resultType="java.lang.Integer" parameterType="java.lang.String">
|
||||
SELECT COUNT(1) FROM rk_info
|
||||
WHERE is_delete = '0'
|
||||
@@ -662,15 +627,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
r.pcode AS rkPcode,
|
||||
COALESCE(SUM(r.real_qty), 0) AS realQty
|
||||
FROM pcde_detail d
|
||||
JOIN rk_info r
|
||||
ON r.pcode = d.pcode
|
||||
JOIN rk_info r ON r.pcode = d.pcode
|
||||
LEFT JOIN (
|
||||
SELECT DISTINCT pcode
|
||||
FROM inventory_match_scan
|
||||
WHERE task_id = #{taskId}
|
||||
AND status = '0'
|
||||
) s
|
||||
ON s.pcode = r.pcode
|
||||
) s ON s.pcode = r.pcode
|
||||
WHERE (d.is_delete IS NULL OR d.is_delete = '0')
|
||||
AND d.scene = #{sceneId}
|
||||
AND r.is_chuku = '0'
|
||||
@@ -722,8 +685,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
GROUP BY COALESCE(r.bill_no_ck, r.bill_no)
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
<select id="selectRkInfoListByBillNo" resultMap="RkInfoResult"
|
||||
parameterType="java.lang.String">
|
||||
SELECT
|
||||
@@ -750,7 +711,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</select>
|
||||
|
||||
<update id="updateRkInfo" parameterType="RkInfo">
|
||||
update rk_info
|
||||
UPDATE rk_info
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="rkType != null">rk_type = #{rkType},</if>
|
||||
<if test="wlType != null">wl_type = #{wlType},</if>
|
||||
@@ -759,40 +720,62 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="lihuoY != null">lihuo_y = #{lihuoY},</if>
|
||||
<if test="isChuku != null">is_chuku = #{isChuku},</if>
|
||||
<if test="isBorrowed != null">is_borrowed = #{isBorrowed},</if>
|
||||
|
||||
<if test="billNo != null">bill_no = #{billNo},</if>
|
||||
<if test="billNoCk != null">bill_no_ck = #{billNoCk},</if>
|
||||
|
||||
<if test="remark != null">remark = #{remark},</if>
|
||||
<if test="xj != null">xj = #{xj},</if>
|
||||
<if test="xmNo != null">xm_no = #{xmNo},</if>
|
||||
<if test="xmMs != null">xm_ms = #{xmMs},</if>
|
||||
<if test="xmNoCk != null">xm_no_ck = #{xmNoCk},</if>
|
||||
<if test="xmMsCk != null">xm_ms_ck = #{xmMsCk},</if>
|
||||
|
||||
<if test="wlNo != null">wl_no = #{wlNo},</if>
|
||||
<if test="wlMs != null">wl_ms = #{wlMs},</if>
|
||||
|
||||
<if test="gysNo != null">gys_no = #{gysNo},</if>
|
||||
<if test="gysMc != null">gys_mc = #{gysMc},</if>
|
||||
|
||||
<if test="jhAmt != null">jh_amt = #{jhAmt},</if>
|
||||
<if test="htDj != null">ht_dj = #{htDj},</if>
|
||||
<if test="sapNo != null">sap_no = #{sapNo},</if>
|
||||
<if test="xh != null">xh = #{xh},</if>
|
||||
|
||||
<if test="jhQty != null">jh_qty = #{jhQty},</if>
|
||||
<if test="htQty != null">ht_qty = #{htQty},</if>
|
||||
<if test="dw != null">dw = #{dw},</if>
|
||||
<if test="realQty != null">real_qty = #{realQty},</if>
|
||||
|
||||
<if test="pcode != null">pcode = #{pcode},</if>
|
||||
<if test="pcodeId != null">pcode_id = #{pcodeId},</if>
|
||||
<if test="trayCode != null">tray_code = #{trayCode},</if>
|
||||
<if test="entityId != null">entity_id = #{entityId},</if>
|
||||
|
||||
<if test="ckLihuoY != null">ck_lihuo_y = #{ckLihuoY},</if>
|
||||
<if test="ckType != null">ck_type = #{ckType},</if>
|
||||
<if test="teamCode != null">team_code = #{teamCode},</if>
|
||||
|
||||
<if test="lyTime != null">ly_time = #{lyTime},</if>
|
||||
<if test="borrowTime != null">borrow_time = #{borrowTime},</if>
|
||||
<if test="returnTime != null">return_time = #{returnTime},</if>
|
||||
<if test="ckRemark != null">ck_remark = #{ckRemark},</if>
|
||||
|
||||
<if test="isDelivery != null">is_delivery = #{isDelivery},</if>
|
||||
<if test="hasMoved != null">has_moved = #{hasMoved},</if>
|
||||
|
||||
<!-- 新增:封样号 -->
|
||||
<if test="fycde1 != null">fycde_1 = #{fycde1},</if>
|
||||
<if test="fycde2 != null">fycde_2 = #{fycde2},</if>
|
||||
|
||||
<!-- 关联计划 -->
|
||||
<if test="gysJhId != null">gys_jh_id = #{gysJhId},</if>
|
||||
|
||||
<if test="updateBy != null">update_by = #{updateBy},</if>
|
||||
<if test="updateTime != null">update_time = #{updateTime},</if>
|
||||
<if test="isDelete != null">is_delete = #{isDelete},</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
WHERE id = #{id}
|
||||
</update>
|
||||
|
||||
<update id="deleteRkInfoById" parameterType="Long">
|
||||
@@ -907,7 +890,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
ri.is_delete = '0'
|
||||
AND ri.is_delivery = '1'
|
||||
|
||||
<!-- 可选筛选:按你当前 RkInfo 实体常用查询项补充 -->
|
||||
<if test="billNoCk != null and billNoCk != ''">
|
||||
AND ri.bill_no_ck = #{billNoCk}
|
||||
</if>
|
||||
@@ -921,7 +903,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
AND ri.status = #{status}
|
||||
</if>
|
||||
|
||||
<!-- 领用(出库)时间范围 -->
|
||||
<if test="lyStartTime != null">
|
||||
AND ri.ly_time <![CDATA[ >= ]]> #{lyStartTime}
|
||||
</if>
|
||||
@@ -929,7 +910,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
AND ri.ly_time <![CDATA[ <= ]]> #{lyEndTime}
|
||||
</if>
|
||||
|
||||
<!-- 关键字模糊(项目/物料/供应商/出库单号等) -->
|
||||
<if test="keyword != null and keyword != ''">
|
||||
AND (
|
||||
ri.xm_no_ck LIKE CONCAT('%', #{keyword}, '%')
|
||||
@@ -953,34 +933,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<where>
|
||||
(ri.is_delete = '0' OR ri.is_delete = 0 OR ri.is_delete IS NULL)
|
||||
|
||||
<!-- keyword 模糊 -->
|
||||
<if test="keyword != null and keyword != ''">
|
||||
AND (
|
||||
ri.xm_no LIKE CONCAT('%', #{keyword}, '%')
|
||||
OR ri.xm_ms LIKE CONCAT('%', #{keyword}, '%')
|
||||
OR ri.wl_no LIKE CONCAT('%', #{keyword}, '%')
|
||||
OR ri.wl_ms LIKE CONCAT('%', #{keyword}, '%')
|
||||
OR ri.gys_no LIKE CONCAT('%', #{keyword}, '%')
|
||||
OR ri.gys_mc LIKE CONCAT('%', #{keyword}, '%')
|
||||
OR ri.sap_no LIKE CONCAT('%', #{keyword}, '%')
|
||||
OR ri.bill_no LIKE CONCAT('%', #{keyword}, '%')
|
||||
OR ri.bill_no_ck LIKE CONCAT('%', #{keyword}, '%')
|
||||
OR ri.ck_type LIKE CONCAT('%', #{keyword}, '%')
|
||||
OR ri.pcode LIKE CONCAT('%', #{keyword}, '%')
|
||||
)
|
||||
</if>
|
||||
|
||||
<!-- 入/出库状态 -->
|
||||
<if test="isChuku != null and isChuku != ''">
|
||||
AND ri.is_chuku = #{isChuku}
|
||||
</if>
|
||||
|
||||
<!-- 仓库 -->
|
||||
<if test="cangku != null and cangku != ''">
|
||||
AND ri.cangku = #{cangku}
|
||||
</if>
|
||||
|
||||
<!-- 入库时间范围 -->
|
||||
<if test="startTime != null">
|
||||
AND ri.rk_time <![CDATA[ >= ]]> #{startTime}
|
||||
</if>
|
||||
@@ -988,13 +948,52 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
AND ri.rk_time <![CDATA[ <= ]]> #{endTime}
|
||||
</if>
|
||||
|
||||
<!-- 领用(出库)时间范围 -->
|
||||
<if test="lyStartTime != null">
|
||||
AND ri.ly_time <![CDATA[ >= ]]> #{lyStartTime}
|
||||
</if>
|
||||
<if test="lyEndTime != null">
|
||||
AND ri.ly_time <![CDATA[ <= ]]> #{lyEndTime}
|
||||
</if>
|
||||
|
||||
<if test="xmNo != null and xmNo != ''">
|
||||
AND ri.xm_no LIKE CONCAT('%', #{xmNo}, '%')
|
||||
</if>
|
||||
<if test="xmMs != null and xmMs != ''">
|
||||
AND ri.xm_ms LIKE CONCAT('%', #{xmMs}, '%')
|
||||
</if>
|
||||
<if test="wlNo != null and wlNo != ''">
|
||||
AND ri.wl_no LIKE CONCAT('%', #{wlNo}, '%')
|
||||
</if>
|
||||
<if test="wlMs != null and wlMs != ''">
|
||||
AND ri.wl_ms LIKE CONCAT('%', #{wlMs}, '%')
|
||||
</if>
|
||||
<if test="gysNo != null and gysNo != ''">
|
||||
AND ri.gys_no LIKE CONCAT('%', #{gysNo}, '%')
|
||||
</if>
|
||||
<if test="gysMc != null and gysMc != ''">
|
||||
AND ri.gys_mc LIKE CONCAT('%', #{gysMc}, '%')
|
||||
</if>
|
||||
<if test="sapNo != null and sapNo != ''">
|
||||
AND ri.sap_no LIKE CONCAT('%', #{sapNo}, '%')
|
||||
</if>
|
||||
<if test="billNo != null and billNo != ''">
|
||||
AND ri.bill_no LIKE CONCAT('%', #{billNo}, '%')
|
||||
</if>
|
||||
<if test="billNoCk != null and billNoCk != ''">
|
||||
AND ri.bill_no_ck LIKE CONCAT('%', #{billNoCk}, '%')
|
||||
</if>
|
||||
<if test="ckType != null and ckType != ''">
|
||||
AND ri.ck_type LIKE CONCAT('%', #{ckType}, '%')
|
||||
</if>
|
||||
<if test="pcode != null and pcode != ''">
|
||||
AND ri.pcode LIKE CONCAT('%', #{pcode}, '%')
|
||||
</if>
|
||||
<if test="fycde1 != null and fycde1 != ''">
|
||||
AND ri.fycde_1 LIKE CONCAT('%', #{fycde1}, '%')
|
||||
</if>
|
||||
<if test="fycde2 != null and fycde2 != ''">
|
||||
AND ri.fycde_2 LIKE CONCAT('%', #{fycde2}, '%')
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY ri.create_time DESC, ri.id DESC
|
||||
</select>
|
||||
|
||||
Reference in New Issue
Block a user