|
|
@@ -1,18 +1,35 @@
|
|
|
package com.uas.platform.b2b.erp.service.impl;
|
|
|
|
|
|
import com.uas.platform.b2b.core.util.ThreadUtils;
|
|
|
+import com.uas.platform.b2b.dao.EnterpriseDao;
|
|
|
+import com.uas.platform.b2b.dao.ProductDao;
|
|
|
+import com.uas.platform.b2b.dao.PurchaseOrderAllDao;
|
|
|
import com.uas.platform.b2b.erp.dao.AutOrderDao;
|
|
|
import com.uas.platform.b2b.erp.dao.AutOrderDetailDao;
|
|
|
+import com.uas.platform.b2b.erp.dao.KeywordAliasDao;
|
|
|
import com.uas.platform.b2b.erp.model.AutOrder;
|
|
|
import com.uas.platform.b2b.erp.model.AutOrderDetail;
|
|
|
+import com.uas.platform.b2b.erp.model.KeywordAlias;
|
|
|
import com.uas.platform.b2b.erp.service.AutOrderService;
|
|
|
+import com.uas.platform.b2b.model.Enterprise;
|
|
|
+import com.uas.platform.b2b.model.Product;
|
|
|
+import com.uas.platform.b2b.model.PurchaseOrderAll;
|
|
|
+import com.uas.platform.b2b.model.PurchaseOrderAllItem;
|
|
|
+import com.uas.platform.core.model.Constant;
|
|
|
import com.uas.platform.core.model.Status;
|
|
|
+import org.apache.axis.utils.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
+import java.text.ParseException;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
import java.util.Date;
|
|
|
+import java.util.HashSet;
|
|
|
import java.util.List;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.regex.Matcher;
|
|
|
+import java.util.regex.Pattern;
|
|
|
|
|
|
/**
|
|
|
* 自动生成订单
|
|
|
@@ -28,6 +45,38 @@ public class AutOrderServiceImpl implements AutOrderService {
|
|
|
@Autowired
|
|
|
private AutOrderDetailDao detailDao;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private KeywordAliasDao keywordAliasDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private EnterpriseDao enterpriseDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ProductDao productDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private PurchaseOrderAllDao orderAllDao;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 企业类型
|
|
|
+ */
|
|
|
+ private final String ENTERPRISE_TYPE = "enterprise";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 币别类型
|
|
|
+ */
|
|
|
+ private final String CURRENCY_TYPE = "currency";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 数字正则
|
|
|
+ */
|
|
|
+ private final String NUMBER_REG = "[^0-9]";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 用户类型
|
|
|
+ */
|
|
|
+ private final String USER_TYPE = "user";
|
|
|
+
|
|
|
/**
|
|
|
* 保存订单信息
|
|
|
*
|
|
|
@@ -39,24 +88,15 @@ public class AutOrderServiceImpl implements AutOrderService {
|
|
|
for (AutOrder order : orderList) {
|
|
|
order.setStatus(Status.TOBE_HANDLE.value());
|
|
|
order.setDate(new Date(System.currentTimeMillis()));
|
|
|
- final AutOrder autOrder = autOrderDao.save(order);
|
|
|
+ order = autOrderDao.save(order);
|
|
|
if (!CollectionUtils.isEmpty(order.getDetails())) {
|
|
|
for (AutOrderDetail detail : order.getDetails()) {
|
|
|
- detail.setPuId(autOrder.getId());
|
|
|
+ detail.setPuId(order.getId());
|
|
|
detail.setDate(new Date(System.currentTimeMillis()));
|
|
|
}
|
|
|
- final List<AutOrderDetail> detailList = detailDao.save(order.getDetails());
|
|
|
- ThreadUtils.task(new Runnable() {
|
|
|
- @Override
|
|
|
- public void run() {
|
|
|
- try {
|
|
|
- // 转成平台的单据
|
|
|
- covertToSaleOrders(autOrder, detailList);
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
- }).run();
|
|
|
+ detailDao.save(order.getDetails());
|
|
|
+ // 转成平台的单据
|
|
|
+ covertToSaleOrders(order);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -66,9 +106,139 @@ public class AutOrderServiceImpl implements AutOrderService {
|
|
|
* 生成平台的单据
|
|
|
*
|
|
|
* @param autOrder 订单主表
|
|
|
- * @param detailList 订单明细
|
|
|
*/
|
|
|
- private void covertToSaleOrders(AutOrder autOrder, List<AutOrderDetail> detailList) {
|
|
|
- // TODO
|
|
|
+ private void covertToSaleOrders(final AutOrder autOrder) {
|
|
|
+ ThreadUtils.task(new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ try {
|
|
|
+ PurchaseOrderAll order = coverToPurchase(autOrder);
|
|
|
+ orderAllDao.save(order);
|
|
|
+ AutOrder order1 = autOrderDao.findOne(order.getAuId());
|
|
|
+ order1.setToDate(new Date(System.currentTimeMillis()));
|
|
|
+ autOrderDao.save(order1);
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }).run();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 解析的订单数据转换成平台的订单数据
|
|
|
+ *
|
|
|
+ * @param autOrder 解析的订单数据
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private PurchaseOrderAll coverToPurchase(AutOrder autOrder) throws ParseException {
|
|
|
+ PurchaseOrderAll order = new PurchaseOrderAll();
|
|
|
+ order.setCode(autOrder.getPu_code());
|
|
|
+ order.setDate(new Date(System.currentTimeMillis()));
|
|
|
+ order.setSendStatus((short) Status.NOT_UPLOAD.value());
|
|
|
+ order.setStatus((short) Status.NOT_REPLY.value());
|
|
|
+ order.setShipAddress(autOrder.getPu_shipaddresscode());
|
|
|
+ order.setEnd(Constant.NO);
|
|
|
+ order.setDisplay(Constant.NO);
|
|
|
+ order.setPrint(Constant.NO);
|
|
|
+ order.setCustPrint(Constant.NO);
|
|
|
+ order.setReply(Constant.NO);
|
|
|
+ order.setFilepath(autOrder.getPu_filepath());
|
|
|
+ order.setAuId(autOrder.getId());
|
|
|
+ KeywordAlias en_alias = keywordAliasDao.findByTypeAndAlias(ENTERPRISE_TYPE, autOrder.getEn_name());
|
|
|
+ if (null != en_alias) {
|
|
|
+ order.setEnUU(Long.valueOf(en_alias.getValue()));
|
|
|
+ order.setCop(en_alias.getName());
|
|
|
+ Enterprise enterprise = enterpriseDao.findOne(Long.valueOf(en_alias.getValue()));
|
|
|
+ order.setUserUU(enterprise.getEnAdminuu());
|
|
|
+ }
|
|
|
+ KeywordAlias cu_alias = keywordAliasDao.findByTypeAndAlias(CURRENCY_TYPE, autOrder.getPu_currency());
|
|
|
+ if (null != cu_alias) {
|
|
|
+ order.setCurrency(cu_alias.getValue());
|
|
|
+ }
|
|
|
+ KeywordAlias ve_alias = keywordAliasDao.findByTypeAndAlias(ENTERPRISE_TYPE, autOrder.getVe_name());
|
|
|
+ if (null != ve_alias) {
|
|
|
+ order.setVendUU(Long.valueOf(ve_alias.getValue()));
|
|
|
+ order.setReceiveName(ve_alias.getName());
|
|
|
+ }
|
|
|
+ Pattern p = Pattern.compile(NUMBER_REG);
|
|
|
+ Matcher m = p.matcher(autOrder.getPu_date());
|
|
|
+ String rate = m.replaceAll("").trim();
|
|
|
+ order.setRate(StringUtils.isEmpty(rate) ? null : Float.valueOf(rate));
|
|
|
+ KeywordAlias u_alias = keywordAliasDao.findByTypeAndAlias(USER_TYPE, autOrder.getEm_name());
|
|
|
+ if (null != u_alias) {
|
|
|
+ order.setUserUU(Long.valueOf(u_alias.getValue()));
|
|
|
+ }
|
|
|
+ Set<PurchaseOrderAllItem> items = new HashSet<>();
|
|
|
+ if (!CollectionUtils.isEmpty(autOrder.getDetails())) {
|
|
|
+ int i = 1;
|
|
|
+ for (AutOrderDetail detail : autOrder.getDetails()) {
|
|
|
+ items.add(coverToItem(detail, i, order.getEnUU()));
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ order.setOrderItems(items);
|
|
|
+ return order;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将解析订单明细转成平台采购订单明细
|
|
|
+ *
|
|
|
+ * @param detail 解析出来的采购订单明细
|
|
|
+ * @param i 序号
|
|
|
+ * @param enUU 企业UU
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private PurchaseOrderAllItem coverToItem(AutOrderDetail detail, int i, Long enUU) throws ParseException {
|
|
|
+ PurchaseOrderAllItem item = new PurchaseOrderAllItem();
|
|
|
+ item.setStatus((short) Status.NOT_REPLY.value());
|
|
|
+ item.setErpDate(new Date(System.currentTimeMillis()));
|
|
|
+ item.setAudId(detail.getId());
|
|
|
+ Pattern p = Pattern.compile(NUMBER_REG);
|
|
|
+ Matcher m = p.matcher(detail.getPd_qty());
|
|
|
+ String qty = m.replaceAll("").trim();
|
|
|
+ item.setQty(StringUtils.isEmpty(qty) ? 0 : Double.valueOf(qty));
|
|
|
+ item.setNumber(StringUtils.isEmpty(detail.getPd_detno()) ? (short) i : Short.valueOf(detail.getPd_detno()));
|
|
|
+ Matcher ma = p.matcher(detail.getPd_rate());
|
|
|
+ String taxtRate = ma.replaceAll("").trim();
|
|
|
+ item.setTaxrate(StringUtils.isEmpty(taxtRate) ? null : Float.valueOf(taxtRate));
|
|
|
+ List<Product> productList = productDao.findByEnUUAndCode(enUU, detail.getPd_prodcode());
|
|
|
+ if (!CollectionUtils.isEmpty(productList)) {
|
|
|
+ item.setProductId(productList.get(0).getId());
|
|
|
+ }
|
|
|
+ Matcher pr = p.matcher(detail.getPd_price());
|
|
|
+ String price = pr.replaceAll("").trim();
|
|
|
+ item.setPrice(StringUtils.isEmpty(price) ? null : Double.valueOf(price));
|
|
|
+ item.setDelivery(matchTime(detail.getPd_delivery()));
|
|
|
+ return item;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理时间格式
|
|
|
+ *
|
|
|
+ * @param delivery 解析订单中的明细交期
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private Date matchTime(String delivery) throws ParseException {
|
|
|
+ if (!StringUtils.isEmpty(delivery)) {
|
|
|
+ delivery = delivery.trim();
|
|
|
+ String TIME_PATTERN_1 = "\\d{4}-\\d{2}-\\d{2}";
|
|
|
+ String TIME_PATTERN_2 = "\\d{4}\\d{2}\\d{2}";
|
|
|
+ String TIME_PATTERN_3 = "\\d{4}/\\d{2}/\\d{2}";
|
|
|
+ if (delivery.matches(TIME_PATTERN_1)) {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
|
|
|
+ return sdf.parse(delivery);
|
|
|
+ } else if (delivery.matches(TIME_PATTERN_2)) {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyymmdd");
|
|
|
+ return sdf.parse(delivery);
|
|
|
+ } else if (delivery.contains("年") || delivery.contains("月") || delivery.contains("日")) {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy年mm月dd");
|
|
|
+ return sdf.parse(delivery);
|
|
|
+ } else if (delivery.matches(TIME_PATTERN_3)) {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy/mm/dd");
|
|
|
+ return sdf.parse(delivery);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ return null;
|
|
|
}
|
|
|
}
|