|
|
@@ -19,6 +19,96 @@ import java.util.List;
|
|
|
public class InventoryUCUtil {
|
|
|
private static JdbcTemplate jdbcTemplate;
|
|
|
|
|
|
+ public static void sort(List<InventoryUnitChange> dataList) {
|
|
|
+ dataList.sort((a, b) -> {
|
|
|
+ // 首先按 inventoryNum 排序
|
|
|
+ int inventoryNumCompare = compareInventoryNum(a.getInventoryNum(), b.getInventoryNum());
|
|
|
+ if (inventoryNumCompare != 0) {
|
|
|
+ return inventoryNumCompare;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果 inventoryNum 相同,按 formNumber 排序
|
|
|
+ return compareFormNumber(a.getFormNumber(), b.getFormNumber());
|
|
|
+ });
|
|
|
+ }
|
|
|
+ // 比较 inventoryNum 的方法
|
|
|
+ private static int compareInventoryNum(String num1, String num2) {
|
|
|
+ if (num1 == null && num2 == null) return 0;
|
|
|
+ if (num1 == null) return -1;
|
|
|
+ if (num2 == null) return 1;
|
|
|
+
|
|
|
+ // 提取数字部分和字母部分
|
|
|
+ Integer num1Int = extractNumber(num1);
|
|
|
+ Integer num2Int = extractNumber(num2);
|
|
|
+
|
|
|
+ // 先按数字比较
|
|
|
+ int numCompare = Integer.compare(num1Int != null ? num1Int : Integer.MAX_VALUE,
|
|
|
+ num2Int != null ? num2Int : Integer.MAX_VALUE);
|
|
|
+ if (numCompare != 0) {
|
|
|
+ return numCompare;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 数字相同则按字母比较
|
|
|
+ String letter1 = extractLetter(num1);
|
|
|
+ String letter2 = extractLetter(num2);
|
|
|
+ return letter1.compareTo(letter2);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 比较 formNumber 的方法
|
|
|
+ private static int compareFormNumber(String num1, String num2) {
|
|
|
+ if (num1 == null && num2 == null) return 0;
|
|
|
+ if (num1 == null) return -1;
|
|
|
+ if (num2 == null) return 1;
|
|
|
+
|
|
|
+ // 去掉横线并分割
|
|
|
+ String[] parts1 = num1.replace("-", "").split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
|
|
|
+ String[] parts2 = num2.replace("-", "").split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
|
|
|
+
|
|
|
+ int minLength = Math.min(parts1.length, parts2.length);
|
|
|
+
|
|
|
+ for (int i = 0; i < minLength; i++) {
|
|
|
+ String part1 = parts1[i];
|
|
|
+ String part2 = parts2[i];
|
|
|
+
|
|
|
+ // 如果都是数字,按数字比较
|
|
|
+ if (isNumeric(part1) && isNumeric(part2)) {
|
|
|
+ int numCompare = Integer.compare(Integer.parseInt(part1), Integer.parseInt(part2));
|
|
|
+ if (numCompare != 0) {
|
|
|
+ return numCompare;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 否则按字符串比较
|
|
|
+ int strCompare = part1.compareTo(part2);
|
|
|
+ if (strCompare != 0) {
|
|
|
+ return strCompare;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果前面都相同,长度短的在前
|
|
|
+ return Integer.compare(parts1.length, parts2.length);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 提取字符串中的数字部分
|
|
|
+ private static Integer extractNumber(String str) {
|
|
|
+ java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("(\\d+)");
|
|
|
+ java.util.regex.Matcher matcher = pattern.matcher(str);
|
|
|
+ if (matcher.find()) {
|
|
|
+ return Integer.parseInt(matcher.group(1));
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 提取字符串中的字母部分
|
|
|
+ private static String extractLetter(String str) {
|
|
|
+ return str.replaceAll("\\d+", "");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 判断字符串是否为纯数字
|
|
|
+ private static boolean isNumeric(String str) {
|
|
|
+ return str.matches("\\d+");
|
|
|
+ }
|
|
|
+
|
|
|
@Autowired
|
|
|
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
|
|
|
InventoryUCUtil.jdbcTemplate = jdbcTemplate;
|
|
|
@@ -44,8 +134,8 @@ public class InventoryUCUtil {
|
|
|
for (InventoryUnitChange change : dataList) {
|
|
|
ChangeInventoryForm changeForm = getChangeForm(contractId, periodId, change.getFormNumber());
|
|
|
if(changeForm==null){
|
|
|
- String insertSql = "INSERT INTO s_change_inventory_form(id,contract_id,period_id,form_number,item_name,change_total,change_money,after_change_total,after_change_money,is_deleted) VALUES(?,?,?,?,?,?,?,?,?,?)";
|
|
|
- jdbcTemplate.update(insertSql, SnowFlakeUtil.getId(), contractId, periodId, change.getFormNumber(), change.getItemName(),
|
|
|
+ String insertSql = "INSERT INTO s_change_inventory_form(id,contract_id,period_id,inventory_num,form_number,item_name,change_total,change_money,after_change_total,after_change_money,is_deleted) VALUES(?,?,?,?,?,?,?,?,?,?,?)";
|
|
|
+ jdbcTemplate.update(insertSql, SnowFlakeUtil.getId(), contractId, periodId,change.getInventoryNum(), change.getFormNumber(), change.getItemName(),
|
|
|
change.getChangePeriodUnit(), change.getChangePeriodAmount(), change.getChangeEndPeriodUnit(),
|
|
|
change.getChangeEndPeriodAmount(), 0);
|
|
|
}else {
|