新增盛大报价

This commit is contained in:
2026-04-29 14:35:25 +08:00
parent 4eeb45b64c
commit fe42ba31a1
8 changed files with 582 additions and 14 deletions
@@ -7,10 +7,7 @@ import lingtao.net.bean.SysUser;
import lingtao.net.dao.ProductMapper; import lingtao.net.dao.ProductMapper;
import lingtao.net.dao.QuoteLogMapper; import lingtao.net.dao.QuoteLogMapper;
import lingtao.net.util.*; import lingtao.net.util.*;
import lingtao.net.vo.FunReturnVo; import lingtao.net.vo.*;
import lingtao.net.vo.HuaFangPriceProcessItemsVo;
import lingtao.net.vo.HuaFangPriceRequstVo;
import lingtao.net.vo.HuaFangPriceResultVo;
import org.apache.commons.collections.map.HashedMap; import org.apache.commons.collections.map.HashedMap;
import org.apache.shiro.SecurityUtils; import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -1605,21 +1602,21 @@ public class ProductService {
if ("300克".equals(dto.getKind())) { if ("300克".equals(dto.getKind())) {
double sePrice = 5; double sePrice = 5;
prices = new double[]{70, 140, 280, 350, 700, 1400, 2100, 3500, 7000}; prices = new double[]{70, 135, 270, 335, 680, 1375, 2070, 3465, 6960};
if ((width <= 9 && length <= 5.4) || (length <= 9 && width <= 5.4)) { if ((width <= 9 && length <= 5.4) || (length <= 9 && width <= 5.4)) {
} else if (width < 10 && length < 10) { } else if (width < 10 && length < 10) {
sePrice = 10; sePrice = 10;
prices = new double[]{128, 256, 512, 640, 1280, 2560, 3840, 6400, 12800}; prices = new double[]{128, 251, 502, 625, 1260, 2535, 3810, 6365, 12760};
} else if ((width <= 10 && length <= 15) || (length <= 10 && width <= 15)) { } else if ((width <= 10 && length <= 15) || (length <= 10 && width <= 15)) {
prices = new double[]{185, 370, 740, 925, 1850, 3700, 5550, 9250, 18500}; prices = new double[]{185, 365, 730, 910, 1830, 3675, 5520, 9215, 18460};
sePrice = 15; sePrice = 15;
} else if (width < 15 && length < 15) { } else if (width < 15 && length < 15) {
prices = new double[]{300, 600, 1200, 1500, 3000, 6000, 9000, 15000, 30000}; prices = new double[]{300, 595, 1190, 1485, 2980, 5975, 8970, 14965, 29960};
sePrice = 20; sePrice = 20;
// ((width <= 20 && length <= 15) || (length <= 20 && width <= 15)) // ((width <= 20 && length <= 15) || (length <= 20 && width <= 15))
} else { } else {
prices = new double[]{450, 900, 1800, 2250, 4500, 9000, 13500, 22500, 45000}; prices = new double[]{450, 895, 1790, 2235, 4480, 8975, 13470, 22465, 44960};
sePrice = 25; sePrice = 25;
} }
@@ -2964,23 +2961,23 @@ public class ProductService {
designFee = 16; designFee = 16;
designFee9 = 15; designFee9 = 15;
}*/ else if ((length - 4 <= 210 && width - 4 <= 140) || (length - 4 <= 140 && width - 4 <= 210)) { }*/ else if ((length - 4 <= 210 && width - 4 <= 140) || (length - 4 <= 140 && width - 4 <= 210)) {
designFee = 15; designFee = 10;
designFee9 = 15; designFee9 = 15;
} else if ((length - 4 <= 285 && width - 4 - 4 <= 210) || (length - 4 <= 210 && width - 4 <= 285)) { } else if ((length - 4 <= 285 && width - 4 - 4 <= 210) || (length - 4 <= 210 && width - 4 <= 285)) {
designFee = 35; designFee = 30;
designFee9 = 40; designFee9 = 40;
} else if ((length - 4 <= 420 && width - 4 <= 285) || (length - 4 <= 285 && width - 4 <= 420)) { } else if ((length - 4 <= 420 && width - 4 <= 285) || (length - 4 <= 285 && width - 4 <= 420)) {
designFee = 50; designFee = 45;
designFee9 = 60; designFee9 = 60;
} else { } else {
designFee = 50; designFee = 45;
designFee9 = 80; designFee9 = 80;
} }
if ("腰封".equals(dto.getKind())) { if ("腰封".equals(dto.getKind())) {
zhang = 8; zhang = 8;
} }
if ("特种纸名片".equals(dto.getKind())) { if ("特种纸名片".equals(dto.getKind())) {
zhang = 18; zhang = 16;
} }
// 一张l/w 大的纸张能做多少个此类尺寸的产品 // 一张l/w 大的纸张能做多少个此类尺寸的产品
double max = 1; double max = 1;
@@ -4366,12 +4363,96 @@ public class ProductService {
return getTearingJoyPrice(dto, width, length); return getTearingJoyPrice(dto, width, length);
case "哑粉纸": case "哑粉纸":
return getYaFenPrice(dto, width, length); return getYaFenPrice(dto, width, length);
case "UV打印亚克力":
return getUVDayinYKLPrice(dto, width, length);
default: default:
break; break;
} }
return null; return null;
} }
private List<Product> getUVDayinYKLPrice(Product dto, Double width, Double length) {
List<String> craft_lists = dto.getCraft() == null ? new ArrayList<>() : Arrays.asList(dto.getCraft());
List<String> craft_list = new ArrayList<>(craft_lists);
List<Product> priceList = new ArrayList<>();
int count = dto.getCount();
int number = dto.getNumber();
ShengDaPriceRequstVo params = new ShengDaPriceRequstVo();
params.setProductCategory("UVDAYINYAKELI");
params.setPaper(dto.getKind());
ShengDaPriceRequstItemVo baseCrafts = new ShengDaPriceRequstItemVo();
baseCrafts.setName("打印");
Map<String, String> basecraftsItem = new HashMap<>();
basecraftsItem.put("类型", "标准款");
baseCrafts.setParameters(basecraftsItem);
params.setBaseCrafts(Collections.singletonList(baseCrafts));
List<ShengDaPriceRequstPartsVo> partsVoList = new ArrayList<>();
ShengDaPriceRequstPartsVo partsVo = new ShengDaPriceRequstPartsVo();
partsVo.setName("板块");
partsVo.setNum(count * number);
partsVo.setSizeUnit("CM");
partsVo.setWidth(width);
partsVo.setHeight(length);
//印面 0不印 1单面 2双面
partsVo.setPrintSide(0);
craft_list.remove("不印面");
if (craft_list.contains("单面")) {
partsVo.setPrintSide(1);
craft_list.remove("单面");
}
if (craft_list.contains("双面")) {
partsVo.setPrintSide(2);
craft_list.remove("双面");
}
List<ShengDaPriceRequstItemVo> crafts = new ArrayList<>();
//固定分类
ShengDaPriceRequstItemVo craft_diaoke = new ShengDaPriceRequstItemVo();
craft_diaoke.setName("按设计文件雕刻");
Map<String, String> craft_diaokeItem = new HashMap<>();
craft_diaokeItem.put("类型", "文件造型");
craft_diaoke.setParameters(craft_diaokeItem);
crafts.add(craft_diaoke);
for (String s : craft_list) {
ShengDaPriceRequstItemVo craftItem = new ShengDaPriceRequstItemVo();
HashMap<String, String> parameters = new HashMap<>();
if ("3m胶".equals(s)) {
craftItem.setName("背胶");
parameters.put("类型", "覆3M胶");
craftItem.setParameters(parameters);
} else if ("打孔".equals(s)) {
craftItem.setName("打孔");
String type = "按文件设计";
if (craft_list.contains("广告钉") || craft_list.contains("镜钉")) {
type = "按钉子直径打孔";
}
parameters.put("类型", type);
parameters.put("单块打孔个数", String.valueOf(Math.max(dto.getPcount() == null ? 0 : dto.getPcount(), 1)));
craftItem.setParameters(parameters);
} else {
craftItem.setName(s);
}
crafts.add(craftItem);
}
partsVo.setCrafts(crafts);
partsVoList.add(partsVo);
params.setParts(partsVoList);
ShengDaPriceResultVo result = ShengDaPriceUtils.getPrice(params);
double price = Math.ceil(result.getData().getPrice() / (1 - 0.65));
double designPrice = number * 5;
Product product = new Product();
product.setPrice(Math.ceil(Math.max(price, 30) + designPrice));
product.setCount(dto.getCount());
product.setNumber(dto.getNumber());
priceList.add(product);
return priceList;
}
private List<Product> getsmPVCPrice(Product dto, Double width, Double length, String role) { private List<Product> getsmPVCPrice(Product dto, Double width, Double length, String role) {
List<String> craft_list = dto.getCraft() == null ? new ArrayList<>() : Arrays.asList(dto.getCraft()); List<String> craft_list = dto.getCraft() == null ? new ArrayList<>() : Arrays.asList(dto.getCraft());
List<Product> priceList = new ArrayList<>(); List<Product> priceList = new ArrayList<>();
@@ -0,0 +1,33 @@
package lingtao.net.util;
import com.alibaba.fastjson.JSONObject;
import lingtao.net.vo.*;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
public class ShengDaPriceUtils {
private static final String AppId = "3a1ab376af58ec4e918b4c506480efdf";
private static final String AppSecret = "e06KAvT6ugHpQd5zjHukfMJBH0dxfA74gWk9o1lsLqOMTYExFVvWuTh0twMQvNBF";
//UV打印亚克力
private static final String productId = "UVDAYINYAKELI";
public static String getToken() {
String tokenString = HttpUtils.sendGetRequest("http://47.114.150.226:88/Handler/apiShengda.ashx?t=apiGetToken");
System.out.println("获取token返回:" + tokenString);
ShengDaTokenVo huaFangTokenVo = JSONObject.parseObject(tokenString, ShengDaTokenVo.class);
return huaFangTokenVo.getResult();
}
public static ShengDaPriceResultVo getPrice(ShengDaPriceRequstVo params) {
Map<String, String> heards = new HashMap<>();
heards.put("Authorization", "Bearer " + getToken());
String resultText = HttpUtils.sendPostRequest("https://open.sd2000.com/api/app/calculate", JSONObject.toJSONString(params), heards);
ShengDaPriceResultVo result = JSONObject.parseObject(resultText, ShengDaPriceResultVo.class);
return result;
}
}
@@ -0,0 +1,13 @@
package lingtao.net.vo;
import lombok.Data;
import java.util.Map;
@Data
public class ShengDaPriceRequstItemVo {
private String name;
private Map<String, String> parameters;
}
@@ -0,0 +1,16 @@
package lingtao.net.vo;
import lombok.Data;
import java.util.List;
@Data
public class ShengDaPriceRequstPartsVo {
private List<ShengDaPriceRequstItemVo> crafts;
private String name;
private Integer num;
private String sizeUnit;
private Double height;
private Double width;
private Integer printSide;
}
@@ -0,0 +1,17 @@
package lingtao.net.vo;
import lombok.Data;
import java.util.List;
@Data
public class ShengDaPriceRequstVo {
private String productCategory;
private String paper;
private List<ShengDaPriceRequstItemVo> baseCrafts;
private List<ShengDaPriceRequstPartsVo> parts;
}
@@ -0,0 +1,19 @@
package lingtao.net.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ShengDaPriceResultVo {
private Integer errCode;
private String errMsg;
private ResultData data;
@Data
public class ResultData {
private String productCategoryId;
private String productCategoryName;
private Double price;
}
}
@@ -0,0 +1,9 @@
package lingtao.net.vo;
import lombok.Data;
@Data
public class ShengDaTokenVo {
private String type;
private String result;
}
@@ -0,0 +1,380 @@
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<%@include file="/views/common.jsp" %>
</head>
<body>
<style>
#z4_craft .layui-form-select .layui-edge {
right: 20px;
}
</style>
<div class="big_box">
<div class="left_div">
<h1 class="h1">亚克力</h1> <span style="color:red;font-weight:700;"></span>
<hr>
<form class="layui-form">
<input type="hidden" name="proTypeValue" id="proTypeValue" class="layui-input" value="UV打印亚克力"/>
<p>
材质
</p>
<div class="layui-form-item">
<select name="kind" class="select" lay-search lay-filter="kind">
<option value="0.7MM透明亚克力(市场1mm)">1MM透明亚克力</option>
<option value="1.8MM透明亚克力(市场2mm)">2MM透明亚克力</option>
<option value="2.3MM透明亚克力(市场3mm)">3MM透明亚克力</option>
<%-- <option value="3MM透明亚克力(实厚3mm)">3MM透明亚克力</option>--%>
<option value="4.2MM透明亚克力(市场5mm)">5MM透明亚克力</option>
<%-- <option value="5MM透明亚克力(实厚5mm)">5MM透明亚克力</option>--%>
<option value="7.2MM透明亚克力(市场8mm)">8MM透明亚克力</option>
<option value="1.8MM瓷白亚克力(市场2mm)">2MM瓷白亚克力</option>
<option value="2.3MM瓷白亚克力(市场3mm)">3MM瓷白亚克力</option>
<option value="4.2MM瓷白亚克力(市场5mm)">5MM瓷白亚克力</option>
</select>
</div>
<p>
尺寸(CM/厘米)
</p>
<div class="layui-form-item" id="ui_size">
<input type="text" name="size" placeholder="格式:长*宽" id="size" class="layui-input" autocomplete="off">
</div>
<p>
数量(个)
</p>
<div class="layui-form-item">
<input type="text" name="count" id="count" placeholder="请输入整数" class="layui-input" autocomplete="off">
</div>
<p>
款数
</p>
<div class="layui-form-item">
<input type="text" placeholder="请输入整数" autocomplete="off" name="number" id="number" value="1"
class="layui-input" lay-verify="number">
</div>
<p>
客户旺旺
</p>
<div class="layui-form-item">
<input type="text" placeholder="请输入客户旺旺号" autocomplete="off" name="wangwang" id="wangwang"
class="layui-input">
</div>
<p>
工艺
</p>
<div class="layui-form-item" id='z4_craft'>
<div class="layui-input-block ">
印面工艺:
<input type="checkbox" name="craft" lay-filter="ui_craft" value="不印面" title="不印面">
<input type="checkbox" name="craft" lay-filter="ui_craft" value="单面" title="单面" checked>
<div class="layui-inline ymshuang" style="display: none">
<input type="checkbox" name="craft" lay-filter="ui_craft" value="双面" title="双面">
</div>
</div>
<div class="layui-input-block dyxg">
打印效果:
<input type="checkbox" name="craft" lay-filter="ui_craft" value="背喷全打白" title="背喷全打白" checked>
<input type="checkbox" name="craft" lay-filter="ui_craft" value="透明打白" title="透明打白">
</div>
<div class="layui-input-block bf3m">
背覆工艺:
<input type="checkbox" name="craft" lay-filter="ui_craft" value="3m胶" title="3m胶">
</div>
<div class="layui-input-block">
打孔工艺:
<input type="checkbox" name="craft" lay-filter="ui_craft" value="打孔" title="打孔">
<div class="layui-inline dakong" style="display: none;width: 120px">
<input type="text" class="layui-input" name="pcount" placeholder="打孔个数" value="1"/>
</div>
<input type="checkbox" name="craft" lay-filter="ui_craft" value="广告钉" title="广告钉">
<input type="checkbox" name="craft" lay-filter="ui_craft" value="镜钉" title="镜钉">
</div>
</div>
<hr>
<div class="layui-form-item">
<button class="layui-btn" lay-submit="" lay-filter="acount_btn">计算</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
<h2>计算结果-
<button type="button" class="layui-btn layui-btn-primary layui-btn-sm copyResult"
onclick="copyResult()">点击复制
</button>
</h2>
<div>
<textarea rows="11" cols="75" id="span_result" readonly="readonly"></textarea>
<%@include file="../acountExpressFee.jsp" %>
</div>
<div>
<table class="layui-hide" id="priceTable" lay-filter="priceTable"></table>
</div>
</form>
</div>
<div class="right_div" style="margin-left:50px;">
<div class="layui-carousel" id="test1">
<div carousel-item id="carousel"></div>
<br>
<div id="remark" style="font-size:20px;color:red"></div>
</div>
</div>
</div>
</body>
<%@include file="/views/copyResult.jsp" %>
<script>
layui.use(['table', 'form', 'carousel'], function () {
var form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
var carousel = layui.carousel;
var table = layui.table;
const carft_list1 = ["不印面", "单面", "双面"];
const carft_list2 = ["背喷全打白", "透明打白"];
const carft_list3 = ["广告钉", "镜钉"];
//建造实例
ins = carousel.render({});
var html = " ";
var remark = " ";
// 清空轮播图
$("#carousel").empty();
$("#remark").empty();
$.ajax({
url: "${pageContext.request.contextPath}/getImgs",
type: "GET",
data: {
proTypeValue: $("#proTypeValue").val(),
kindValue: $('select[name="kind"] oprion:selected').val()
},
success: function (result) {
for (let i = 0; i < result.length; i++) {
// 只留一个remark
remark = "";
html += '<div><img style="width:100%;height: 100%;object-fit: contain" src="' + result[i].imgUrl + '"></div>';
remark += '<div><span>' + result[i].remark + '<span/></div>';
}
$("#carousel").append(html);
// 如果没有说明,就不显示null
if (remark.indexOf("null") < 0) {
$("#remark").append(remark);
}
// 如果没有轮播图就隐藏
if (result.length == 0) {
document.getElementById("test1").style.display = "none"; //隐藏
} else {
document.getElementById("test1").style.display = "block"; //显示
ins.reload({
elem: '#test1',
width: result[0].imgWidth, //设置容器宽度
height: result[0].imgHeight
});
}
}
});
form.on('select(kind)', function (data) {
$(".dyxg").find(":input").attr("disabled", false);
$("#z4_craft input[name='craft']").prop("checked", false)
$("#z4_craft input[name='craft'][value='单面']").prop("checked", true)
$("#z4_craft input[name='craft'][value='背喷全打白']").prop("checked", true)
$(".ymshuang").hide();
$(".dakong").hide();
$(".dakong").find(":input").attr("disabled", true);
$(".bf3m").show();
$(".dyxg").show();
if (data.value == "1.8MM瓷白亚克力(市场2mm)" || data.value == "2.3MM瓷白亚克力(市场3mm)" || data.value == "4.2MM瓷白亚克力(市场5mm)") {
$(".ymshuang").show();
$(".dyxg").hide();
$(".dyxg").find(":input").attr("disabled", true);
}
if (data.value == "7.2MM透明亚克力(市场8mm)") {
$(".bf3m").hide();
}
form.render();
})
form.on('checkbox(ui_craft)', function (data) {
let craft_list = [];
craft_list.push($("select[name='craft'] option:selected").val());
$("input[name='craft']:checked").each(function () {
if (!$(this).is(':disabled')) {
craft_list.push($(this).val());
}
}
);
const carft1 = carft_list1.filter(craft => craft_list.includes(craft));
if (carft1.length > 1) {
$(data.elem).prop("checked", false);
layer.msg("印面工艺不能同时选择", {offset: ['300px', '300px']}, function () {
});
form.render();
return false;
}
const carft2 = carft_list2.filter(craft => craft_list.includes(craft));
if (carft2.length > 1) {
$(data.elem).prop("checked", false);
layer.msg("打印效果不能同时选择", {offset: ['300px', '300px']}, function () {
});
form.render();
return false;
}
const carft3 = carft_list3.filter(craft => craft_list.includes(craft));
if (carft3.length > 1) {
$(data.elem).prop("checked", false);
layer.msg(carft_list3.join("-") + "不能同时选择", {offset: ['300px', '300px']}, function () {
});
form.render();
return false;
}
if (data.value == "打孔") {
if (data.elem.checked) {
$(".dakong").show();
$(".dakong").find(":input").attr("disabled", false);
} else {
$(".dakong").hide();
$(".dakong").find(":input").attr("disabled", true);
}
}
})
// 点击计算,计算价格
form.on('submit(acount_btn)', function (data) {
var number = $("#number").val();
var size = $("#size").val();
var count = $("#count option:selected").val();
var kind = $("select[name='kind'] option:selected").text();
var craft = [];
if ($("input[name='switchCount']").is(":checked")) {
count = $("#count").val();
}
if (size == "") {
layer.msg('请填写尺寸!', {offset: ['300px', '300px']}, function () {
});
return false;
}
$("input:checkbox[name='craft']:checked").each(function (i) {
// 没有被禁用的工艺加到arr中
if (!$(this).is(':disabled')) {
if ($(this).val() == "打孔") {
craft.push($(this).val() + $("input[name='pcount']").val())
} else {
craft.push($(this).val());
}
}
});
const carft3 = carft_list3.filter(item => craft.includes(item));
if (carft3.length > 0 && !$("input[name='craft'][value='打孔']")[0].checked) {
layer.msg("钉子选择需选中打孔!", {offset: ['300px', '300px']}, function () {
});
return false;
}
//
// if ((size.split("*")[0] < 5.4 || size.split("*")[1] < 5.4)) {
// if (!craft.includes("异形模切")) {
// layer.msg("尺寸小与5.4*5.4请选择异形模切", {offset: ['300px', '300px']}, function () {
// });
// return false;
// }
// }
// if ((size.split("*")[0] < 5.4 || size.split("*")[1] < 5.4)) {
// layer.msg("最小尺寸不能小于5.4*5.4", {offset: ['300px', '300px']}, function () {
// });
// return false;
// }
$.ajax({
url: "${path}/getThanSum",
type: "GET",
data: $(".big_box form").serialize(),
success: function (result) {
if (result.code == 100) {
layer.msg(result.msg, {offset: ['300px', '300px']}, function () {
});
return false;
}
var data = result.data.proList;
var span_result = '亚克力 - ' + kind + ' - ' + size + ' cm (同款内容)\n';
span_result += `工艺:` + craft.join(",") + '\n';
if (number > 1) {
for (let i = 0; i < data.length; i++) {
span_result += number + '款 各' + data[i].count + "个,共" + data[i].price + "元" + '\n'
data[i].number = number;
}
} else {
for (let i = 0; i < data.length; i++) {
span_result += number + '款 ' + data[i].count + "个,共" + data[i].price + "元" + '\n'
data[i].number = number;
}
}
span_result += '包邮,免费设计呢~(偏远地区需补邮费)'
$("#span_result").val(span_result);
//计算完自动复制文本
var e = document.getElementById("span_result");//对象是content
if (e.value != "") {
e.select();//选择对象
document.execCommand("Copy");//执行浏览器复制命令
}
//生成表格
table.render({
elem: '#priceTable',
even: true, //隔行变色
data: data, // 赋值已知数据
width: 500,
cols: [[
{
field: 'number',
width: '12%',
align: "center",
title: '款数'
}, {
field: 'count',
width: '16%',
align: "center",
title: '数量'
}, {
field: 'price',
width: '16%',
align: "center",
title: '报价'
}, {
field: 'wangwang',
align: "center",
width: '16%',
title: '折扣价'
}, {
field: 'wangwang',
align: "center",
width: '19%',
title: '跳楼价'
}, {
field: 'weight',
width: '21%',
align: "center",
title: '重量(kg'
}
]],
done: function () {
}
});
}
});
return false;
});
})
;
</script>
</html>