Compare commits

...

2 Commits

Author SHA1 Message Date
lsymicc
05d2c7bbbc Merge remote-tracking branch 'origin/main' 2025-12-08 15:28:32 +08:00
lsymicc
12a3e92039 获取入库子单和主单 2025-12-08 15:24:35 +08:00
15 changed files with 290 additions and 55 deletions

View File

@@ -1,5 +1,6 @@
package com.ruoyi.api.controller;
import com.ruoyi.api.domain.erp.ErpStockinParam;
import com.ruoyi.api.service.IToErpService;
import com.ruoyi.bas.BasCustomer.domain.BasCustomer;
import com.ruoyi.bas.BasProduct.domain.BasProduct;
@@ -55,4 +56,10 @@ public class ToErpApiController {
toErpService.login();
return AjaxResult.success();
}
@PostMapping("/qqq")
public AjaxResult qqq() {
ErpStockinParam p=new ErpStockinParam();
return toErpService.getStockinList(p);
}
}

View File

@@ -9,7 +9,7 @@ import java.util.List;
* 入库确认请求参数
*/
@Data
public class StockinConFirmParam {
public class ErpStockinConFirmParam {
/**
* 单据ID(整数,如 0 表示新单)

View File

@@ -0,0 +1,14 @@
package com.ruoyi.api.domain.erp;
import cn.hutool.core.annotation.Alias;
import lombok.Data;
import java.util.List;
@Data
public class ErpStockinDetailResponse {
@Alias("Clos")
private List<String> cols;
@Alias("Rows")
private List<List<Object>> rows;
}

View File

@@ -4,15 +4,13 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 获取入库单据列表
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class StockinParam {
public class ErpStockinParam {
/**
* 过滤条件:申请开始时间(格式:yyyy-MM-dd HH:mm:ss)
@@ -37,17 +35,17 @@ public class StockinParam {
/**
* 过滤条件:入库类别(字典值,如 1=采购入库, 2=生产入库...)
*/
private Integer sort1;
private Integer sort1 = 0;
/**
* 过滤条件:入库状态(0=全部, 1=待入库, 2=已入库, 3=已取消...)
*/
private Integer complete1;
private Integer complete1 = 1;
/**
* 过滤条件:入库主题(模糊匹配)
*/
private String title;
private String title = "冷";
/**
* 过滤条件:入库编号(精确匹配,如 RK_2025120501)
@@ -77,16 +75,16 @@ public class StockinParam {
/**
* 过滤条件:是否返回明细信息(0=否,1=是)
*/
private Integer needList;
private Integer needList = 1;
/**
* 每页返回数据行数(默认 20)
*/
private Integer pageSize;
private Integer pageSize = 20;
/**
* 从第几页开始返回(默认 1,即第一页)
*/
private Integer pageIndex;
private Integer pageIndex = 1;
}

View File

@@ -0,0 +1,21 @@
package com.ruoyi.api.domain.erp;
import cn.hutool.core.annotation.Alias;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
public class ErpStockinResponse {
@Alias("Page")
private Page page;
@Alias("Cols")
private List<String> cols;
@Alias("Rows")
private List<List<Object>> rows;
}

View File

@@ -1,5 +1,6 @@
package com.ruoyi.api.service;
import com.ruoyi.api.domain.erp.ErpStockinParam;
import com.ruoyi.api.domain.erp.ReceiveOutStockConfirm;
import com.ruoyi.bas.BasCustomer.domain.BasCustomer;
import com.ruoyi.bas.BasProduct.domain.BasProduct;
@@ -29,4 +30,7 @@ public interface IToErpService {
AjaxResult callErp(ReceiveOutStockConfirm receiveOutStockConfirm);
AjaxResult receiveOutStockList();
AjaxResult getStockinList(ErpStockinParam erpStockinParam);
}

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
@@ -18,7 +19,10 @@ import com.ruoyi.bas.BasSupplier.domain.BasSupplier;
import com.ruoyi.bas.BasSupplier.service.IBasSupplierService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.uuid.UUID;
import com.ruoyi.in.ErpInStockin.domain.ErpInStockin;
import com.ruoyi.in.ErpInStockin.service.IErpInStockinService;
import com.ruoyi.in.ErpInStockinDetail.domain.ErpInStockinDetail;
import com.ruoyi.in.ErpInStockinDetail.service.IErpInStockinDetailService;
import com.ruoyi.out.ErpOutStock.domain.ErpOutStock;
import com.ruoyi.out.OutStockMiddle.domain.OutStockMiddle;
import com.ruoyi.out.ErpOutStockDetail.domain.ErpOutStockDetail;
@@ -29,8 +33,8 @@ import com.ruoyi.out.outStockout.service.IOutStockoutService;
import com.ruoyi.out.OutStockMiddle.service.IOutStockMiddleService;
import com.ruoyi.bas.basJobId.service.IBasJobIdService;
import com.ruoyi.out.outStockoutDetail.domain.OutStockoutDetail;
import com.ruoyi.out.ErpOutStockDetail.service.IErpOutStockDetailService;
import com.ruoyi.out.outStockoutDetail.service.IOutStockoutDetailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -42,6 +46,7 @@ import java.util.concurrent.TimeUnit;
/**
* 作业统计 Service 实现
*/
@Slf4j
@Service
public class ToErpServiceImpl implements IToErpService {
@@ -66,6 +71,12 @@ public class ToErpServiceImpl implements IToErpService {
@Autowired
private IOutStockoutDetailService outStockoutDetailService;
@Autowired
private IErpInStockinService erpInStockinService;
@Autowired
private IErpInStockinDetailService erpInStockinDetailService;
@Autowired
private IBasJobIdService basJobIdService;
@@ -87,6 +98,10 @@ public class ToErpServiceImpl implements IToErpService {
private static final String outStockListUrl = erpUrl+"/webapi/v3/store/KuOutApplyList";
private static final String outStockConfirmUrl = erpUrl+"/webapi/v3/store/KuOutApplyEdit/edit";
private static final String getStockinListUrl = erpUrl+"/webapi/v3/store/KuInApplyList";
private static final String stockinConfirmUrl = erpUrl+"/webapi/v3/store/KuInApplyEdit/edit";
@Override
public Map<String, String> saveTransferBill() {
@@ -398,4 +413,120 @@ public class ToErpServiceImpl implements IToErpService {
return AjaxResult.error(callErpResponse.getMsg());
}
}
/**
* 请求入库单列表
*
* @param erpStockinParam
* @return
*/
public AjaxResult getStockinList(ErpStockinParam erpStockinParam){
erpStockinParam = new ErpStockinParam();
//测试
erpStockinParam.setTitle("");
// erpStockinParam.setNeedList(0);
//获取请求参数
String requestSession = login();
String response = HttpRequest.post(getStockinListUrl)
.header(TOKEN_KEY,requestSession)
.body(JSONUtil.toJsonStr(erpStockinParam))
.execute()
.body();
//处理响应信息
try {
ErpStockinResponse res = JSONUtil.toBean(response, ErpStockinResponse.class);
for (List<Object> list : res.getRows()) {
//获取入库主单参数
ErpInStockin erpInStockin = new ErpInStockin();
erpInStockin.setTitle(Convert.toStr(list.get(0)));
erpInStockin.setKuin(Convert.toStr(list.get(1)));
erpInStockin.setComplete1(Convert.toStr(list.get(2)));
erpInStockin.setCateid(Convert.toStr(list.get(3)));
erpInStockin.setDate3(Convert.toStr(list.get(4)));
erpInStockin.setDate5(Convert.toStr(list.get(5)));
erpInStockin.setCatein(Convert.toStr(list.get(6)));
erpInStockin.setIntro2(Convert.toStr(list.get(7)));
erpInStockin.setIntro(Convert.toStr(list.get(8)));
erpInStockin.setCaigou(Convert.toStr(list.get(9)));
erpInStockin.setDate7(Convert.toStr(list.get(10)));
erpInStockin.setKg(Convert.toStr(list.get(11)));
erpInStockin.setSort1(Convert.toStr(list.get(12)));
erpInStockin.setRkbh(Convert.toStr(list.get(13)));
erpInStockin.setStatus(Convert.toStr(list.get(14)));
//todo 入库单明细长度?
erpInStockin.setKuinList(Convert.toStr(list.get(15)));
erpInStockin.setSysIcusIInheritIdIidI413(Convert.toStr(list.get(16)));
erpInStockin.setSysIcusIInheritIdIidI414(Convert.toStr(list.get(17)));
erpInStockin.setSysIcusIInheritIdIidI415(Convert.toStr(list.get(18)));
erpInStockin.setStockinGuid(UUID.randomUUID().toString());
//校验单据是否已经在表中 - 新增/更新
if (ObjUtil.isNotNull(erpInStockinService.selectErpInStockinByKuin(erpInStockin.getKuin()))) {
erpInStockinService.updateErpInStockin(erpInStockin);
}else{
erpInStockinService.insertErpInStockin(erpInStockin);
}
//========================================================================================================================================
//根据主单【kuinlist】字段获取子单信息
if (erpStockinParam.getNeedList() == 1) {
//获取子单明细
JSONObject jsonObject = JSONUtil.parseObj(erpInStockin.getKuinList());
jsonObject.get("rows");
ErpStockinDetailResponse resDetail = JSONUtil.toBean(erpInStockin.getKuinList(), ErpStockinDetailResponse.class);
//生成子单信息
for (List<Object> details : resDetail.getRows()){
//获取入库子单数据
ErpInStockinDetail erpInStockinDetail = new ErpInStockinDetail();
erpInStockinDetail.setId(Convert.toLong(details.get(0)));//明细id
erpInStockinDetail.setQuantity(Convert.toLong(details.get(9)));//入库数量
erpInStockinDetail.setAssistUnit(Convert.toLong(details.get(5)));//辅助单位
erpInStockinDetail.setAssistQuantity(Convert.toLong(details.get(9)));//辅助数量
erpInStockinDetail.setWarehousePositionID(0L);//货位
erpInStockinDetail.setKu(0L);//库区
erpInStockinDetail.setPh(Convert.toStr(details.get(17)));//批号
erpInStockinDetail.setPh(Convert.toStr(details.get(18)));//序列号
erpInStockinDetail.setPh(Convert.toStr(details.get(19)));//生产日期
erpInStockinDetail.setPh(Convert.toStr(details.get(20)));//有效日期
erpInStockinDetail.setPh(Convert.toStr(details.get(21)));//到货日期
erpInStockinDetail.setPh(Convert.toStr(details.get(29)));//装卸工
erpInStockinDetail.setSpare1(Convert.toStr(details.get(1)));//产品名称 - product_name
erpInStockinDetail.setSpare2(Convert.toStr(details.get(2)));//产品型号 - product_id
//关联主单
erpInStockinDetail.setKuin(erpInStockin.getKuin());//入库id
erpInStockinDetail.setRkbh(erpInStockin.getRkbh());//入库编号
//校验数据是否已经在表中 - 新增/更新
if (ObjUtil.isNotNull(erpInStockinDetailService.selectErpInStockinDetailById(erpInStockinDetail.getId()))) {
erpInStockinDetailService.updateErpInStockinDetail(erpInStockinDetail);
}else{
erpInStockinDetailService.insertErpInStockinDetail(erpInStockinDetail);
}
}
}else {
log.info("请求未获取子单详情【needList:0】");
}
}
}catch(Exception e){
log.error("请求异常:" + e.getMessage());
return AjaxResult.error();
}
return AjaxResult.success();
}
}

View File

@@ -66,7 +66,7 @@ public class ErpInStockinController extends BaseController
@GetMapping(value = "/{title}")
public AjaxResult getInfo(@PathVariable("title") String title)
{
return success(erpInStockinService.selectErpInStockinByTitle(title));
return success(erpInStockinService.selectErpInStockinByKuin(title));
}
/**
@@ -97,8 +97,8 @@ public class ErpInStockinController extends BaseController
@PreAuthorize("@ss.hasPermi('in:ErpInStockin:remove')")
@Log(title = "入库主表单", businessType = BusinessType.DELETE)
@DeleteMapping("/{titles}")
public AjaxResult remove(@PathVariable String[] titles)
public AjaxResult remove(@PathVariable String[] kuins)
{
return toAjax(erpInStockinService.deleteErpInStockinByTitles(titles));
return toAjax(erpInStockinService.deleteErpInStockinByKuins(kuins));
}
}

View File

@@ -1,5 +1,7 @@
package com.ruoyi.in.ErpInStockin.domain;
import cn.hutool.core.annotation.Alias;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
@@ -11,6 +13,7 @@ import com.ruoyi.common.core.domain.BaseEntity;
* @author ruoyi
* @date 2025-12-08
*/
@Data
public class ErpInStockin extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@@ -14,10 +14,10 @@ public interface ErpInStockinMapper
/**
* 查询入库主表单
*
* @param title 入库主表单主键
* @param kuin 入库主表单主键
* @return 入库主表单
*/
public ErpInStockin selectErpInStockinByTitle(String title);
public ErpInStockin selectErpInStockinByKuin(String kuin);
/**
* 查询入库主表单列表
@@ -44,18 +44,26 @@ public interface ErpInStockinMapper
public int updateErpInStockin(ErpInStockin erpInStockin);
/**
* 删除入库主表单
*
* @param title 入库主表单主键
* 插入/修改入库主表单
*
* @param erpInStockin 入库主表单
* @return 结果
*/
public int deleteErpInStockinByTitle(String title);
public int upsertErpInStockin(ErpInStockin erpInStockin);
/**
* 删除入库主表单
*
* @param kuin 入库主表单主键
* @return 结果
*/
public int deleteErpInStockinByKuin(String kuin);
/**
* 批量删除入库主表单
*
* @param titles 需要删除的数据主键集合
* @param kuins 需要删除的数据主键集合
* @return 结果
*/
public int deleteErpInStockinByTitles(String[] titles);
public int deleteErpInStockinByKuins(String[] kuins);
}

View File

@@ -14,10 +14,10 @@ public interface IErpInStockinService
/**
* 查询入库主表单
*
* @param title 入库主表单主键
* @param kuin 入库主表单主键
* @return 入库主表单
*/
public ErpInStockin selectErpInStockinByTitle(String title);
public ErpInStockin selectErpInStockinByKuin(String kuin);
/**
* 查询入库主表单列表
@@ -44,18 +44,26 @@ public interface IErpInStockinService
public int updateErpInStockin(ErpInStockin erpInStockin);
/**
* 批量删除入库主表单
*
* @param titles 需要删除的入库主表单主键集合
* 插入/修改入库主表单
*
* @param erpInStockin 入库主表单
* @return 结果
*/
public int deleteErpInStockinByTitles(String[] titles);
public int upsertErpInStockin(ErpInStockin erpInStockin);
/**
* 批量删除入库主表单
*
* @param kuins 需要删除的入库主表单主键集合
* @return 结果
*/
public int deleteErpInStockinByKuins(String[] kuins);
/**
* 删除入库主表单信息
*
* @param title 入库主表单主键
* @param kuin 入库主表单主键
* @return 结果
*/
public int deleteErpInStockinByTitle(String title);
public int deleteErpInStockinByKuin(String kuin);
}

View File

@@ -22,13 +22,13 @@ public class ErpInStockinServiceImpl implements IErpInStockinService
/**
* 查询入库主表单
*
* @param title 入库主表单主键
* @param stockinId 入库主表单主键
* @return 入库主表单
*/
@Override
public ErpInStockin selectErpInStockinByTitle(String title)
public ErpInStockin selectErpInStockinByKuin(String stockinId)
{
return erpInStockinMapper.selectErpInStockinByTitle(title);
return erpInStockinMapper.selectErpInStockinByKuin(stockinId);
}
/**
@@ -68,26 +68,37 @@ public class ErpInStockinServiceImpl implements IErpInStockinService
}
/**
* 批量删除入库主表单
*
* @param titles 需要删除的入库主表单主键
* 插入/修改入库主表单
*
* @param erpInStockin 入库主表单
* @return 结果
*/
@Override
public int deleteErpInStockinByTitles(String[] titles)
public int upsertErpInStockin(ErpInStockin erpInStockin)
{
return erpInStockinMapper.deleteErpInStockinByTitles(titles);
return erpInStockinMapper.upsertErpInStockin(erpInStockin);
}
/**
* 批量删除入库主表单
*
* @param stockinIds 需要删除的入库主表单主键
* @return 结果
*/
@Override
public int deleteErpInStockinByKuins(String[] kuins)
{
return erpInStockinMapper.deleteErpInStockinByKuins(kuins);
}
/**
* 删除入库主表单信息
*
* @param title 入库主表单主键
* @param stockinId 入库主表单主键
* @return 结果
*/
@Override
public int deleteErpInStockinByTitle(String title)
public int deleteErpInStockinByKuin(String kuin)
{
return erpInStockinMapper.deleteErpInStockinByTitle(title);
return erpInStockinMapper.deleteErpInStockinByKuin(kuin);
}
}

