浏览代码

新的反诈

hankunkun 11 月之前
父节点
当前提交
cf53666a5e

+ 3 - 105
src/main/java/ieven/server/webapp/domain/alipay/HeaderProperties.java

@@ -1,5 +1,6 @@
 package ieven.server.webapp.domain.alipay;
 
+import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;
 
@@ -7,6 +8,7 @@ import java.util.List;
 
 @Component
 @ConfigurationProperties(prefix = "headers")
+@Data
 public class HeaderProperties {
   private List<String> antiCheatOrigin;
   private List<String> antiCheatOutput;
@@ -21,112 +23,8 @@ public class HeaderProperties {
   private List<String> antiSecurityTradeScaleAnalysisOutput;
   private List<String> antiSecurityTradeEndAnalysisOutput;
   private List<String> orderedNames;
+  private List<String>antiSecurityTrade;
 
   public HeaderProperties() {}
 
-  public List<String> getAntiCheatOrigin() {
-    return this.antiCheatOrigin;
-  }
-
-  public void setAntiCheatOrigin(final List<String> antiCheatOrigin) {
-    this.antiCheatOrigin = antiCheatOrigin;
-  }
-
-  public List<String> getAntiCheatOutput() {
-    return this.antiCheatOutput;
-  }
-
-  public void setAntiCheatOutput(final List<String> antiCheatOutput) {
-    this.antiCheatOutput = antiCheatOutput;
-  }
-
-  public List<String> getSecurityOrigin() {
-    return this.securityOrigin;
-  }
-
-  public void setSecurityOrigin(final List<String> securityOrigin) {
-    this.securityOrigin = securityOrigin;
-  }
-
-  public List<String> getSecurityOutput() {
-    return this.securityOutput;
-  }
-
-  public void setSecurityOutput(final List<String> securityOutput) {
-    this.securityOutput = securityOutput;
-  }
-
-  public List<String> getScaleAnalysisOutput() {
-    return this.scaleAnalysisOutput;
-  }
-
-  public void setScaleAnalysisOutput(final List<String> scaleAnalysisOutput) {
-    this.scaleAnalysisOutput = scaleAnalysisOutput;
-  }
-
-  public List<String> getTransferAnalysisOutput() {
-    return this.transferAnalysisOutput;
-  }
-
-  public void setTransferAnalysisOutput(final List<String> transferAnalysisOutput) {
-    this.transferAnalysisOutput = transferAnalysisOutput;
-  }
-
-  public List<String> getEndAnalysisOutput() {
-    return this.endAnalysisOutput;
-  }
-
-  public void setEndAnalysisOutput(final List<String> endAnalysisOutput) {
-    this.endAnalysisOutput = endAnalysisOutput;
-  }
-
-  public List<String> getDeliveryAnalysisOutput() {
-    return this.deliveryAnalysisOutput;
-  }
-
-  public void setDeliveryAnalysisOutput(final List<String> deliveryAnalysisOutput) {
-    this.deliveryAnalysisOutput = deliveryAnalysisOutput;
-  }
-
-  public List<String> getIpAnalysisOutput() {
-    return this.ipAnalysisOutput;
-  }
-
-  public void setIpAnalysisOutput(final List<String> ipAnalysisOutput) {
-    this.ipAnalysisOutput = ipAnalysisOutput;
-  }
-
-  public List<String> getAntiSecurityTradeOutput() {
-    return this.antiSecurityTradeOutput;
-  }
-
-  public void setAntiSecurityTradeOutput(final List<String> antiSecurityTradeOutput) {
-    this.antiSecurityTradeOutput = antiSecurityTradeOutput;
-  }
-
-  public List<String> getAntiSecurityTradeScaleAnalysisOutput() {
-    return this.antiSecurityTradeScaleAnalysisOutput;
-  }
-
-  public void setAntiSecurityTradeScaleAnalysisOutput(
-      final List<String> antiSecurityTradeScaleAnalysisOutput) {
-    this.antiSecurityTradeScaleAnalysisOutput = antiSecurityTradeScaleAnalysisOutput;
-  }
-
-  public List<String> getAntiSecurityTradeEndAnalysisOutput() {
-    return this.antiSecurityTradeEndAnalysisOutput;
-  }
-
-  public void setAntiSecurityTradeEndAnalysisOutput(
-      final List<String> antiSecurityTradeEndAnalysisOutput) {
-    this.antiSecurityTradeEndAnalysisOutput = antiSecurityTradeEndAnalysisOutput;
-  }
-
-  public List<String> getOrderedNames() {
-    return this.orderedNames;
-  }
-
-  public void setOrderedNames(final List<String> orderedNames) {
-    this.orderedNames = orderedNames;
-  }
 }

+ 88 - 0
src/main/java/ieven/server/webapp/domain/data/AccountVO.java

@@ -0,0 +1,88 @@
+package ieven.server.webapp.domain.data;
+
+import lombok.Data;
+
+/**
+ * @author hankunkun
+ * @version 1.0
+ * @date 2024/8/22 9:21
+ */
+@Data
+public class AccountVO {
+
+    //支付订单号
+    private String zfddh;
+
+    //交易流水号
+    private String jylsh;
+
+    //交易主体账号
+    private String jyztzh;
+
+    //交易主体银行卡号
+    private String jyztyhkh;
+
+    //交易主体银行名称
+    private String jyztyhmc;
+
+    //交易主体户名
+    private String jyzthm;
+
+    //交易类型
+    private String jylx;
+
+    //支付类型
+    private String zflx;
+
+    //交易主体的出入账标识
+    private String jyztdcrzbz;
+
+    //交易时间
+    private String jysj;
+
+    //币种
+    private String bz;
+
+    //交易金额
+    private String jyje;
+
+    //交易余额
+    private String jyye;
+
+    //交易对手账号
+    private String jydszh;
+
+    //交易对手银行卡号
+    private String jydsyhkh;
+
+    //交易对手银行名称
+    private String jydsyhkhmc;
+
+    //交易对手户名
+    private String jydshm;
+
+    //消费POS机编号
+    private String xfposjbh;
+
+    //交易设备类型
+    private String jysblx;
+
+    //交易支付设备IP
+    private String jyzfsbip;
+    //MAC地址
+    private String macdz;
+    //交易地点经度
+    private String jyddjd;
+    //交易地点纬度
+    private String jyddwd;
+    //消费名称
+    private String xfmc;
+    //交易来源地
+    private String jylyd;
+    //交易状态
+    private String jyzt;
+    //备注
+    private String remark;
+
+
+}

+ 7 - 1
src/main/java/ieven/server/webapp/service/alipay/AlipayService.java

@@ -124,6 +124,12 @@ public class AlipayService {
                         headerProperties, modelId, mongoTemplate, accountToName, fileService, latch3));
         latch3.await();
 
