Procházet zdrojové kódy

fix

release_toaliyun_real
winter před 2 roky
rodič
revize
3a816e7bda
4 změnil soubory, kde provedl 206 přidání a 16 odebrání
  1. +2
    -2
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxSettleMerchantController.java
  2. +1
    -1
      mallinkService/src/main/java/com/iformall/service/WxSettleMerchantService.java
  3. +42
    -13
      mallinkService/src/main/java/com/iformall/service/impl/WxSettleMerchantServiceImpl.java
  4. +161
    -0
      mallinkService/src/main/java/com/iformall/utils/PriceUtilV2.java

+ 2
- 2
mallinkAdmin/src/main/java/com/iformall/controller/market/WxSettleMerchantController.java Zobrazit soubor

@@ -65,13 +65,13 @@ public class WxSettleMerchantController extends BaseController {
if (null == wxSettleMerchant) {
return new ResultData(Result.ERROR,"参数错误");
}
return new ResultData(wxSettleMerchantService.getMapDetail(wxSettleMerchant));
return new ResultData(wxSettleMerchantService.getMapDetail(wxSettleMerchant,false));
}
@ApiOperation("计算周期性费用")
@GetMapping("/calcute")
public ResultData calcutePeriodicity(@ModelAttribute WxSettleMerchant wxSettleMerchant) {
return new ResultData(wxSettleMerchantService.getMapDetail(wxSettleMerchant));
return new ResultData(wxSettleMerchantService.getMapDetail(wxSettleMerchant,true));
}

@ApiOperation("导出")


+ 1
- 1
mallinkService/src/main/java/com/iformall/service/WxSettleMerchantService.java Zobrazit soubor