View File

@@ -1,5 +1,7 @@
package com.ruoyi.in.ErpInStockinDetail.domain;
import cn.hutool.core.annotation.Alias;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
@@ -11,6 +13,7 @@ import com.ruoyi.common.core.domain.BaseEntity;
* @author ruoyi
* @date 2025-12-08
*/
@Data
public class ErpInStockinDetail extends BaseEntity
{
private static final long serialVersionUID = 1L;
@@ -70,6 +73,19 @@ public class ErpInStockinDetail extends BaseEntity
@Excel(name = "入库编号", readConverterExp = "关=联主单")
private String rkbh;
/**
* 产品类型 - product_name
*/
private String spare1;
/**
* 产品型号 - product_id
*/
private String spare2;
private String spare3;
private String spare4;
private String spare5;
public void setId(Long id)
{
this.id = id;

View File

@@ -1,17 +1,13 @@
package com.ruoyi.in.stockin.service.impl;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.in.stockindetail.domain.InStockinDetail;
import com.ruoyi.in.stockindetail.service.IInStockinDetailService;
import com.ruoyi.receive.stockindetail.domain.ReceiveStockinDetail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.in.stockin.mapper.InStockinMapper;

View File

@@ -57,9 +57,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where>
</select>
<select id="selectErpInStockinByTitle" parameterType="String" resultMap="ErpInStockinResult">
<select id="selectErpInStockinByKuin" parameterType="String" resultMap="ErpInStockinResult">
<include refid="selectErpInStockinVo"/>
where title = #{title}
where kuin = #{kuin}
</select>
<insert id="insertErpInStockin" parameterType="ErpInStockin">
@@ -133,17 +133,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="sysIcusIInheritIdIidI415 != null">sysIcusIInheritIdIidI415 = #{sysIcusIInheritIdIidI415},</if>
<if test="stockinGuid != null">stockin_guid = #{stockinGuid},</if>
</trim>
where title = #{title}
where kuin = #{kuin}
</update>
<delete id="deleteErpInStockinByTitle" parameterType="String">
delete from erp_in_stockin where title = #{title}
<insert id="upsertErpInStockin" parameterType="ErpInStockin">
-- MERGE erp_in_stockin as tar
-- USING (
-- SELECT
-- job_id,
-- status,
-- on_line_type,
-- task_no,
-- tray_code,
-- cargo_space_id,
-- execution_phase,
-- create_time
-- FROM mydo_job
-- WHERE status = 0
-- ) as src
-- ON tar.stockin_id = src.stockin_id
</insert>
<delete id="deleteErpInStockinByKuin" parameterType="String">
delete from erp_in_stockin where kuin = #{kuin}
</delete>
<delete id="deleteErpInStockinByTitles" parameterType="String">
delete from erp_in_stockin where title in
<foreach item="title" collection="array" open="(" separator="," close=")">
#{title}
<delete id="deleteErpInStockinByKuins" parameterType="String">
delete from erp_in_stockin where kuin in
<foreach item="kuin" collection="array" open="(" separator="," close=")">
#{kuin}
</foreach>
</delete>
</mapper>