feat(deletedata): 添加销售订单取消签字和删除功能

- 新增 queryIcGeneralHByCancelSignatureV2 和 querySoSaleByDeletev2 方法
- 实现销售出库单和销售订单的批量取消签字和删除
-优化数据处理逻辑,按日期和单位分组进行批量操作
- 添加定时任务,每10秒重新执行删除操作
This commit is contained in:
liuy 2025-05-07 23:59:11 +08:00
parent 919cc07177
commit 3772150497
7 changed files with 438 additions and 10 deletions

View File

@ -17,10 +17,17 @@ import com.hzya.frame.ttxofs.dto.ofssaleorderoutsearch.HeaderDetailsDto;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
//import org.junit.jupiter.api.Test;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ExecutorService;
@ -71,10 +78,12 @@ public class DeleteU8cDataUtil {
// cancelSignatureIcGeneralHV2("'0001A110000000001TH6', '0001A1100000000VKCOK'");
//销售出库单签字 已测试
// saleOutSign("'0001A110000000001TH6', '0001A1100000000VKCOK'");
cancelSignatureSoSaleReadExcelV2();
}
}
}
}, "U8C销售订单取消签字 2025-03-04");
}, "删除销售订单 2025-05-07");
thread.start();
}
@ -231,7 +240,7 @@ public class DeleteU8cDataUtil {
queryinfo.setCorp(deleteU8cDataUtilEntity.getUnitcode());
queryinfo.setDate_begin(deleteU8cDataUtilEntity.getDbilldate());
queryinfo.setDate_end(deleteU8cDataUtilEntity.getDbilldate());
queryinfo.setBillcode(deleteU8cDataUtilEntity.getVbillcode());
// queryinfo.setBillcode(deleteU8cDataUtilEntity.getVbillcode());
JsonRootBean jsonRootBean = new JsonRootBean();
jsonRootBean.setDeleteInfo(deleteinfo);
@ -319,7 +328,7 @@ public class DeleteU8cDataUtil {
queryinfo.setCorp(deleteU8cDataUtilEntity.getUnitcode());
queryinfo.setDate_begin(deleteU8cDataUtilEntity.getDbilldate());
queryinfo.setDate_end(deleteU8cDataUtilEntity.getDbilldate());
queryinfo.setBillcode(deleteU8cDataUtilEntity.getVbillcode());
// queryinfo.setBillcode(deleteU8cDataUtilEntity.getVbillcode());
JsonRootBean jsonRootBean = new JsonRootBean();
jsonRootBean.setUnsignInfo(deleteinfo);
@ -459,7 +468,7 @@ public class DeleteU8cDataUtil {
queryinfo.setCorp(deleteU8cDataUtilEntity.getUnitcode());
queryinfo.setDate_begin(deleteU8cDataUtilEntity.getDbilldate());
queryinfo.setDate_end(deleteU8cDataUtilEntity.getDbilldate());
queryinfo.setCode(deleteU8cDataUtilEntity.getVreceiptcode());
// queryinfo.setCode(deleteU8cDataUtilEntity.getVreceiptcode());
JsonRootBean jsonRootBean = new JsonRootBean();
jsonRootBean.setDeleteinfo(deleteinfo);
@ -750,4 +759,294 @@ public class DeleteU8cDataUtil {
// 创建一个固定大小的线程池
// ExecutorService executor = Executors.newFixedThreadPool(MAX_THREADS);
/**
* 销售订单取消签字
*/
public void cancelSignatureSoSaleReadExcel() {
try {
FileInputStream file = new FileInputStream(new File("/Users/liuyang/Desktop/U8C-需要删除的单据-带主键.xlsx"));
Workbook workbook = new XSSFWorkbook(file);
List<String[]> data = new ArrayList<>();
for (int i = 0; i < 5; i++) {
Sheet sheet = workbook.getSheetAt(i);
for (Row row : sheet) {
String bValue = "";
String cValue = "";
String dValue = "";
if (row.getCell(1) != null) {
bValue = row.getCell(1).getStringCellValue();
}
if (row.getCell(2) != null) {
cValue = row.getCell(2).getStringCellValue();
}
if (row.getCell(3) != null) {
dValue = row.getCell(3).getStringCellValue();
}
data.add(new String[]{bValue, cValue, dValue});
}
}
// Print the B and C column data
long saleoutNum = 0;
for (String[] rowData : data) {
// System.out.println("B: " + rowData[0] + ", C: " + rowData[1]);
//**销售出库单**
try {
//查找销售订单对应的销售出库单
DeleteIcGeneralHVo deleteIcGeneralHVo = new DeleteIcGeneralHVo();
deleteIcGeneralHVo.setDataSourceCode("lets_u8c");
deleteIcGeneralHVo.setCfirstbillhid(rowData[2]);
List<DeleteU8cDataUtilEntity> soSaleinvoiceEntities = deleteU8cDataUtilDao.queryIcGeneralHByCancelSignatureV2(deleteIcGeneralHVo);
// logger.info("条数:{}", soSaleinvoiceEntities.size());
if (soSaleinvoiceEntities != null && soSaleinvoiceEntities.size() > 0) {
for (int i = 0; i < soSaleinvoiceEntities.size(); i++) {
DeleteU8cDataUtilEntity deleteU8cDataUtilEntity = soSaleinvoiceEntities.get(i);
//销售出库单取消签字
Deleteinfo deleteinfo = new Deleteinfo();
deleteinfo.setCoperator("tbadmin");
Queryinfo queryinfo = new Queryinfo();
queryinfo.setCorp(deleteU8cDataUtilEntity.getUnitcode());
queryinfo.setDate_begin(deleteU8cDataUtilEntity.getDbilldate());
queryinfo.setDate_end(deleteU8cDataUtilEntity.getDbilldate());
// queryinfo.setBillcode(deleteU8cDataUtilEntity.getVbillcode());
JsonRootBean jsonRootBean = new JsonRootBean();
jsonRootBean.setUnsignInfo(deleteinfo);
jsonRootBean.setQueryInfo(queryinfo);
sendU8C("http://39.170.109.90:8088/u8cloud/api/ic/saleout/unsign", JSON.toJSONString(jsonRootBean), 1);
//销售出库单删除
Deleteinfo deleteinfo2 = new Deleteinfo();
deleteinfo2.setCoperator("tbadmin");
Queryinfo queryinfo2 = new Queryinfo();
queryinfo2.setCorp(deleteU8cDataUtilEntity.getUnitcode());
queryinfo2.setDate_begin(deleteU8cDataUtilEntity.getDbilldate());
queryinfo2.setDate_end(deleteU8cDataUtilEntity.getDbilldate());
// queryinfo2.setBillcode(deleteU8cDataUtilEntity.getVbillcode());
JsonRootBean jsonRootBean2 = new JsonRootBean();
jsonRootBean2.setDeleteInfo(deleteinfo2);
jsonRootBean2.setQueryInfo(queryinfo2);
sendU8C("http://39.170.109.90:8088/u8cloud/api/ic/saleout/delete", JSON.toJSONString(jsonRootBean2), 1);
saleoutNum++;
System.out.println("处理的销售出库单数量:" + saleoutNum);
}
}
} catch (Exception e) {
e.printStackTrace();
}
//处理销售订单
try {
//销售订单取消审核
List<String> stringList = new ArrayList<>();
stringList.add(rowData[1]);
JsonRootBeanCancelSignature jsonRootBeanCancelSignature = new JsonRootBeanCancelSignature();
QueryinfoCancelSignature queryinfoCancelSignature = new QueryinfoCancelSignature();
queryinfoCancelSignature.setDate_begin("2025-04-28");
queryinfoCancelSignature.setDate_end("2025-04-30");
queryinfoCancelSignature.setCorp(rowData[0]);
queryinfoCancelSignature.setCode(stringList);
ApproveinfoCancelSignature approveinfoCancelSignature = new ApproveinfoCancelSignature();
approveinfoCancelSignature.setApprovid("tbadmin");
jsonRootBeanCancelSignature.setApproveinfo(approveinfoCancelSignature);
jsonRootBeanCancelSignature.setQueryinfo(queryinfoCancelSignature);
sendU8C("http://39.170.109.90:8088/u8cloud/api/so/saleorder/unapprove", JSON.toJSONString(jsonRootBeanCancelSignature), 1);
//销售订单删除
Deleteinfo deleteinfo = new Deleteinfo();
deleteinfo.setCoperator("tbadmin");
Queryinfo queryinfo = new Queryinfo();
queryinfo.setCorp(rowData[0]);
queryinfo.setDate_begin("2025-04-28");
queryinfo.setDate_end("2025-04-30");
// queryinfo.setCode(rowData[1]);
JsonRootBean jsonRootBean = new JsonRootBean();
jsonRootBean.setDeleteinfo(deleteinfo);
jsonRootBean.setQueryinfo(queryinfo);
sendU8C("http://39.170.109.90:8088/u8cloud/api/so/saleorder/delete", JSON.toJSONString(jsonRootBean), 1);
} catch (Exception e) {
e.printStackTrace();
}
}
workbook.close();
file.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 销售出库单销售订单取消签字+删除
*/
public void cancelSignatureSoSaleReadExcelV2() {
try {
FileInputStream file = new FileInputStream(new File("D:\\server\\软件包\\U8C-需要删除的单据-带主键.xlsx"));
// FileInputStream file = new FileInputStream(new File("/Users/liuyang/Desktop/U8C-需要删除的单据-带主键.xlsx"));
Workbook workbook = new XSSFWorkbook(file);
List<String[]> data = new ArrayList<>();
for (int i = 0; i < 5; i++) {
Sheet sheet = workbook.getSheetAt(i);
for (Row row : sheet) {
String bValue = "";
String cValue = "";
String dValue = "";
if (row.getCell(1) != null) {
bValue = row.getCell(1).getStringCellValue();
}
if (row.getCell(2) != null) {
cValue = row.getCell(2).getStringCellValue();
}
if (row.getCell(3) != null) {
dValue = row.getCell(3).getStringCellValue();
}
data.add(new String[]{bValue, cValue, dValue});
}
}
//按100行拆分
List<List<String[]>> lists = SplitListByCountUtil.splitListByCount(data, 100);
for (int i = 0; i < lists.size(); i++) {
List<String[]> strings = lists.get(i);
//处理销售出库单
String result = strings.stream().filter(arr -> arr.length > 2) // 确保有第三个元素索引2
.map(arr -> arr[2]).filter(Objects::nonNull).map(s -> "'" + s + "'") // 添加单引号包装
.collect(Collectors.joining(","));
//根据销售订单主键查询对应的销售出库单
DeleteIcGeneralHVo deleteIcGeneralHVo = new DeleteIcGeneralHVo();
deleteIcGeneralHVo.setDataSourceCode("lets_u8c");
deleteIcGeneralHVo.setCfirstbillhids(result);
List<DeleteU8cDataUtilEntity> soSaleinvoiceEntities = deleteU8cDataUtilDao.queryIcGeneralHByCancelSignatureV2(deleteIcGeneralHVo);
Map<String, List<DeleteU8cDataUtilEntity>> stringListMap = groupByDbilldatev2(soSaleinvoiceEntities);
if (stringListMap.size() > 0) {
for (Map.Entry<String, List<DeleteU8cDataUtilEntity>> entry : stringListMap.entrySet()) {
String key = entry.getKey();
List<DeleteU8cDataUtilEntity> valueList = entry.getValue();
List<String> vreceiptcodeList = valueList.stream().map(DeleteU8cDataUtilEntity::getVbillcode).collect(Collectors.toList());
String[] split = key.split("@@@@");
//批量销售出库单取消签字
Deleteinfo deleteinfo = new Deleteinfo();
deleteinfo.setCoperator("tbadmin");
Queryinfo queryinfo = new Queryinfo();
queryinfo.setCorp(split[1]);
queryinfo.setDate_begin(split[0]);
queryinfo.setDate_end(split[0]);
queryinfo.setBillcode(vreceiptcodeList);
JsonRootBean jsonRootBean = new JsonRootBean();
jsonRootBean.setUnsignInfo(deleteinfo);
jsonRootBean.setQueryInfo(queryinfo);
sendU8C("http://39.170.109.90:8088/u8cloud/api/ic/saleout/unsign", JSON.toJSONString(jsonRootBean), vreceiptcodeList.size());
//批量销售出库单删除
Deleteinfo deleteinfo2 = new Deleteinfo();
deleteinfo2.setCoperator("tbadmin");
Queryinfo queryinfo2 = new Queryinfo();
queryinfo2.setCorp(split[1]);
queryinfo2.setDate_begin(split[0]);
queryinfo2.setDate_end(split[0]);
queryinfo2.setBillcode(vreceiptcodeList);
JsonRootBean jsonRootBean2 = new JsonRootBean();
jsonRootBean2.setDeleteInfo(deleteinfo2);
jsonRootBean2.setQueryInfo(queryinfo2);
sendU8C("http://39.170.109.90:8088/u8cloud/api/ic/saleout/delete", JSON.toJSONString(jsonRootBean2), vreceiptcodeList.size());
}
}
//处理销售订单
DeleteSoSaleVo deleteSoSaleVo = new DeleteSoSaleVo();
deleteSoSaleVo.setDataSourceCode("lets_u8c");
deleteSoSaleVo.setCsaleids(result);
List<DeleteU8cDataUtilEntity> deleteU8cDataUtilEntities = deleteU8cDataUtilDao.querySoSaleByDeletev2(deleteSoSaleVo);
Map<String, List<DeleteU8cDataUtilEntity>> deleteU8cDataUtilEntitiesMap = groupByDbilldatev2(deleteU8cDataUtilEntities);
if (deleteU8cDataUtilEntitiesMap.size() > 0) {
for (Map.Entry<String, List<DeleteU8cDataUtilEntity>> entry : deleteU8cDataUtilEntitiesMap.entrySet()) {
String key = entry.getKey();
List<DeleteU8cDataUtilEntity> valueList = entry.getValue();
List<String> vreceiptcodeList = valueList.stream().map(DeleteU8cDataUtilEntity::getVreceiptcode).collect(Collectors.toList());
String[] split = key.split("@@@@");
//批量销售订单取消审核
JsonRootBeanCancelSignature jsonRootBeanCancelSignature = new JsonRootBeanCancelSignature();
QueryinfoCancelSignature queryinfoCancelSignature = new QueryinfoCancelSignature();
queryinfoCancelSignature.setDate_begin(split[0]);
queryinfoCancelSignature.setDate_end(split[0]);
queryinfoCancelSignature.setCorp(split[1]);
queryinfoCancelSignature.setCode(vreceiptcodeList);
ApproveinfoCancelSignature approveinfoCancelSignature = new ApproveinfoCancelSignature();
approveinfoCancelSignature.setApprovid("tbadmin");
jsonRootBeanCancelSignature.setApproveinfo(approveinfoCancelSignature);
jsonRootBeanCancelSignature.setQueryinfo(queryinfoCancelSignature);
sendU8C("http://39.170.109.90:8088/u8cloud/api/so/saleorder/unapprove", JSON.toJSONString(jsonRootBeanCancelSignature), vreceiptcodeList.size());
//批量销售订单删除
Deleteinfo deleteinfo = new Deleteinfo();
deleteinfo.setCoperator("tbadmin");
Queryinfo queryinfo = new Queryinfo();
queryinfo.setCorp(split[1]);
queryinfo.setDate_begin(split[0]);
queryinfo.setDate_end(split[0]);
queryinfo.setCode(vreceiptcodeList);
JsonRootBean jsonRootBean = new JsonRootBean();
jsonRootBean.setDeleteinfo(deleteinfo);
jsonRootBean.setQueryinfo(queryinfo);
sendU8C("http://39.170.109.90:8088/u8cloud/api/so/saleorder/delete", JSON.toJSONString(jsonRootBean), vreceiptcodeList.size());
}
}
}
workbook.close();
file.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
//每10秒重新删除一次
Thread.sleep(10000);
cancelSignatureSoSaleReadExcelV2();
} catch (Exception e) {
e.printStackTrace();
}
}
public Map<String, List<DeleteU8cDataUtilEntity>> groupByDbilldatev2(List<DeleteU8cDataUtilEntity> soSaleinvoiceEntities) {
Map<String, List<DeleteU8cDataUtilEntity>> resultMap = new HashMap<>();
for (DeleteU8cDataUtilEntity entity : soSaleinvoiceEntities) {
String dbilldate = entity.getDbilldate();
String unitcode = entity.getUnitcode();
// 如果 map 中不包含该日期则创建一个新的列表
resultMap.computeIfAbsent(dbilldate + "@@@@" + unitcode, k -> new ArrayList<>()).add(entity);
}
return resultMap;
}
}

View File

@ -37,6 +37,13 @@ public interface DeleteU8cDataUtilDao extends IBaseDao<DeleteU8cDataUtilEntity,
*/
List<DeleteU8cDataUtilEntity> queryIcGeneralHByCancelSignature(DeleteIcGeneralHVo deleteIcGeneralHVo) throws Exception;
/**
* 查询需要取消签字的销售出库单
*
* @author liuyang
*/
List<DeleteU8cDataUtilEntity> queryIcGeneralHByCancelSignatureV2(DeleteIcGeneralHVo deleteIcGeneralHVo) throws Exception;
/**
* 查询需要取消签字的销售出库单
*
@ -51,6 +58,13 @@ public interface DeleteU8cDataUtilDao extends IBaseDao<DeleteU8cDataUtilEntity,
*/
List<DeleteU8cDataUtilEntity> querySoSaleByDelete(DeleteSoSaleVo deleteSoSaleVo) throws Exception;
/**
* 查询需要删除的销售订单
*
* @author liuyang
*/
List<DeleteU8cDataUtilEntity> querySoSaleByDeletev2(DeleteSoSaleVo deleteSoSaleVo) throws Exception;
/**
* 弃审应收单
*

View File

@ -38,6 +38,12 @@ public class DeleteU8cDataUtilDaoImpl extends MybatisGenericDao<DeleteU8cDataUti
return query("com.hzya.frame.deletedata.dao.impl.DeleteU8cDataUtilDaoImpl.queryIcGeneralHByCancelSignature", deleteIcGeneralHVo);
}
@DS("lets_u8c")
@Override
public List<DeleteU8cDataUtilEntity> queryIcGeneralHByCancelSignatureV2(DeleteIcGeneralHVo deleteIcGeneralHVo) throws Exception {
return query("com.hzya.frame.deletedata.dao.impl.DeleteU8cDataUtilDaoImpl.queryIcGeneralHByCancelSignatureV2", deleteIcGeneralHVo);
}
@DS("lets_u8c")
@Override
public List<DeleteU8cDataUtilEntity> queryIcGeneralHBySign(DeleteIcGeneralHVo deleteIcGeneralHVo) throws Exception {
@ -51,6 +57,12 @@ public class DeleteU8cDataUtilDaoImpl extends MybatisGenericDao<DeleteU8cDataUti
return query("com.hzya.frame.deletedata.dao.impl.DeleteU8cDataUtilDaoImpl.querySoSaleByDelete", deleteIcGeneralHVo);
}
@DS("lets_u8c")
@Override
public List<DeleteU8cDataUtilEntity> querySoSaleByDeletev2(DeleteSoSaleVo deleteSoSaleVo) throws Exception {
return query("com.hzya.frame.deletedata.dao.impl.DeleteU8cDataUtilDaoImpl.querySoSaleByDeletev2", deleteSoSaleVo);
}
@DS("lets_u8c")
@Override
public List<DeleteU8cDataUtilEntity> abandonmentAccountsReceivableDoc(DeleteSoSaleVo deleteSoSaleVo) throws Exception {

View File

@ -80,6 +80,37 @@
AND dbilldate &lt;= '2025-02-28'
</select>
<select id="queryIcGeneralHByCancelSignatureV2" parameterType="com.hzya.frame.deletedata.vo.DeleteIcGeneralHVo" resultMap="get-IcGeneralHByDelete-result">
SELECT
a.cgeneralhid,
a.vbillcode,
a.dbilldate,
a.cbiztype,
a.fbillflag,
a.pk_corp,
b.unitname,
b.unitcode
FROM
ic_general_h a
LEFT JOIN bd_corp b ON b.pk_corp = a.pk_corp
WHERE
a.cgeneralhid IN (
SELECT
cgeneralhid
FROM
ic_general_b
WHERE
dr = 0
<if test="cfirstbillhid!=null and cfirstbillhid!=''">
AND cfirstbillhid = #{cfirstbillhid}
</if>
<if test="cfirstbillhids!=null and cfirstbillhids!=''">
AND cfirstbillhid in (${cfirstbillhids})
</if>
) and a.dr = 0
</select>
<select id="queryIcGeneralHBySign" parameterType="com.hzya.frame.deletedata.vo.DeleteIcGeneralHVo" resultMap="get-IcGeneralHByDelete-result">
SELECT
a.cgeneralhid,
@ -133,6 +164,31 @@
a.PK_CORP ASC
</select>
<select id="querySoSaleByDeletev2" parameterType="com.hzya.frame.deletedata.vo.DeleteSoSaleVo" resultMap="get-SoSaleByDelete-result">
SELECT
a.csaleid,
a.vreceiptcode,
a.dbilldate,
a.cbiztype,
a.fstatus,
a.pk_corp,
b.unitname,
b.unitcode
FROM
so_sale a
LEFT JOIN bd_corp b ON b.pk_corp = a.pk_corp
WHERE
1=1
<if test="csaleids!=null and csaleids!=''">
AND a.csaleid in (${csaleids})
</if>
AND a.dr = 0
ORDER BY
a.DBILLDATE,
a.PK_CORP ASC
</select>
<!--查询已审核的应收单-->
<select id="abandonmentAccountsReceivableDoc" parameterType="com.hzya.frame.deletedata.vo.DeleteSoSaleVo" resultMap="get-SoSaleByDelete-result">
-- SELECT

View File

@ -21,6 +21,26 @@ public class DeleteIcGeneralHVo extends BaseEntity {
private String unitname;
private String unitcode;
private String cfirstbillhid;
private String cfirstbillhids;
public String getCfirstbillhids() {
return cfirstbillhids;
}
public void setCfirstbillhids(String cfirstbillhids) {
this.cfirstbillhids = cfirstbillhids;
}
public String getCfirstbillhid() {
return cfirstbillhid;
}
public void setCfirstbillhid(String cfirstbillhid) {
this.cfirstbillhid = cfirstbillhid;
}
public String getCgeneralhid() {
return cgeneralhid;
}

View File

@ -20,6 +20,16 @@ public class DeleteSoSaleVo extends BaseEntity {
private String unitname;
private String unitcode;
private String csaleids;
public String getCsaleids() {
return csaleids;
}
public void setCsaleids(String csaleids) {
this.csaleids = csaleids;
}
public String getCsaleid() {
return csaleid;
}

View File

@ -4,6 +4,7 @@
package com.hzya.frame.deletedata.vo;
import java.util.Date;
import java.util.List;
/**
* Auto-generated: 2024-12-18 19:6:3
@ -16,22 +17,38 @@ public class Queryinfo {
private String corp;
private String date_begin;
private String date_end;
private String code;
private String billcode;
private List<String> code;
private List<String> billcode;
public String getBillcode() {
// public String getBillcode() {
// return billcode;
// }
//
// public void setBillcode(String billcode) {
// this.billcode = billcode;
// }
public List<String> getBillcode() {
return billcode;
}
public void setBillcode(String billcode) {
public void setBillcode(List<String> billcode) {
this.billcode = billcode;
}
public String getCode() {
// public String getCode() {
// return code;
// }
//
// public void setCode(String code) {
// this.code = code;
// }
public List<String> getCode() {
return code;
}
public void setCode(String code) {
public void setCode(List<String> code) {
this.code = code;
}