@@ -27,7 +27,7 @@ public interface WxSettleMerchantService {
* @return
*/
WxSettleMerchant getById(TenantEntity tenantEntity,Long id);
Map<String,Object> getMapDetail(WxSettleMerchant record);
Map<String,Object> getMapDetail(WxSettleMerchant record,boolean needCalcute);
/**


+ 42
- 13
mallinkService/src/main/java/com/iformall/service/impl/WxSettleMerchantServiceImpl.java Zobrazit soubor

@@ -10,6 +10,9 @@ import com.iformall.mapper.WxSettleMerchantMapper;
import com.iformall.service.WxSettleMerchantService;
import com.iformall.utils.DateUtils;
import com.iformall.utils.ExcelExportUtils;
import com.iformall.utils.PriceUtil;
import com.iformall.utils.PriceUtilV2;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -40,7 +43,7 @@ public class WxSettleMerchantServiceImpl implements WxSettleMerchantService{
}
@Override
public Map<String,Object> getMapDetail(WxSettleMerchant record) {
public Map<String,Object> getMapDetail(WxSettleMerchant record,boolean needCalcute) {
Map<String,Object> valueMap = new HashMap<String,Object>();
valueMap.put("beginTime", DateUtils.format(record.getBeginTime()));
valueMap.put("endTime", DateUtils.format(record.getEndTime()));
@@ -49,7 +52,15 @@ public class WxSettleMerchantServiceImpl implements WxSettleMerchantService{
valueMap.put("merchantCode", record.getMerchantCode());
valueMap.put("merchantPerson", record.getMerchantPerson());
valueMap.put("merchantPhone", record.getMerchantPhone());
valueMap.put("totalMoney", record.getTotalMoney());
if (needCalcute) {
record.setCardMoney(calcuteByMoneyAndRate(record.getCardSaleMoney(),record.getCardRate()));
record.setZfbMoney(calcuteByMoneyAndRate(record.getZfbSaleMoney(),record.getZfbRate()));
record.setUnionMoney(calcuteByMoneyAndRate(record.getUnionSaleMoney(),record.getUnionRate()));
record.setWxMoney(calcuteByMoneyAndRate(record.getWxSaleMoney(),record.getWxRate()));
record.setEraseZeroMoney(calcuteByMoneyAndRate(record.getEraseZeroSaleMoney(),record.getEraseZeroRate()));
record.setCashMoney(calcuteByMoneyAndRate(record.getCashSaleMoney(),record.getCashRate()));
}
valueMap.put("cardSaleMoney", handleExcelData(record.getCardSaleMoney()));
@@ -70,10 +81,12 @@ public class WxSettleMerchantServiceImpl implements WxSettleMerchantService{
valueMap.put("cashSaleMoney", handleExcelData(record.getCashSaleMoney()));
valueMap.put("cashRate", handleExcelData(record.getCashRate()));
valueMap.put("cashMoney", handleExcelData(record.getCashMoney()));
valueMap.put("totalSaleMoney", calcuteAdd(record.getCardSaleMoney(),record.getZfbSaleMoney(),record.getUnionSaleMoney(),
record.getWxSaleMoney(),record.getEraseZeroSaleMoney(),record.getCashSaleMoney()));
valueMap.put("totalReduceMoney", calcuteAdd(record.getCardMoney(),record.getZfbMoney(),record.getUnionMoney(),record.getWxMoney(),
record.getEraseZeroMoney(),record.getCashMoney()));
BigDecimal totalSaleMoney = calcuteAdd(record.getCardSaleMoney(),record.getZfbSaleMoney(),record.getUnionSaleMoney(),
record.getWxSaleMoney(),record.getEraseZeroSaleMoney(),record.getCashSaleMoney());
valueMap.put("totalSaleMoney", totalSaleMoney);
BigDecimal totalReduceMoney = calcuteAdd(record.getCardMoney(),record.getZfbMoney(),record.getUnionMoney(),record.getWxMoney(),
record.getEraseZeroMoney(),record.getCashMoney());
valueMap.put("totalReduceMoney", totalReduceMoney);
valueMap.put("rentMoney", handleExcelData(record.getRentMoney()));
@@ -85,13 +98,24 @@ public class WxSettleMerchantServiceImpl implements WxSettleMerchantService{
valueMap.put("otherMoney", handleExcelData(record.getOtherMoney()));
valueMap.put("lastRemaining", handleExcelData(record.getLastRemaining()));
valueMap.put("pointsRate", handleExcelData(record.getPointsRate()));
if (needCalcute) {
record.setPointsMoney(calcuteByMoneyAndRate(totalSaleMoney,record.getPointsRate()));
}
valueMap.put("pointsMoney", handleExcelData(record.getPointsMoney()));
valueMap.put("totalTempMoney", calcuteAdd(record.getRentMoney(),record.getRentContractMoney(),record.getEmployeeManageMoney(),record.getSalesSlipMoney(),
record.getSalary(),record.getEarnestMoney(),record.getOtherMoney(),record.getLastRemaining(),record.getPointsMoney()));
BigDecimal totalTempMoney = calcuteAdd(record.getRentMoney(),record.getRentContractMoney(),record.getEmployeeManageMoney(),record.getSalesSlipMoney(),
record.getSalary(),record.getEarnestMoney(),record.getOtherMoney(),record.getLastRemaining(),record.getPointsMoney());
valueMap.put("totalTempMoney", totalTempMoney);
valueMap.put("totalMoneyDX", valueMap);
valueMap.put("actualMoneyDX", valueMap);
if (needCalcute) {
record.setTotalMoney(totalSaleMoney.subtract(calcuteAdd(totalReduceMoney,totalTempMoney)));
}

valueMap.put("totalMoney", record.getTotalMoney());
valueMap.put("actualMoney", record.getActualMoney());
valueMap.put("totalMoneyDX", PriceUtilV2.number2CNMontrayUnit(record.getTotalMoney()));
if (null != record.getActualMoney()) {
valueMap.put("actualMoneyDX", PriceUtilV2.number2CNMontrayUnit(record.getActualMoney()));
}
valueMap.put("accountName", record.getAccountName());
valueMap.put("accountBank", record.getAccountBank());
@@ -99,6 +123,13 @@ public class WxSettleMerchantServiceImpl implements WxSettleMerchantService{
return valueMap;
}
private BigDecimal calcuteByMoneyAndRate(BigDecimal saleMoney,BigDecimal rate) {
if (null == saleMoney || null == rate) {
return new BigDecimal(0);
}
return saleMoney.multiply(rate).setScale(3,BigDecimal.ROUND_HALF_UP);
}
private BigDecimal calcuteAdd(BigDecimal... args) {
BigDecimal result = new BigDecimal(0);
for (int i = 0 ; i < args.length ; i ++) {
@@ -138,10 +169,8 @@ public class WxSettleMerchantServiceImpl implements WxSettleMerchantService{
@Override
public void exportData(WxSettleMerchant record, HttpServletRequest request, HttpServletResponse response) {
Map<String,Object> valueMap = getMapDetail(record);
Map<String,Object> valueMap = getMapDetail(record,false);
ExcelExportUtils.exportByModel("excel/settle.xlsx","供应商结算单_"+record.getMerchantName(),"供应商结算单", valueMap,request,response);
}




+ 161
- 0
mallinkService/src/main/java/com/iformall/utils/PriceUtilV2.java Zobrazit soubor

@@ -0,0 +1,161 @@
package com.iformall.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.math.BigDecimal;

public class PriceUtilV2 {

private static final Logger logger = LoggerFactory.getLogger(PriceUtilV2.class);

/**
* 数字金额大写转换,思想先写个完整的然后将如零拾替换成零 要用到正则表达式
*/
public static String digitUppercase(double n) {
String fraction[] = {"角", "分"};
String digit[] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
String unit[][] = {{"圆", "万", "亿"}, {"", "拾", "佰", "仟"}};

String head = n < 0 ? "负" : "";
n = Math.abs(n);

String s = "";
for (int i = 0; i < fraction.length; i++) {
s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", "");
}
if (s.length() < 1) {
s = "整";
}
int integerPart = (int) Math.floor(n);

for (int i = 0; i < unit[0].length && integerPart > 0; i++) {
String p = "";
for (int j = 0; j < unit[1].length && n > 0; j++) {
p = digit[integerPart % 10] + unit[1][j] + p;
integerPart = integerPart / 10;
}
s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s;
}
return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整");
}


/**
* 汉语中数字大写
*/
private static final String[] CN_UPPER_NUMBER = {"零", "壹", "贰", "叁", "肆",
"伍", "陆", "柒", "捌", "玖"};
/**
* 汉语中货币单位大写,这样的设计类似于占位符
*/
private static final String[] CN_UPPER_MONETRAY_UNIT = {"厘","分", "角", "元",
"拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "兆", "拾",
"佰", "仟"};
/**
* 特殊字符:整
*/
private static final String CN_FULL = "整";
/**
* 特殊字符:负
*/
private static final String CN_NEGATIVE = "负";
/**
* 特殊字符:零元整
*/
private static final String CN_ZEOR_FULL = "零元" + CN_FULL;

/**
* 把输入的金额转换为汉语中人民币的大写
*
* @param numberOfMoney 输入的金额
* @return 对应的汉语大写
*/
public static String number2CNMontrayUnit(BigDecimal numberOfMoney) {
StringBuilder sb = new StringBuilder();
int signum = numberOfMoney.signum();
// 零元整的情况
if (numberOfMoney.compareTo(new BigDecimal(0)) == 0) {
return CN_ZEOR_FULL;
}else if (numberOfMoney.compareTo(new BigDecimal(0)) < 0) {
sb.append(CN_NEGATIVE);
}
//这里会进行金额的四舍五入
long number = numberOfMoney.movePointRight(3).setScale(0, BigDecimal.ROUND_HALF_UP).abs().longValue();
// 得到小数点后两位值
long scale = number % 1000;
int numUnit = 0;
int numIndex = 0;
boolean getZero = false;
// 判断最后两位数,一共有四中情况:00 = 0, 01 = 1, 10, 11
if (!(scale > 0)) {
numIndex = 3;
number = number / 1000;
getZero = true;
}
if ((scale > 0) && (!(scale % 100 > 0))) {
numIndex = 2;
number = number / 100;
getZero = true;
}
if ((scale > 0) && (!(scale % 10 > 0))) {
numIndex = 1;
number = number / 10;
getZero = true;
}
int zeroSize = 0;
while (true) {
if (number <= 0) {
break;
}
// 每次获取到最后一个数
numUnit = (int) (number % 10);
if (numUnit > 0) {
if ((numIndex == 9) && (zeroSize >= 3)) {
sb.insert(0, CN_UPPER_MONETRAY_UNIT[6]);
}
if ((numIndex == 13) && (zeroSize >= 3)) {
sb.insert(0, CN_UPPER_MONETRAY_UNIT[10]);
}
sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]);
sb.insert(0, CN_UPPER_NUMBER[numUnit]);
getZero = false;
zeroSize = 0;
} else {
++zeroSize;
if (!(getZero)) {
sb.insert(0, CN_UPPER_NUMBER[numUnit]);
}
if (numIndex == 2) {
if (number > 0) {
sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]);
}
} else if (((numIndex - 2) % 4 == 0) && (number % 1000 > 0)) {
sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]);
}
getZero = true;
}
// 让number每次都去掉最后一个数
number = number / 10;
++numIndex;
}
// 如果signum == -1,则说明输入的数字为负数,就在最前面追加特殊字符:负
if (signum == -1) {
sb.insert(0, CN_NEGATIVE);
}
// 输入的数字小数点后两位为"00"的情况,则要在最后追加特殊字符:整
if (!(scale > 0)) {
sb.append(CN_FULL);
}
return sb.toString();
}

public static void main(String[] args) {
BigDecimal numberOfMoney = new BigDecimal(432342341231.906);
System.out.println(numberOfMoney.toString());
System.out.println(number2CNMontrayUnit(numberOfMoney));
}

}

Načítá se…
Zrušit
Uložit