diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/CustomerController.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/CustomerController.java index e262404..06750b7 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/CustomerController.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/CustomerController.java @@ -9,8 +9,8 @@ import me.chyxion.tigon.model.ViewModel; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import me.chyxion.tigon.model.ListResult; -import me.chyxion.tigon.webmvc.ResourceModel; import org.apache.commons.lang3.tuple.Pair; +import me.chyxion.tigon.webmvc.ResourceModel; import javax.validation.constraints.NotNull; import org.apache.commons.lang3.StringUtils; import com.pudonghot.ambition.crm.model.User; @@ -156,7 +156,7 @@ public class CustomerController } @RequiresRoles(User.ROLE_ADMIN) - @RequestMapping(value = "/export", method = RequestMethod.POST) + @RequestMapping("/export") public ResourceModel exportCSV() { return new ResourceModel(((CustomerService) queryService).exportCSV(getUserId()), null, null); } diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java index a873b96..1539469 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java @@ -1,18 +1,15 @@ package com.pudonghot.ambition.crm.service.support; +import java.io.*; import java.util.*; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.csv.CSVFormat; -import org.apache.commons.csv.CSVPrinter; import org.apache.commons.io.FileUtils; import org.springframework.util.Assert; import me.chyxion.tigon.mybatis.Search; import me.chyxion.tigon.model.ViewModel; import org.apache.commons.csv.CSVRecord; +import org.apache.commons.csv.CSVFormat; +import org.apache.commons.csv.CSVPrinter; import com.pudonghot.ambition.crm.model.*; import me.chyxion.tigon.model.ListResult; import com.pudonghot.ambition.crm.mapper.*; @@ -66,7 +63,8 @@ public class CustomerServiceSupport CSVFormat.DEFAULT.withHeader( "ID", "Name", - "Sales(3 Years)", + "Sum Sales(3 Years)", + "Sales", "Comment", "Application", "Status", @@ -441,16 +439,22 @@ public class CustomerServiceSupport */ @Override public File exportCSV(final String operator) { - // final File file = new File(FileUtils.getTempDirectory(), - final File file = new File(FileUtils.getUserDirectory(), - DateFormatUtils.format(System.currentTimeMillis(), + final File file = new File(FileUtils.getTempDirectory(), + "Customers_" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd_HHmmss") + ".csv"); - try (final FileWriter fileWriter = new FileWriter(file); + try (final OutputStreamWriter fileWriter = + new OutputStreamWriter(new FileOutputStream(file), CSVUtils.GBK); final CSVPrinter printer = EXPORT_FORMAT.print(fileWriter)) { - scan(512, new Search(), this::exportList, this::exportCount, c -> { + + scan(512, new Search() + .setAttr("APPLICATION_NOT_NULL", true) + .desc(Customer.SUM_YTD_SALES), + this::exportList, + this::exportCount, c -> { // "ID", // "Name", -// "Sales(3 Years)", +// "Sum Sales(3 Years)", +// "Sales", // "Comment", // "Application", // "Status", @@ -464,10 +468,11 @@ public class CustomerServiceSupport // "Sales Person"); try { - log.info("Customer [{}].", c); + log.info("Export Customer [{}].", c); printer.printRecord(c.getId(), c.getName(), - c.getYtdSales(), + c.getSumYtdSales(), + joinYtdSales(c.getYears(), c.getYtdSales()), extractIssue(c.getLastIssue()), joinApplicationNames(c.getApplicationNames()), c.getStatusText(), @@ -502,6 +507,7 @@ public class CustomerServiceSupport int exportCount(final Search search) { return mapper.countForShow(search, null); } + private String extractIssue(final String issue) { if (StringUtils.isNotBlank(issue)) { return issue.split(SPLITTER)[1]; @@ -516,6 +522,22 @@ public class CustomerServiceSupport return ""; } + private String joinYtdSales(final String strYears, final String strYtdSales) { + if (StringUtils.isNotBlank(strYears) && + StringUtils.isNotBlank(strYtdSales)) { + final String[] years = strYears.split(SPLITTER); + final String[] sales = strYtdSales.split(SPLITTER); + final List ytdSales = new ArrayList<>(years.length); + + int i = 0; + for (final String year : years) { + ytdSales.add(year + ": " + sales[i++]); + } + return StringUtils.join(ytdSales, "\n"); + } + return ""; + } + private String dateFormat(Date date, String pattern) { return date != null ? DateFormatUtils.format(date, pattern) : ""; } diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/CustomerMapper.xml b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/CustomerMapper.xml index a270ac4..abe6796 100644 --- a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/CustomerMapper.xml +++ b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/CustomerMapper.xml @@ -153,14 +153,14 @@ and enabled = 1) year, - (select group_concat(year order by year asc separator 0x1d) + (select group_concat(year order by year desc separator 0x1d) from crm_customer_year_to_date_sale where customer_id = customer.id and enabled = 1 group by customer_id) years, - (select group_concat(ytd_sale order by year asc separator 0x1d) + (select group_concat(ytd_sale order by year desc separator 0x1d) from crm_customer_year_to_date_sale where customer_id = customer.id and enabled = 1 @@ -214,6 +214,13 @@ + + + join (select distinct customer_id + from crm_customer_application) app_not_null + on customer.id = app_not_null.customer_id + + join (select distinct customer_id from crm_customer_application diff --git a/web/app/templates/customer/list.hbs b/web/app/templates/customer/list.hbs index 05e99a0..b0e6fcb 100644 --- a/web/app/templates/customer/list.hbs +++ b/web/app/templates/customer/list.hbs @@ -22,6 +22,12 @@ Import Sales Data {{/link-to}} +
  • + + + Export Customers + +
  • {{/if}}
  • {{#link-to 'customer.list.advanced-query'}}