+        CountDownLatch latch11 = new CountDownLatch(1);
+        // 反诈治安交易数据明细-从反诈读取   反诈治安交易数据明细合并到这里
+        exec.execute(
+                new AntiSecurityTrade5(headerProperties,originFields, modelId, mongoTemplate, fileService, latch11));
+        latch11.await();
+
         // 反诈治安交易数据明细-从治安读取
     /*CountDownLatch latch8 = new CountDownLatch(1);
     exec.execute(
@@ -184,7 +190,7 @@ public class AlipayService {
                         headerProperties, modelId, mongoTemplate, fileService, latch7));
         latch7.await();
 
-        //主账户信息
+        //主账户信息
         CountDownLatch latch10 = new CountDownLatch(1);
         exec.execute(
                 new DataStaticAnalysis(

+ 104 - 0
src/main/java/ieven/server/webapp/service/alipay/AntiSecurityTrade5.java

@@ -0,0 +1,104 @@
+package ieven.server.webapp.service.alipay;
+
+import com.mongodb.client.MongoCursor;
+import ieven.server.webapp.domain.alipay.HeaderProperties;
+import ieven.server.webapp.domain.data.DataMap;
+import ieven.server.webapp.domain.data.Fields;
+import ieven.server.webapp.domain.file.FileService;
+import ieven.server.webapp.domain.tenpay.TenpayHeaders;
+import ieven.server.webapp.service.Ops;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.bson.Document;
+import org.springframework.data.mongodb.core.MongoTemplate;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+@Slf4j
+
+public class AntiSecurityTrade5 extends Ops implements Runnable {
+
+    List<Fields> originFields;
+    String modelId;
+    MongoTemplate mongoTemplate;
+    FileService fileService;
+    private HeaderProperties headerProperties;
+    CountDownLatch latch;
+
+    public AntiSecurityTrade5(
+            HeaderProperties headerProperties,
+            List<Fields> originFields,
+            String modelId,
+            MongoTemplate mongoTemplate,
+            FileService fileService,
+            CountDownLatch latch) {
+        this.headerProperties = headerProperties;
+        this.originFields = originFields;
+        this.modelId = modelId;
+        this.mongoTemplate = mongoTemplate;
+        this.fileService = fileService;
+        this.latch = latch;
+    }
+
+    @Override
+    public void run() {
+        log.info("反诈-直接读取交易明细");
+        List<String> headers = headerProperties.getAntiSecurityTrade();
+        // 直接删除旧表创建新表
+        List<Fields> matched = matchHeaders(originFields, headers);
+        if (CollectionUtils.isNotEmpty(matched)) {
+            String newFileId =createLogicAndDeleteOld("反诈治安-交易明细",modelId,headerProperties.getAntiSecurityTradeOutput(), mongoTemplate,fileService);
+            for (Fields fields : matched) {
+                String fileId = fields.getFileId();
+                MongoCursor<Document> cursor = getCursor(fileId, mongoTemplate);
+                Document originDoc;
+                List<DataMap> needToSave = new ArrayList<>(1000);
+                while (cursor.hasNext()) {
+                    originDoc = cursor.next();
+                    DataMap dataMap=new DataMap();
+                    dataMap.put("fileId", newFileId);
+                    dataMap.put("交易主体账号",originDoc.getString("查询账号"));
+                    dataMap.put("支付订单号",originDoc.getString("支付机构内部订单号"));
+                    String f1 = originDoc.getString("借贷类型");
+                    dataMap.put("交易金额",originDoc.getString("交易金额"));
+                    dataMap.put("交易余额",originDoc.getString("交易余额"));
+                    dataMap.put("交易类型",originDoc.getString("交易类型"));
+                    dataMap.put("交易时间",originDoc.getString("交易时间"));
+                    dataMap.put("银行类型",originDoc.getString("支付类型"));
+                    dataMap.put("交易主体的出入账标识", originDoc.getString("借贷类型"));
+                    dataMap.put("交易流水号", originDoc.getString("银行外部渠道交易流水号"));
+                    dataMap.put("备注", originDoc.getString("备注"));
+                    dataMap.put("币种", originDoc.getString("币种"));
+
+                    if (f1.equals("贷")) {
+                        dataMap.put("交易对手账号", originDoc.getString("付款方支付帐号"));
+                        dataMap.put("交易对手银行名称", originDoc.getString("付款方银行卡所属行"));
+                        dataMap.put("交易对手银行卡号", originDoc.getString("付款方银行卡号"));
+                        dataMap.put("交易主体银行名称", originDoc.getString("收款方银行卡所属行"));
+                        dataMap.put("交易主体银行卡号", originDoc.getString("收款方银行卡号"));
+                        dataMap.put("交易主体户名", originDoc.getString("收款方的商户名称"));
+                    }
+                    if (f1.equals("借")) {
+                        dataMap.put("交易主体银行名称", originDoc.getString("付款方银行卡所属行"));
+                        dataMap.put("交易主体银行卡号", originDoc.getString("付款方银行卡号"));
+                        dataMap.put("交易对手账号", originDoc.getString("收款方支付帐号"));
+                        dataMap.put("交易对手银行名称", originDoc.getString("收款方银行卡所属行"));
+                        dataMap.put("交易对手银行卡号", originDoc.getString("收款方银行卡号"));
+                        dataMap.put("交易对手户名", originDoc.getString("收款方的商户名称"));
+                    }
+                    needToSave.add(dataMap);
+                    if (needToSave.size() >= 1000) {
+                        saveLines(new ArrayList<>(needToSave), mongoTemplate);
+                        needToSave.clear();
+                    }
+                }
+                if (CollectionUtils.isNotEmpty(needToSave)) {
+                    saveLines(needToSave, mongoTemplate);
+                }
+            }
+        }
+        latch.countDown();
+        log.info("财付通-订单明细结束");
+    }
+}

+ 143 - 5
src/main/java/ieven/server/webapp/service/datastatic/DataStaticAnalysis.java

@@ -1,8 +1,8 @@
 package ieven.server.webapp.service.datastatic;
 
-import cn.hutool.core.util.NumberUtil;
 import com.mongodb.client.MongoCursor;
 import ieven.server.webapp.domain.alipay.HeaderProperties;
+import ieven.server.webapp.domain.data.AccountVO;
 import ieven.server.webapp.domain.data.DataMap;
 import ieven.server.webapp.domain.file.FileService;
 import ieven.server.webapp.service.Ops;
@@ -12,8 +12,8 @@ import org.apache.commons.lang3.StringUtils;
 import org.bson.Document;
 import org.springframework.data.mongodb.core.MongoTemplate;
 
-import java.math.BigDecimal;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.concurrent.CountDownLatch;
 
 @Slf4j
@@ -44,11 +44,13 @@ public class DataStaticAnalysis extends Ops implements Runnable {
         String newFileId = "";
         String dateFileIdcft = getFileId("财付通-交易明细", modelId, mongoTemplate);
         String dateFileIdfzza = getFileId("反诈治安-交易明细", modelId, mongoTemplate);
+        String dateFileIdwld = getFileId("五联单-账户明细", modelId, mongoTemplate);
 
-        if(StringUtils.isNotBlank(dateFileIdcft)||StringUtils.isNotBlank(dateFileIdfzza)){
-            newFileId =createLogicAndDeleteOld( "数据分析-主体信息汇总", modelId, headerProperties.getAntiSecurityTradeScaleAnalysisOutput(), mongoTemplate, fileService);
+        if (StringUtils.isNotBlank(dateFileIdcft) || StringUtils.isNotBlank(dateFileIdfzza)) {
+            newFileId = createLogicAndDeleteOld("数据分析-主体信息汇总", modelId, headerProperties.getAntiSecurityTradeScaleAnalysisOutput(), mongoTemplate, fileService);
         }
         // 插入记录用户后续查询明细
+        //财付通
         if (StringUtils.isNotBlank(dateFileIdcft)) {
             MongoCursor<Document> cursor = getCursor(dateFileIdcft, mongoTemplate);
             Document origin;
@@ -57,6 +59,55 @@ public class DataStaticAnalysis extends Ops implements Runnable {
                 origin = cursor.next();
                 DataMap dataMap = new DataMap();
                 dataMap.put("fileId", newFileId);
+                AccountVO accountVO = new AccountVO();
+                assembleDataCft(origin, accountVO);
+                insertDataWld(accountVO, dataMap);
+                needToSave.add(dataMap);
+                if (needToSave.size() >= 1000) {
+                    saveLines(new ArrayList<>(needToSave), mongoTemplate);
+                    needToSave.clear();
+                }
+            }
+            if (CollectionUtils.isNotEmpty(needToSave)) {
+                saveLines(needToSave, mongoTemplate);
+            }
+        }
+
+        //反诈
+        if (StringUtils.isNotBlank(dateFileIdfzza)) {
+            MongoCursor<Document> cursor = getCursor(dateFileIdfzza, mongoTemplate);
+            Document origin;
+            List<DataMap> needToSave = new ArrayList<>(1000);
+            while (cursor.hasNext()) {
+                origin = cursor.next();
+                DataMap dataMap = new DataMap();
+                dataMap.put("fileId", newFileId);
+                AccountVO accountVO = new AccountVO();
+                assembleDatafzza(origin, accountVO);
+                insertDataWld(accountVO, dataMap);
+                needToSave.add(dataMap);
+                if (needToSave.size() >= 1000) {
+                    saveLines(new ArrayList<>(needToSave), mongoTemplate);
+                    needToSave.clear();
+                }
+            }
+            if (CollectionUtils.isNotEmpty(needToSave)) {
+                saveLines(needToSave, mongoTemplate);
+            }
+        }
+
+        //五联单
+        if (StringUtils.isNotBlank(dateFileIdwld)) {
+            MongoCursor<Document> cursor = getCursor(dateFileIdwld, mongoTemplate);
+            Document origin;
+            List<DataMap> needToSave = new ArrayList<>(1000);
+            while (cursor.hasNext()) {
+                origin = cursor.next();
+                DataMap dataMap = new DataMap();
+                dataMap.put("fileId", newFileId);
+                AccountVO accountVO = new AccountVO();
+                assembleDatawld(origin, accountVO);
+                insertDataWld(accountVO, dataMap);
                 needToSave.add(dataMap);
                 if (needToSave.size() >= 1000) {
                     saveLines(new ArrayList<>(needToSave), mongoTemplate);
@@ -70,4 +121,91 @@ public class DataStaticAnalysis extends Ops implements Runnable {
         latch.countDown();
         log.info("数据统计-主体信息结束");
     }
+
+    public void assembleDataCft(Document origin, AccountVO accountVO) {
+        accountVO.setZfddh(origin.getString("交易单号"));
+        accountVO.setJyztzh(origin.getString("交易主体账号"));
+        accountVO.setJyztyhkh(origin.getString("交易主体银行卡号"));
+        accountVO.setJyztyhmc(origin.getString("交易主体银行名称"));
+        accountVO.setJyzthm(origin.getString("交易主体户名"));
+        accountVO.setJylx(origin.getString("交易类型"));
+        accountVO.setJysj(origin.getString("交易时间"));
+        accountVO.setJyje(origin.getString("交易金额(元)"));
+        accountVO.setJyye(origin.getString("账户余额(元)"));
+        accountVO.setJydszh(origin.getString("交易对手账号"));
+        accountVO.setJydsyhkh(origin.getString("交易对手银行卡号"));
+        accountVO.setJydsyhkhmc(origin.getString("交易对手银行名称"));
+        accountVO.setJydshm(origin.getString("交易对手户名"));
+    }
+    public void assembleDatafzza(Document origin, AccountVO accountVO) {
+        accountVO.setZfddh(origin.getString("支付订单号"));
+        accountVO.setJylsh(origin.getString("交易流水号"));
+        accountVO.setJyztzh(origin.getString("交易主体账号"));
+        accountVO.setJyztdcrzbz(origin.getString("交易主体的出入账标识"));
+        accountVO.setJylx(origin.getString("交易类型"));
+        accountVO.setZflx(origin.getString("支付类型"));
+        accountVO.setBz(origin.getString("币种"));
+        accountVO.setJyje(origin.getString("交易金额"));
+        accountVO.setJyye(origin.getString("账户余额"));
+        accountVO.setXfposjbh(origin.getString("消费POS机编号"));
+        accountVO.setJysblx(origin.getString("交易设备类型"));
+        accountVO.setJyzfsbip(origin.getString("交易支付设备IP"));
+        accountVO.setMacdz(origin.getString("交易支付设备IP"));
+        accountVO.setJyddjd(origin.getString("交易地点经度"));
+        accountVO.setJyddwd(origin.getString("交易地点纬度"));
+        accountVO.setRemark(origin.getString("备注"));
+        accountVO.setJyztyhkh(origin.getString("交易主体银行卡号"));
+        accountVO.setJyztyhmc(origin.getString("交易主体银行名称"));
+        accountVO.setJyzthm(origin.getString("交易主体户名"));
+        accountVO.setJysj(origin.getString("交易时间"));
+        accountVO.setJydszh(origin.getString("交易对手账号"));
+        accountVO.setJydsyhkh(origin.getString("交易对手银行卡号"));
+        accountVO.setJydsyhkhmc(origin.getString("交易对手银行名称"));
+        accountVO.setJydshm(origin.getString("交易对手户名"));
+    }
+    public void assembleDatawld(Document origin, AccountVO accountVO) {
+        accountVO.setZfddh(origin.getString("商户订单号"));
+        accountVO.setJylx(origin.getString("类型"));
+        accountVO.setJylsh(origin.getString("交易号"));
+        accountVO.setJyztzh(origin.getString("支付宝用户ID"));
+        accountVO.setJyzthm(origin.getString("支付宝户名"));
+        accountVO.setJyztdcrzbz(origin.getString("收/支"));
+        accountVO.setJysj(origin.getString("交易创建时间"));
+        accountVO.setJyje(origin.getString("金额(元)"));
+        accountVO.setJydszh(origin.getString("对手支付宝用户ID"));
+        accountVO.setJydshm(origin.getString("对手支付宝户名"));
+        accountVO.setXfmc(origin.getString("消费名称"));
+        accountVO.setJylyd(origin.getString("交易来源地"));
+        accountVO.setJyzt(origin.getString("交易状态"));
+        accountVO.setRemark(origin.getString("备注"));
+    }
+    public void insertDataWld(AccountVO accountVO, DataMap dataMap) {
+        dataMap.put("支付订单号", accountVO.getZfddh());
+        dataMap.put("交易流水号", accountVO.getJylsh());
+        dataMap.put("交易主体银行名称", accountVO.getJyztyhmc());
+        dataMap.put("交易主体账号", accountVO.getJyztzh());
+        dataMap.put("交易主体银行卡号", accountVO.getJyztyhkh());
+        dataMap.put("交易主体户名", accountVO.getJyzthm());
+        dataMap.put("交易类型", accountVO.getJylx());
+        dataMap.put("支付类型", accountVO.getZflx());
+        dataMap.put("交易主体的出入账标识", accountVO.getJyztdcrzbz());
+        dataMap.put("交易时间", accountVO.getJysj());
+        dataMap.put("币种", accountVO.getBz());
+        dataMap.put("交易金额", accountVO.getJyje());
+        dataMap.put("交易余额", accountVO.getJyye());
+        dataMap.put("交易对手账号", accountVO.getJydszh());
+        dataMap.put("交易对手银行卡号", accountVO.getJydsyhkh());
+        dataMap.put("交易对手银行名称", accountVO.getJydsyhkhmc());
+        dataMap.put("交易对手户名", accountVO.getJydshm());
+        dataMap.put("消费POS机编号", accountVO.getXfposjbh());
+        dataMap.put("交易设备类型", accountVO.getJysblx());
+        dataMap.put("交易支付设备IP", accountVO.getJyzfsbip());
+        dataMap.put("MAC地址", accountVO.getMacdz());
+        dataMap.put("交易地点经度", accountVO.getJyddjd());
+        dataMap.put("交易地点纬度", accountVO.getJyddwd());
+        dataMap.put("消费名称", accountVO.getXfmc());
+        dataMap.put("交易来源地", accountVO.getJylyd());
+        dataMap.put("交易状态", accountVO.getJyzt());
+        dataMap.put("备注", accountVO.getRemark());
+    }
 }

+ 1 - 0
src/main/resources/application.properties

@@ -41,5 +41,6 @@ headers.anti-security-trade-end-analysis-output=\u4EA4\u6613\u5BF9\u624B\u8D26\u
 headers.ordered-names=\u53CD\u8BC8\u6570\u636E-\u8BA2\u5355\u660E\u7EC6,\u6CBB\u5B89\u6570\u636E-\u8BA2\u5355\u660E\u7EC6,\u53CD\u8BC8\u6CBB\u5B89-\u4EA4\u6613\u660E\u7EC6,\u53CD\u8BC8\u6CBB\u5B89-\u8D26\u6237\u900F\u89C6,\u53CD\u8BC8\u6CBB\u5B89-\u5BF9\u624B\u900F\u89C6,\
   \u4E94\u8054\u5355-\u6CE8\u518C\u4FE1\u606F,\u4E94\u8054\u5355-\u767B\u5F55\u65E5\u5FD7,\u4E94\u8054\u5355-\u4EA4\u6613\u8BB0\u5F55,\u4E94\u8054\u5355-\u8D26\u6237\u660E\u7EC6,\u4E94\u8054\u5355-\u8F6C\u8D26\u660E\u7EC6,\u4E94\u8054\u5355-\u8F6C\u8D26\u5206\u6790,\u4E94\u8054\u5355-\u8D26\u6237\u900F\u89C6,\u4E94\u8054\u5355-\u5BF9\u624B\u900F\u89C6,\u4E94\u8054\u5355-IP\u5730\u5740\u5206\u6790,\
   \u4E94\u8054\u5355-\u6536\u8D27\u5730\u5740\u5206\u6790
+headers.anti-security-trade=\u5e8f\u53f7,\u67e5\u8be2\u8d26\u53f7,\u652f\u4ed8\u673a\u6784\u5185\u90e8\u8ba2\u5355\u53f7,\u4ed8\u6b3e\u65b9\u652f\u4ed8\u5e10\u53f7,\u4ed8\u6b3e\u65b9\u94f6\u884c\u5361\u6240\u5c5e\u884c,\u4ed8\u6b3e\u65b9\u94f6\u884c\u5361\u53f7,\u4ea4\u6613\u91d1\u989d,\u4ea4\u6613\u4f59\u989d,\u6536\u6b3e\u65b9\u652f\u4ed8\u5e10\u53f7,\u6536\u6b3e\u65b9\u94f6\u884c\u5361\u6240\u5c5e\u884c,\u6536\u6b3e\u65b9\u94f6\u884c\u5361\u53f7,\u4ea4\u6613\u7c7b\u578b,\u4ea4\u6613\u65f6\u95f4,\u652f\u4ed8\u7c7b\u578b,\u501f\u8d37\u6807\u5fd7,\u5e01\u79cd,\u6d88\u8d39POS\u673a\u7f16\u53f7,\u6536\u6b3e\u65b9\u7684\u5546\u6237\u53f7,\u6536\u6b3e\u65b9\u7684\u5546\u6237\u540d\u79f0,\u4ea4\u6613\u8bbe\u5907\u53f7,\u94f6\u884c\u5916\u90e8\u6e20\u9053\u4ea4\u6613\u6d41\u6c34\u53f7,\u5907\u6ce8
 #\u8F6C\u8D26\u5206\u6790-\u603B\u91D1\u989Ddesc
 #\u8D26\u6237\u900F\u89C6-\u4EA4\u6613\u603B\u989Ddesc