|
|
@@ -13,6 +13,7 @@ import com.fs.his.domain.FsExternalOrder;
|
|
|
import com.fs.his.domain.vo.FsFinanceOrderListVO;
|
|
|
import com.fs.his.dto.FsFinanceOrderImportDTO;
|
|
|
import com.fs.his.dto.FsFinanceOrderImportFailDTO;
|
|
|
+import com.fs.his.dto.FsFinanceOrderImportPreviewDTO;
|
|
|
import com.fs.his.mapper.FsExternalOrderMapper;
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -151,17 +152,73 @@ public class FsFinanceOrderController extends BaseController {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 预览导入数据(解析Excel并匹配订单,不执行写入)
|
|
|
+ */
|
|
|
+ @Log(title = "财务回款导入预览", businessType = BusinessType.OTHER)
|
|
|
+ @PreAuthorize("@ss.hasPermi('store:financeOrder:import')")
|
|
|
+ @PostMapping("/previewImport")
|
|
|
+ public AjaxResult previewImport(MultipartFile file) throws Exception {
|
|
|
+ ExcelUtil<FsFinanceOrderImportDTO> util = new ExcelUtil<>(FsFinanceOrderImportDTO.class);
|
|
|
+ List<FsFinanceOrderImportDTO> importList = util.importExcel(file.getInputStream());
|
|
|
+
|
|
|
+ List<FsFinanceOrderImportPreviewDTO> previewList = new ArrayList<>();
|
|
|
+
|
|
|
+ for (FsFinanceOrderImportDTO dto : importList) {
|
|
|
+ FsFinanceOrderImportPreviewDTO preview = new FsFinanceOrderImportPreviewDTO();
|
|
|
+ preview.setDeliverySn(dto.getDeliverySn());
|
|
|
+ preview.setReturnPrice(dto.getReturnPrice());
|
|
|
+ preview.setReturnTime(dto.getReturnTime());
|
|
|
+
|
|
|
+ // 字段校验
|
|
|
+ String validateMsg = validateImportDto(dto);
|
|
|
+ if (validateMsg != null) {
|
|
|
+ preview.setMatched(false);
|
|
|
+ preview.setFailReason(validateMsg);
|
|
|
+ previewList.add(preview);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 匹配订单
|
|
|
+ FsExternalOrder order = matchOrder(dto);
|
|
|
+ if (order == null) {
|
|
|
+ preview.setMatched(false);
|
|
|
+ preview.setFailReason("快递单号未匹配到订单");
|
|
|
+ previewList.add(preview);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ preview.setOrderId(order.getOrderId());
|
|
|
+ preview.setOrderCode(order.getOrderCode());
|
|
|
+ preview.setTotalPrice(order.getTotalPrice());
|
|
|
+ preview.setPayPrice(order.getPayPrice());
|
|
|
+ preview.setCollectionPrice(order.getCollectionPrice());
|
|
|
+ preview.setMatched(true);
|
|
|
+ previewList.add(preview);
|
|
|
+ }
|
|
|
+
|
|
|
+ return AjaxResult.success(previewList);
|
|
|
+ }
|
|
|
+
|
|
|
/** 根据快递单号匹配订单 */
|
|
|
private FsExternalOrder matchOrder(FsFinanceOrderImportDTO dto) {
|
|
|
if (dto.getDeliverySn() == null || dto.getDeliverySn().isEmpty()) {
|
|
|
return null;
|
|
|
}
|
|
|
- List<FsExternalOrder> list = fsExternalOrderMapper.selectFsExternalOrderListByDeliverySn(dto.getDeliverySn());
|
|
|
+ return matchOrder(dto.getDeliverySn());
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 根据快递单号匹配订单 */
|
|
|
+ private FsExternalOrder matchOrder(String deliverySn) {
|
|
|
+ if (deliverySn == null || deliverySn.isEmpty()) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ List<FsExternalOrder> list = fsExternalOrderMapper.selectFsExternalOrderListByDeliverySn(deliverySn);
|
|
|
if (list == null || list.isEmpty()) {
|
|
|
return null;
|
|
|
}
|
|
|
if (list.size() > 1) {
|
|
|
- logger.warn("快递单号 {} 对应多条订单,取第一条", dto.getDeliverySn());
|
|
|
+ logger.warn("快递单号 {} 对应多条订单,取第一条", deliverySn);
|
|
|
}
|
|
|
return list.get(0);
|
|
|
}
|