Merge branch 'master' of http://10.153.19.25:10105/r/ERP_override
| | |
| | |
|
| | | </div>
|
| | |
|
| | |
|
| | | <div style="position: fixed; top: 93px; right: 120px; display: flex; align-items: center;">
|
| | | <label style="margin-right: 10px; color: #333;">文件保存模式:</label>
|
| | | <select
|
| | | v-model="fileSaveMode"
|
| | | style="padding: 8px; border: 1px solid #ccc; border-radius: 4px;"
|
| | | >
|
| | | <option value="1">单文件</option>
|
| | | <option value="2">多文件</option>
|
| | | </select>
|
| | | </div>
|
| | | <button @click="submitLayouts" style="position: fixed; top: 90px; right: 20px; padding: 10px; background: #4CAF50; color: white; border: none; border-radius: 5px; cursor: pointer;">
|
| | | 保存OPT
|
| | | </button>
|
| | |
| | | import { useI18n } from "vue-i18n";
|
| | | import { ElMessage } from "element-plus";
|
| | | import requestOptimize from "@/utils/requestOptimize";
|
| | | import useUserInfoStore from "@/stores/userInfo";
|
| | |
|
| | | const { t } = useI18n();
|
| | |
|
| | |
| | | const optimizeLayouts = ref(null);
|
| | |
|
| | | const fileSaveMode = ref(1);
|
| | | const fileMode = ref();
|
| | |
|
| | | const userStore = useUserInfoStore()
|
| | | const username = userStore.user.userName;
|
| | |
|
| | | // 从 localStorage 读取库存数据
|
| | | const loadInventoryData = () => {
|
| | |
| | | });
|
| | | };
|
| | |
|
| | |
|
| | | const fetchSettings = async (username) => {
|
| | | try {
|
| | | const response = await request.post(`/glassOptimize/selectOptimizeParms/${username}`);
|
| | | if (response.code == 200) {
|
| | | if (!response.data) {
|
| | | console.error('响应数据为空');
|
| | | return;
|
| | | }
|
| | | const parsedData = JSON.parse(response.data);
|
| | | console.log('设置内容:', parsedData);
|
| | | if (parsedData.server && parsedData.server.fileMode) {
|
| | | fileMode.value = parsedData.server.fileMode;
|
| | | }
|
| | | } else {
|
| | | console.error('请求失败,状态码:', response.code);
|
| | | }
|
| | | } catch (error) {
|
| | | console.error('请求发生错误:', error);
|
| | | }
|
| | | };
|
| | |
|
| | |
|
| | | const selectOptimizeInfo = () => {
|
| | |
| | | loadInventoryData();
|
| | | selectLayout();
|
| | | selectOptimizeInfo();
|
| | | fetchSettings(username);
|
| | | });
|
| | |
|
| | | const submitLayouts = async () => {
|
| | |
| | | glassType:inventoryData.value[0].model,
|
| | | quantity: inventoryData.value[0].processingQuantity,
|
| | | fileType:"OPT",
|
| | | fileSaveMode:fileSaveMode.value,
|
| | | fileSaveMode:fileMode.value,
|
| | | glassIdMode:1,
|
| | | layouts: optimizeLayouts.value.layouts
|
| | | }, {
|
| | |
| | | return;
|
| | | }
|
| | | const parsedData = JSON.parse(response.data);
|
| | | if (!parsedData.server) {
|
| | | parsedData.server = {};
|
| | | }
|
| | | if (!parsedData.server.fileMode) {
|
| | | parsedData.server.fileMode = '1'; // 默认为单文件模式
|
| | | }
|
| | | Object.assign(settings, parsedData);
|
| | | console.log('设置已更新:', settings);
|
| | | } else {
|
| | |
| | | <div class="display-settings">
|
| | | <h2>结果输出设置</h2>
|
| | | <div class="form-group">
|
| | | <label>文件模式</label>
|
| | | <div class="radio-group">
|
| | | <input
|
| | | type="radio"
|
| | | id="singleFile"
|
| | | value="1"
|
| | | v-model="settings.server.fileMode"
|
| | | />
|
| | | <label for="singleFile">单文件</label>
|
| | |
|
| | | <input
|
| | | type="radio"
|
| | | id="multiFile"
|
| | | value="2"
|
| | | v-model="settings.server.fileMode"
|
| | | style="margin-left: 20px;"
|
| | | />
|
| | | <label for="multiFile">多文件</label>
|
| | | </div>
|
| | | </div>
|
| | | <div class="form-group">
|
| | | <label>工程文件保存路径</label>
|
| | | <input type="text" v-model="settings.server.output_format" />
|
| | | </div>
|
| | |
| | | background-color: white;
|
| | | padding: 15px;
|
| | | border-radius: 8px;
|
| | | box-shadow: 0 2px 4 rgba(0, 0, 0, 0.1);
|
| | | box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
| | | }
|
| | |
|
| | | .sidebar-item {
|
| | |
| | | const optionVal = ref(50) |
| | | |
| | | // 定义装载率 |
| | | const percentage1 = ref(80) |
| | | const percentage1 = ref(50) |
| | | const percentage2 = ref(50) |
| | | |
| | | // 定义其他表单数据 |
| | |
| | | :close-on-press-escape="false" |
| | | :title="$t('processCard.labelStyle')" |
| | | destroy-on-close |
| | | style="width: 90%;height:93%;margin-top: 3vh "> |
| | | style="width: 90%;height:91%;margin-top: 3vh "> |
| | | <!-- <tag-style style="width: 100%;height: 100%"/>--> |
| | | <tag-style-designer :faceOrientation="labelRow.faceOrientation" |
| | | :lableType="labelRow.lableType" |
| | |
| | | remark: remark.value, |
| | | container: container.value, |
| | | flowCard: resultData, |
| | | createTime: titleUploadData.value.reportingWorkTime |
| | | }) |
| | | //调用入库接口 |
| | | request.post("/finishedGoodsInventory/addSelectWarehousing",flowData.value).then((res) => { |
| | |
| | | import com.example.erp.entity.sd.OrderDetail; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.apache.ibatis.annotations.Param; |
| | | import org.springframework.data.repository.CrudRepository; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | |
| | | public interface FinishedOperateLogMapper extends BaseMapper<FinishedOperateLog> { |
| | | FinishedOperateLog getselectFinishedOperateLog(); |
| | | |
| | | Boolean insertIntFinishedOperateLog(@Param("flowCard") FlowCard flowCard ,@Param("userName") String userName, |
| | | @Param("oddNumber") String oddNumber,@Param("container") String container, |
| | | @Param("deliveryDetailMoney") Double deliveryDetailMoney,@Param("deliveryDetailArea") Double deliveryDetailArea); |
| | | Boolean insertIntFinishedOperateLog(@Param("flowCard") FlowCard flowCard , @Param("userName") String userName, |
| | | @Param("oddNumber") String oddNumber, @Param("container") String container, |
| | | @Param("deliveryDetailMoney") Double deliveryDetailMoney, |
| | | @Param("deliveryDetailArea") Double deliveryDetailArea, |
| | | String createTime); |
| | | |
| | | Boolean insertOutFinishedOperateLog(@Param("orderDetail") OrderDetail orderDetail, @Param("userName") String userName, @Param("oddNumber") String oddNumber, String boxNo); |
| | | |
| | |
| | | import java.sql.SQLOutput; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.util.*; |
| | | |
| | | @Service |
| | |
| | | if (object.get("decValue") != null) { |
| | | decValue = Integer.parseInt(object.get("decValue").toString()); |
| | | } |
| | | String createTime = null; |
| | | if(object.get("createTime")!=null){ |
| | | createTime = object.get("createTime").toString(); |
| | | } |
| | | |
| | | Log log = new Log(); |
| | | log.setOperator(userName); |
| | | log.setOperatorId(userId); |
| | |
| | | |
| | | |
| | | //添加出入库记录 |
| | | finishedOperateLogMapper.insertIntFinishedOperateLog(flowCard,userName,oddNumber,container,deliveryDetailMoney,deliveryDetailArea); |
| | | finishedOperateLogMapper.insertIntFinishedOperateLog(flowCard,userName,oddNumber,container,deliveryDetailMoney,deliveryDetailArea,createTime); |
| | | Integer finishedGoodsInventorycount = 0; |
| | | finishedGoodsInventorycount = finishedGoodsInventoryMapper.findOrderNumberdContainercount(flowCard.getOrder().getOrderId(),flowCard.getOrderNumber(),container); |
| | | |
| | |
| | | ) |
| | | values ( |
| | | #{oddNumber} ,#{flowCard.order.orderId},#{flowCard.processId},#{flowCard.orderNumber},"入库",#{userName}, |
| | | #{flowCard.inventoryQuantity},now(),"未审核",#{container},#{deliveryDetailMoney},#{deliveryDetailArea} |
| | | #{flowCard.inventoryQuantity}, |
| | | <if test="createTime != null"> |
| | | #{createTime} |
| | | </if> |
| | | <if test="createTime == null"> |
| | | now() |
| | | </if> |
| | | ,"未审核",#{container},#{deliveryDetailMoney},#{deliveryDetailArea} |
| | | |
| | | ) |
| | | </insert> |
| | | |
| | |
| | | </select> |
| | | <select id="getOptimizeDetailsInfo" resultType="java.util.Map"> |
| | | SELECT |
| | | 0 As isRemain, |
| | | width AS realWidth, |
| | | height AS realHeight, |
| | | p_width AS width, |
| | | p_height AS height, |
| | | process_id AS processId, |
| | | layer, |
| | | total_layer AS totalLayer, |
| | | order_sort As orderSort, |
| | | stock_id AS layoutId, |
| | | stock_number AS glassSort, |
| | | x_axis AS x, |
| | | y_axis AS y, |
| | | mark_icon AS markIcon, |
| | | isRotate, |
| | | glass_point AS glassPoint, |
| | | rack_no As rackNo |
| | | 0 AS isRemain, |
| | | od.width AS realWidth, |
| | | od.height AS realHeight, |
| | | od.p_width AS width, |
| | | od.p_height AS height, |
| | | od.process_id AS processId, |
| | | od.layer, |
| | | od.total_layer AS totalLayer, |
| | | od.order_sort AS orderSort, |
| | | od.stock_id AS layoutId, |
| | | od.stock_number AS glassSort, |
| | | od.x_axis AS x, |
| | | od.y_axis AS y, |
| | | od.mark_icon AS markIcon, |
| | | od.isRotate, |
| | | od.glass_point AS glassPoint, |
| | | fc.order_id AS orderNo, |
| | | ogd.process, |
| | | o.customer_name AS customerName, |
| | | o.processing_note AS processingNote, |
| | | o.project AS projectName, |
| | | ord.product_name AS productName, |
| | | ord.building_number AS buildingNumber, |
| | | COALESCE(h.layout_id, 0) as heatLayoutId, |
| | | od.rack_no AS rackNo |
| | | FROM |
| | | pp.optimize_detail |
| | | pp.optimize_detail od |
| | | LEFT JOIN pp.flow_card fc on od.process_id = fc.process_id |
| | | LEFT JOIN sd.order_glass_detail ogd ON fc.order_id = ogd.order_id |
| | | LEFT JOIN sd.ORDER o ON o.order_id = fc.order_id |
| | | LEFT JOIN sd.order_detail ord ON fc.order_id = ord.order_id |
| | | LEFT JOIN pp.optimize_heat_detail h ON h.process_id = fc.process_id |
| | | WHERE |
| | | project_no = #{projectId} |
| | | od.project_no = #{projectId} |
| | | </select> |
| | | <select id="getOptimizeOffsetsInfo" resultType="java.util.Map"> |
| | | SELECT |
| | |
| | | </select> |
| | | |
| | | <select id="yieldProcessMp"> |
| | | SELECT |
| | | select |
| | | rw.this_process as process, |
| | | rw.completedQuantity, |
| | | IFNULL(dd.breakageQuantity,0) as breakageQuantity, |
| | | rw.completedArea, |
| | | IFNULL(dd.breakageArea,0) as breakageArea, |
| | | CONCAT(ROUND(TRUNCATE(rw.completedQuantity/(rw.completedQuantity + IFNULL(dd.breakageArea,0)),2)*100), '%') as finished |
| | | from |
| | | ( |
| | | select rw.this_process,SUM(rwd.completed_quantity) as completedQuantity |
| | | ,ROUND(SUM((rwd.child_width) * (rwd.child_height) * rwd.completed_quantity / 1000000), 2) as completedArea |
| | | from reporting_work rw |
| | | LEFT JOIN reporting_work_detail rwd on rwd.reporting_work_id = rw.reporting_work_id |
| | | |
| | | t.this_process as process, |
| | | SUM(t.completed_quantity) as completedQuantity, |
| | | SUM(t.area) as completedArea, |
| | | SUM(t.breakageQuantity) as breakageQuantity, |
| | | SUM(t.breakageArea) as breakageArea, |
| | | CONCAT(ROUND(ROUND(SUM(t.area)/(SUM(t.area) + SUM(t.breakageArea)),2)*100), '%') as finished |
| | | where rw.reporting_work_time >= #{selectTime1} |
| | | AND rw.reporting_work_time < #{selectTime2} |
| | | AND rw.reviewed_state >= 0 |
| | | GROUP BY rw.this_process |
| | | ) as rw |
| | | left join |
| | | ( |
| | | select dd.responsible_process,sum(dd.breakage_quantity) as breakageQuantity |
| | | ,ROUND(SUM((rwd.child_width) * (rwd.child_height) * dd.breakage_quantity / 1000000), 2) as breakageArea |
| | | from reporting_work rw left join damage_details dd on dd.reporting_work_id = rw.reporting_work_id |
| | | LEFT JOIN reporting_work_detail rwd on rwd.reporting_work_id = dd.reporting_work_id |
| | | and rwd.order_number = dd.order_number and rwd.technology_number = dd.technology_number |
| | | where rw.reporting_work_time >= #{selectTime1} |
| | | AND rw.reporting_work_time < #{selectTime2} |
| | | AND rw.reviewed_state >= 0 and dd.available =0 |
| | | GROUP BY dd.responsible_process |
| | | ) as dd on rw.this_process = dd.responsible_process |
| | | |
| | | FROM |
| | | ( |
| | | SELECT |
| | | rw.reporting_work_time, |
| | | rw.this_process, |
| | | o.project, |
| | | o.batch, |
| | | rw.process_id, |
| | | rwd.completed_quantity AS completed_quantity, |
| | | ROUND(MAX(ogd.child_width) * MAX(ogd.child_height) * rwd.completed_quantity / 1000000, 2) AS area, |
| | | IFNULL(dd.breakage_quantity,0) as breakageQuantity, |
| | | IFNULL(ROUND(MAX(ogd.child_width) * MAX(ogd.child_height) * dd.breakage_quantity / 1000000, 2),0) AS breakageArea, |
| | | IFNULL(dd.responsible_team,'') as responsibleTeam, |
| | | od.product_name |
| | | |
| | | |
| | | FROM |
| | | reporting_work AS rw |
| | | LEFT JOIN reporting_work_detail AS rwd |
| | | ON rwd.reporting_work_id = rw.reporting_work_id |
| | | LEFT JOIN damage_details as dd on dd.reporting_work_id = rw.reporting_work_id |
| | | LEFT JOIN flow_card AS fc |
| | | ON fc.order_id = rw.order_id |
| | | AND fc.process_id = rw.process_id |
| | | AND fc.order_number = rwd.order_number |
| | | AND fc.technology_number = rwd.technology_number |
| | | LEFT JOIN sd.order_glass_detail AS ogd |
| | | ON ogd.order_id = fc.order_id |
| | | AND ogd.order_number = fc.order_number |
| | | AND ogd.technology_number = fc.technology_number |
| | | LEFT JOIN sd.order_detail AS od |
| | | ON od.order_id = ogd.order_id |
| | | AND od.order_number = ogd.order_number |
| | | LEFT JOIN sd.`order` AS o |
| | | ON o.order_id = od.order_id |
| | | WHERE |
| | | o.create_order > 0 |
| | | AND rw.reviewed_state >= 0 |
| | | AND rwd.completed_quantity + IFNULL(dd.breakage_quantity,0)> 0 |
| | | AND rw.reporting_work_time >= #{selectTime1} |
| | | AND rw.reporting_work_time < #{selectTime2} |
| | | |
| | | GROUP BY |
| | | rw.reporting_work_id, |
| | | rw.process_id, |
| | | rw.this_process, |
| | | rw.teams_groups_name, |
| | | rwd.order_number, |
| | | rwd.technology_number |
| | | |
| | | ) t |
| | | |
| | | GROUP BY |
| | | t.this_process |
| | | ORDER BY |
| | | t.this_process |
| | | </select> |
| | | </mapper> |