|
|
@@ -4,21 +4,23 @@ import com.alibaba.fastjson.JSON;
|
|
|
import com.uas.platform.b2b.constant.StringConstant;
|
|
|
import com.uas.platform.b2b.core.util.BoundedExecutor;
|
|
|
import com.uas.platform.b2b.core.util.ContextUtils;
|
|
|
-import com.uas.platform.b2b.core.util.StringUtil;
|
|
|
import com.uas.platform.b2b.dao.CommonDao;
|
|
|
import com.uas.platform.b2b.dao.CommunalLogDao;
|
|
|
import com.uas.platform.b2b.dao.EnterpriseDao;
|
|
|
+import com.uas.platform.b2b.dao.PurcApCheckDao;
|
|
|
import com.uas.platform.b2b.dao.PurchaseApCheckDao;
|
|
|
import com.uas.platform.b2b.dao.PurchaseApCheckDoneDao;
|
|
|
import com.uas.platform.b2b.dao.PurchaseApCheckItemDao;
|
|
|
import com.uas.platform.b2b.dao.PurchaseApCheckTodoDao;
|
|
|
import com.uas.platform.b2b.dao.VendorDao;
|
|
|
import com.uas.platform.b2b.event.PurchaseApCheckReplyReleaseEvent;
|
|
|
+import com.uas.platform.b2b.model.ApCheckTable;
|
|
|
import com.uas.platform.b2b.model.CommunalLog;
|
|
|
import com.uas.platform.b2b.model.DateFilter;
|
|
|
import com.uas.platform.b2b.model.Enterprise;
|
|
|
import com.uas.platform.b2b.model.OrderRedDotAll;
|
|
|
import com.uas.platform.b2b.model.OrderType;
|
|
|
+import com.uas.platform.b2b.model.PurcApCheck;
|
|
|
import com.uas.platform.b2b.model.PurchaseApCheck;
|
|
|
import com.uas.platform.b2b.model.PurchaseApCheckDone;
|
|
|
import com.uas.platform.b2b.model.PurchaseApCheckItem;
|
|
|
@@ -48,6 +50,7 @@ import com.uas.platform.core.model.Status;
|
|
|
import com.uas.platform.core.persistence.criteria.PredicateUtils;
|
|
|
import com.uas.ps.core.util.StringUtils;
|
|
|
import com.uas.search.b2b.model.SPage;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.domain.Page;
|
|
|
import org.springframework.data.jpa.domain.Specification;
|
|
|
@@ -73,6 +76,7 @@ import java.util.concurrent.CountDownLatch;
|
|
|
import java.util.concurrent.ExecutorService;
|
|
|
import java.util.concurrent.Executors;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
/**
|
|
|
* 对账单
|
|
|
@@ -91,6 +95,7 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
|
|
|
private final UserService userService;
|
|
|
private final VendorDao vendorDao;
|
|
|
private final CommunalLogDao communalLogDao;
|
|
|
+ private final PurcApCheckDao apCheckDao;
|
|
|
@Autowired
|
|
|
private ErpProdIODetailService erpProdIODetailService;
|
|
|
|
|
|
@@ -117,7 +122,8 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
|
|
|
public PurchaseApCheckServiceImpl(PurchaseApCheckDao purchaseApCheckDao, PurchaseApCheckTodoDao purchaseApCheckTodoDao,
|
|
|
PurchaseApCheckDoneDao purchaseApCheckDoneDao, PurchaseApCheckItemDao purchaseApCheckItemDao,
|
|
|
CommonDao commonDao, OrderRedDotService redDotService, EnterpriseDao enterpriseDao,
|
|
|
- UserService userService, VendorDao vendorDao, CommunalLogDao communalLogDao) {
|
|
|
+ UserService userService, VendorDao vendorDao, CommunalLogDao communalLogDao,
|
|
|
+ PurcApCheckDao apCheckDao) {
|
|
|
this.purchaseApCheckDao = purchaseApCheckDao;
|
|
|
this.redDotService = redDotService;
|
|
|
this.purchaseApCheckTodoDao = purchaseApCheckTodoDao;
|
|
|
@@ -128,6 +134,7 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
|
|
|
this.userService = userService;
|
|
|
this.vendorDao = vendorDao;
|
|
|
this.communalLogDao = communalLogDao;
|
|
|
+ this.apCheckDao = apCheckDao;
|
|
|
ExecutorService executorService = Executors.newCachedThreadPool();
|
|
|
executor = new BoundedExecutor(executorService, 1600);
|
|
|
}
|
|
|
@@ -337,7 +344,7 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = SQLException.class)
|
|
|
public PurchaseApCheck save(PurchaseApCheck purchaseApCheck) {
|
|
|
- Date date = new Date();
|
|
|
+ Date date = new Date(System.currentTimeMillis());
|
|
|
purchaseApCheck.setRecordDate(date);
|
|
|
purchaseApCheck.setCommitDate(date);
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyMMddhhmmss_sss");
|
|
|
@@ -346,68 +353,93 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
|
|
|
purchaseApCheck.setRecorder(SystemSession.getUser().getUserName());
|
|
|
purchaseApCheck.setRecorderUU(SystemSession.getUser().getUserUU());
|
|
|
purchaseApCheck.setStatus((short) Status.NOT_UPLOAD.value());
|
|
|
- Short number = 0;
|
|
|
- List<PurchaseApCheckItem> items = new ArrayList<PurchaseApCheckItem>();
|
|
|
// 保存成功的同时来源单据更新一下
|
|
|
List<SourceForApcheck> sources = new ArrayList<>();
|
|
|
+ PurcApCheck apCheck = new PurcApCheck();
|
|
|
+ BeanUtils.copyProperties(purchaseApCheck, apCheck, PurcApCheck.class);
|
|
|
+ apCheck = apCheckDao.save(apCheck);
|
|
|
for (PurchaseApCheckItem item : purchaseApCheck.getItems()) {
|
|
|
SourceForApcheck source = new SourceForApcheck(item);
|
|
|
sources.add(source);
|
|
|
- item.setNumber(++number);
|
|
|
- item.setApCheck(purchaseApCheck);
|
|
|
- items.add(item);
|
|
|
}
|
|
|
- updateSourceInfo(sources);
|
|
|
- items = purchaseApCheckItemDao.save(items);
|
|
|
+ updateSourceInfo(sources);
|
|
|
+ saveCheckItemsByJdbcTemplate(purchaseApCheck.getItems(), apCheck.getId());
|
|
|
List<PurchaseApCheck> apChecks = new ArrayList<>();
|
|
|
- apChecks.add(items.get(0).getApCheck());
|
|
|
+ purchaseApCheck.setId(apCheck.getId());
|
|
|
+ apChecks.add(purchaseApCheck);
|
|
|
saveUserOrders(apChecks);
|
|
|
- return purchaseApCheck;
|
|
|
+ return purchaseApCheck;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 采用jdbcTemplate批量存储名
|
|
|
+ * @param items 对账明细
|
|
|
+ * @param apCheckId 主表id
|
|
|
+ */
|
|
|
+ private void saveCheckItemsByJdbcTemplate(Set<PurchaseApCheckItem> items, final Long apCheckId) {
|
|
|
+ if (!CollectionUtils.isEmpty(items)) {
|
|
|
+ final Short[] num = {1};
|
|
|
+ commonDao.getJdbcTemplate().batchUpdate("insert into purc$apcheckitem(pai_number, pai_custuseruu, pai_prid, pai_ordercode,pai_orderclass, " +
|
|
|
+ "pai_orderdetno, pai_inoutno, pai_inoutnodetno, pai_prodcode, pai_prodtitle, pai_prodspec, pai_produnit, pai_price,pai_taxrate, pai_checkqty, " +
|
|
|
+ "pai_amount, pai_custcheckqty, pai_remark, pai_status, pai_sourcetable, pai_sourceid, pai_source_date, pai_oldycheckqty, pai_receivecode, pai_receivename, " +
|
|
|
+ "pai_sendcode, pai_whname, pai_billed, pai_paid) " +
|
|
|
+ "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
|
|
|
+ items, items.size(), (pa, i) -> {
|
|
|
+ pa.setObject(1, num[0]++);
|
|
|
+ pa.setObject(2, i.getCustUserUU());
|
|
|
+ pa.setObject(3, i.getPrid());
|
|
|
+ pa.setObject(4, i.getOrderCode());
|
|
|
+ pa.setObject(5, i.getOrderClass());
|
|
|
+ pa.setObject(6, i.getOrderDetno());
|
|
|
+ pa.setObject(7, i.getInoutno());
|
|
|
+ pa.setObject(8, i.getInoutnodetno());
|
|
|
+ pa.setObject(9, i.getProdCode());
|
|
|
+ pa.setObject(10, i.getProdTitle());
|
|
|
+
|
|
|
+ pa.setObject(11, i.getProdSpec());
|
|
|
+ pa.setObject(12, i.getProdUnit());
|
|
|
+ pa.setObject(13, i.getPrice());
|
|
|
+ pa.setObject(14, i.getTaxrate());
|
|
|
+ pa.setObject(15, i.getCheckQty());
|
|
|
+ pa.setObject(16, i.getAmount());
|
|
|
+ pa.setObject(17, i.getCustCheckQty());
|
|
|
+ pa.setObject(18, i.getRemark());
|
|
|
+ pa.setObject(19, i.getStatus());
|
|
|
+ pa.setObject(20, i.getSourceTable());
|
|
|
+
|
|
|
+ pa.setObject(21, i.getSourceId());
|
|
|
+ pa.setObject(22, i.getSourceDate());
|
|
|
+ pa.setObject(23, i.getOldYCheckQty());
|
|
|
+ pa.setObject(24, i.getReceiveCode());
|
|
|
+ pa.setObject(25, i.getReceiveName());
|
|
|
+ pa.setObject(26, i.getSendcode());
|
|
|
+ pa.setObject(27, i.getWhname());
|
|
|
+ pa.setObject(28, i.getBilled());
|
|
|
+ pa.setObject(29, apCheckId);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 更新来源表数据
|
|
|
*
|
|
|
- * @param list 来源库信息
|
|
|
+ * @param sourceApCheckList 来源库信息
|
|
|
* @return 保存结果
|
|
|
*/
|
|
|
- public boolean updateSourceInfo(List<SourceForApcheck> list) {
|
|
|
- if (!CollectionUtils.isEmpty(list)) {
|
|
|
- List<String> sqls = new ArrayList<>();
|
|
|
- for (SourceForApcheck source : list) {
|
|
|
- if (source.hasInfo()) {
|
|
|
- String idName = null;
|
|
|
- String yCheckQtyName = null;
|
|
|
- if (source.getSourcetable().equals("purc$returnitem")) {
|
|
|
- idName = "pri_id";
|
|
|
- yCheckQtyName = "pri_ycheckqty";
|
|
|
- } else if (source.getSourcetable().equals("purc$acceptitem")) {
|
|
|
- idName = "pai_id";
|
|
|
- yCheckQtyName = "pai_ycheckqty";
|
|
|
- } else if (source.getSourcetable().equals("purc$badinitem")) {
|
|
|
- idName = "pbi_id";
|
|
|
- yCheckQtyName = "pbi_ycheckqty";
|
|
|
- } else if (source.getSourcetable().equals("purc$badoutitem")) {
|
|
|
- idName = "poi_id";
|
|
|
- yCheckQtyName = "poi_ycheckqty";
|
|
|
- } else if (source.getSourcetable().equals("make$acceptitem")) {
|
|
|
- idName = "mai_id";
|
|
|
- yCheckQtyName = "mai_ycheckqty";
|
|
|
- } else if (source.getSourcetable().equals("make$returnitem")) {
|
|
|
- idName = "mri_id";
|
|
|
- yCheckQtyName = "mri_ycheckqty";
|
|
|
- } else if (source.getSourcetable().equals("purc$apbilladjustment")) {
|
|
|
- idName = "aa_id";
|
|
|
- yCheckQtyName = "aa_ycheckqty";
|
|
|
- }
|
|
|
- String sql = "update " + source.getSourcetable() + " set " + yCheckQtyName + " = "
|
|
|
- + source.getNewYCheckQty() + " where " + idName + " = " + source.getSourceid();
|
|
|
- sqls.add(sql);
|
|
|
- }
|
|
|
- }
|
|
|
- if (!CollectionUtils.isEmpty(sqls)) {
|
|
|
+ public boolean updateSourceInfo(List<SourceForApcheck> sourceApCheckList) {
|
|
|
+ if (!CollectionUtils.isEmpty(sourceApCheckList)) {
|
|
|
+ String saleAcceptSql = setSql(sourceApCheckList, ApCheckTable.SALE_ACCEPT, ApCheckTable.SALE_ACCEPT_QTY, ApCheckTable.SALE_ACCEPT_ID);
|
|
|
+ String saleReturnSql = setSql(sourceApCheckList, ApCheckTable.SALE_RETURN, ApCheckTable.SALE_RETURN_QTY, ApCheckTable.SALE_RETURN_ID);
|
|
|
+ String saleBadInSql = setSql(sourceApCheckList, ApCheckTable.SALE_BADIN, ApCheckTable.SALE_BADIN_QTY, ApCheckTable.SALE_BADIN_ID);
|
|
|
+ String saleBadOutSql = setSql(sourceApCheckList, ApCheckTable.SALE_BADOUT, ApCheckTable.SALE_BADOUT_QTY, ApCheckTable.SALE_BADOUT_ID);
|
|
|
+ String makeAcceptSql = setSql(sourceApCheckList, ApCheckTable.MAKE_ACCEPT, ApCheckTable.MAKE_ACCEPT_QTY, ApCheckTable.MAKE_ACCEPT_ID);
|
|
|
+ String makeReturnSql = setSql(sourceApCheckList, ApCheckTable.MAKE_RETURN, ApCheckTable.MAKE_RETURN_QTY, ApCheckTable.MAKE_RETURN_ID);
|
|
|
+ String adjustmentSql = setSql(sourceApCheckList, ApCheckTable.ADJUSTMENT, ApCheckTable.ADJUSTMENT_QTY, ApCheckTable.ADJUSTMENT_ID);
|
|
|
+ List<String> sqlList = Stream.of(saleAcceptSql, saleReturnSql, saleBadInSql, saleBadOutSql, makeAcceptSql, makeReturnSql, adjustmentSql)
|
|
|
+ .filter(str -> !StringUtils.isEmpty(str)).collect(Collectors.toList());
|
|
|
+ if (!CollectionUtils.isEmpty(sqlList)) {
|
|
|
try {
|
|
|
- commonDao.getJdbcTemplate().batchUpdate(sqls.toArray(new String[sqls.size()]));
|
|
|
+ commonDao.getJdbcTemplate().batchUpdate(sqlList.toArray(new String[sqlList.size()]));
|
|
|
} catch (RuntimeException e) {
|
|
|
System.out.println("生成对账单批量更新来源数据失败: " + e.getMessage());
|
|
|
throw new IllegalOperatorException("保存失败!");
|
|
|
@@ -418,7 +450,32 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
|
|
|
throw new IllegalOperatorException("保存失败!");
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
+ private String setSql(List<SourceForApcheck> sourceApCheckList, String tableName, String qtyColumn, String idColumn) {
|
|
|
+ List<SourceForApcheck> filterList = sourceApCheckList.stream()
|
|
|
+ .filter(source -> source.hasInfo() && tableName.equals(source.getSourcetable()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (CollectionUtils.isEmpty(filterList)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ StringBuffer sql = new StringBuffer("update ").append(tableName)
|
|
|
+ .append(" set ").append(qtyColumn).append(" = case ")
|
|
|
+ .append(idColumn).append(" ");
|
|
|
+ StringBuffer idString = new StringBuffer();
|
|
|
+ filterList.forEach(apCheck -> {
|
|
|
+ sql.append(" when ").append(apCheck.getSourceid()).append(" then ").append(20);
|
|
|
+ if (idString.length() > 0) {
|
|
|
+ idString.append(",");
|
|
|
+ }
|
|
|
+ idString.append(apCheck.getSourceid());
|
|
|
+ });
|
|
|
+ if (idString.length() == 0) {
|
|
|
+ throw new IllegalOperatorException("更新失败");
|
|
|
+ }
|
|
|
+ sql.append(" end where ").append(idColumn).append(" in (").append(idString).append(")");
|
|
|
+ return sql.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public Page<PurchaseApCheck> findAllByPageInfo(final PageInfo pageInfo, final String keyword,
|
|
|
SearchFilter searchFilter) {
|
|
|
if (searchFilter != null) {
|